On 21/12/15 11:58, Bilyan Borisov wrote:
This patch implements the vmaxnmQ_ST and vminnmQ_ST intrinsincs. It also
implements the __ARM_FEATURE_NUMERIC_MAXMIN macro, which is defined when
__ARM_ARCH >= 8, and which enables the intrinsincs.

Tested on arm-none-eabi, armeb-none-eabi, arm-none-linux-gnueabihf.

---

gcc/

2015-XX-XX  Bilyan Borisov  <bilyan.bori...@arm.com>

     * config/arm/arm-c.c (arm_cpu_builtins): New macro definition.
     * config/arm/arm_neon.h (vmaxnm_f32): New intrinsinc.
     (vmaxnmq_f32): Likewise.
     (vminnm_f32): Likewise.
     (vminnmq_f32): Likewise.
     * config/arm/arm_neon_builtins.def (vmaxnm): New builtin.
     (vminnm): Likewise.
     * config/arm/iterators.md (VMAXMINNM): New iterator.
     (maxmin): Updated iterator.
     * config/arm/neon.md (neon_v<maxmin><mode>, VCVTF): New pattern.
     * config/arm/unspecs.md (UNSPEC_VMAXNM): New unspec.
     (UNSPEC_VMINNM): Likewise.

gcc/testsuite/

2015-XX-XX  Bilyan Borisov  <bilyan.bori...@arm.com>

     * gcc.target/arm/simd/vmaxnm_f32_1.c: New.
     * gcc.target/arm/simd/vmaxnmq_f32_1.c: Likewise.
     * gcc.target/arm/simd/vminnm_f32_1.c: Likewise.
     * gcc.target/arm/simd/vminnmq_f32_1.c: Likewise.


I note strong similarities between this patch and David Sherwood's https://gcc.gnu.org/ml/gcc-patches/2015-12/msg01560.html

Both add the same UNSPEC_s, and equivalent VMAXMIN(F?)NM. David's adds <fmaxmin> and <fmaxmin_op> attributes, whereas Bilyan reuses some elements of the existing <maxmin>. AFAICT, the patterns they add are in other ways equivalent (same type, condition, modes, alternatives), albeit in different files and constructed using those different iterators, and David's has the standard names (which IIUC we want, so the autovectorizer finds them) whereas Bilyan adds the intrinsics (which we also want)...

--Alan

Reply via email to