Hi all, This patch reimplements the saturating-truncate-and-insert-into-high intrinsics using the appropriate RTL codes and builtins.
Bootstrapped on aarch64-none-linux-gnu and tested on aarch64_be-none-elf too. Pushing to trunk. Thanks, Kyrill gcc/ * config/aarch64/aarch64-simd.md (aarch64_<su>qxtn2<mode>_le): Define. (aarch64_<su>qxtn2<mode>_be): Likewise. (aarch64_<su>qxtn2<mode>): Likewise. * config/aarch64/aarch64-simd-builtins.def (sqxtn2, uqxtn2): Define builtins. * config/aarch64/iterators.md (SAT_TRUNC): Define code_iterator. (su): Handle ss_truncate and us_truncate. * config/aarch64/arm_neon.h (vqmovn_high_s16): Reimplement using builtin. (vqmovn_high_s32): Likewise. (vqmovn_high_s64): Likewise. (vqmovn_high_u16): Likewise. (vqmovn_high_u32): Likewise. (vqmovn_high_u64): Likewise. gcc/testsuite/ * gcc.target/aarch64/narrow_high-intrinsics.c: Update uqxtn2 and sqxtn2 scan-assembler-times.
qmovn-hi.patch
Description: qmovn-hi.patch