diff options
author | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2012-10-06 01:38:51 +0159 |
---|---|---|
committer | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2012-10-06 01:38:51 +0159 |
commit | 0b642ae1fa9a3e65eb826c1964482f975b33f5cd (patch) | |
tree | 257dc1809aace8eeae75e3253d59d24dcb3dfc3d | |
parent | 1d5e006fe6a308dc976434c698b3cac89f2cd6a0 (diff) | |
download | gcc-aarch64-0b642ae1fa9a3e65eb826c1964482f975b33f5cd.tar.gz |
Sync with svn rev. 192135
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r-- | gcc/ChangeLog.aarch64 | 20 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.md | 8 | ||||
-rw-r--r-- | gcc/config/aarch64/arm_neon.h | 131 |
3 files changed, 58 insertions, 101 deletions
diff --git a/gcc/ChangeLog.aarch64 b/gcc/ChangeLog.aarch64 index 3ac47220f..34bdc16f6 100644 --- a/gcc/ChangeLog.aarch64 +++ b/gcc/ChangeLog.aarch64 @@ -1,3 +1,23 @@ +2012-10-05 Tejas Belagod <tejas.belagod@arm.com> + + * config/aarch64/arm_neon.h (vfma_n_f32, vfmaq_n_f32, vfmaq_n_f64): New. + +2012-10-05 Tejas Belagod <tejas.belagod@arm.com> + + * config/aarch64/arm_neon.h (vqmlalh_lane_s16, vqmlalh_s16, + vqmlals_lane_s32, vqmlals_s32, vqmlslh_lane_s16, vqmlslh_s16, + vqmlsls_lane_s32, vqmlsls_s32): Remove old temporary inline asm + implementations. + +2012-10-05 Tejas Belagod <tejas.belagod@arm.com> + + * config/aarch64/arm_neon.h (vbslq_f64): Fix parameter type. + +2012-10-05 Sofiane Naci <sofiane.naci@arm.com> + + * config/aarch64/aarch64.md (*fnmadd<mode>4): Add missing + constraints. + 2012-10-01 Ian Bolton <ian.bolton@arm.com> Richard Henderson <rth@redhat.com> diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 241bc9213..1df4d02c2 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -2516,10 +2516,10 @@ ;; If signed zeros are ignored, -(a * b + c) = -a * b - c. (define_insn "*fnmadd<mode>4" - [(set (match_operand:GPF 0 "register_operand") - (neg:GPF (fma:GPF (match_operand:GPF 1 "register_operand") - (match_operand:GPF 2 "register_operand") - (match_operand:GPF 3 "register_operand"))))] + [(set (match_operand:GPF 0 "register_operand" "=w") + (neg:GPF (fma:GPF (match_operand:GPF 1 "register_operand" "w") + (match_operand:GPF 2 "register_operand" "w") + (match_operand:GPF 3 "register_operand" "w"))))] "!HONOR_SIGNED_ZEROS (<MODE>mode) && TARGET_FLOAT" "fnmadd\\t%<s>0, %<s>1, %<s>2, %<s>3" [(set_attr "v8type" "fmadd") diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index a092dfff9..f1fb239e3 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -4975,7 +4975,7 @@ vbslq_f32 (uint32x4_t a, float32x4_t b, float32x4_t c) } __extension__ static __inline float64x2_t __attribute__ ((__always_inline__)) -vbslq_f64 (float64x2_t a, float64x2_t b, float64x2_t c) +vbslq_f64 (uint64x2_t a, float64x2_t b, float64x2_t c) { float64x2_t result; __asm__ ("bsl %0.16b, %2.16b, %3.16b" @@ -7887,6 +7887,39 @@ vfmaq_f64 (float64x2_t a, float64x2_t b, float64x2_t c) }) __extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) +vfma_n_f32 (float32x2_t a, float32x2_t b, float32_t c) +{ + float32x2_t result; + __asm__ ("fmla %0.2s, %2.2s, %3.s[0]" + : "=w"(result) + : "0"(a), "w"(b), "w"(c) + : /* No clobbers */); + return result; +} + +__extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) +vfmaq_n_f32 (float32x4_t a, float32x4_t b, float32_t c) +{ + float32x4_t result; + __asm__ ("fmla %0.4s, %2.4s, %3.s[0]" + : "=w"(result) + : "0"(a), "w"(b), "w"(c) + : /* No clobbers */); + return result; +} + +__extension__ static __inline float64x2_t __attribute__ ((__always_inline__)) +vfmaq_n_f64 (float64x2_t a, float64x2_t b, float64_t c) +{ + float64x2_t result; + __asm__ ("fmla %0.2d, %2.2d, %3.d[0]" + : "=w"(result) + : "0"(a), "w"(b), "w"(c) + : /* No clobbers */); + return result; +} + +__extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) vfms_f32 (float32x2_t a, float32x2_t b, float32x2_t c) { float32x2_t result; @@ -14084,102 +14117,6 @@ vqdmulhq_n_s32 (int32x4_t a, int32_t b) return result; } -#define vqmlalh_lane_s16(a, b, c) \ - __extension__ \ - ({ \ - int16x8_t b_ = (b); \ - int16_t a_ = (a); \ - int32_t result; \ - __asm__ ("sqdmlal %s0,%h1,%2.h[%3]" \ - : "=w"(result) \ - : "w"(a_), "w"(b_), "i"(c) \ - : /* No clobbers */); \ - result; \ - }) - -__extension__ static __inline int32_t __attribute__ ((__always_inline__)) -vqmlalh_s16 (int16_t a, int16_t b) -{ - int32_t result; - __asm__ ("sqdmlal %s0,%h1,%h2" - : "=w"(result) - : "w"(a), "w"(b) - : /* No clobbers */); - return result; -} - -#define vqmlals_lane_s32(a, b, c) \ - __extension__ \ - ({ \ - int32x4_t b_ = (b); \ - int32_t a_ = (a); \ - int64_t result; \ - __asm__ ("sqdmlal %d0,%s1,%2.s[%3]" \ - : "=w"(result) \ - : "w"(a_), "w"(b_), "i"(c) \ - : /* No clobbers */); \ - result; \ - }) - -__extension__ static __inline int64_t __attribute__ ((__always_inline__)) -vqmlals_s32 (int32_t a, int32_t b) -{ - int64_t result; - __asm__ ("sqdmlal %d0,%s1,%s2" - : "=w"(result) - : "w"(a), "w"(b) - : /* No clobbers */); - return result; -} - -#define vqmlslh_lane_s16(a, b, c) \ - __extension__ \ - ({ \ - int16x8_t b_ = (b); \ - int16_t a_ = (a); \ - int32_t result; \ - __asm__ ("sqdmlsl %s0,%h1,%2.h[%3]" \ - : "=w"(result) \ - : "w"(a_), "w"(b_), "i"(c) \ - : /* No clobbers */); \ - result; \ - }) - -__extension__ static __inline int32_t __attribute__ ((__always_inline__)) -vqmlslh_s16 (int16_t a, int16_t b) -{ - int32_t result; - __asm__ ("sqdmlsl %s0,%h1,%h2" - : "=w"(result) - : "w"(a), "w"(b) - : /* No clobbers */); - return result; -} - -#define vqmlsls_lane_s32(a, b, c) \ - __extension__ \ - ({ \ - int32x4_t b_ = (b); \ - int32_t a_ = (a); \ - int64_t result; \ - __asm__ ("sqdmlsl %d0,%s1,%2.s[%3]" \ - : "=w"(result) \ - : "w"(a_), "w"(b_), "i"(c) \ - : /* No clobbers */); \ - result; \ - }) - -__extension__ static __inline int64_t __attribute__ ((__always_inline__)) -vqmlsls_s32 (int32_t a, int32_t b) -{ - int64_t result; - __asm__ ("sqdmlsl %d0,%s1,%s2" - : "=w"(result) - : "w"(a), "w"(b) - : /* No clobbers */); - return result; -} - __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vqmovn_high_s16 (int8x8_t a, int16x8_t b) { |