aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2012-10-06 01:38:51 +0159
committerBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2012-10-06 01:38:51 +0159
commit0b642ae1fa9a3e65eb826c1964482f975b33f5cd (patch)
tree257dc1809aace8eeae75e3253d59d24dcb3dfc3d
parent1d5e006fe6a308dc976434c698b3cac89f2cd6a0 (diff)
downloadgcc-aarch64-0b642ae1fa9a3e65eb826c1964482f975b33f5cd.tar.gz
Sync with svn rev. 192135
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r--gcc/ChangeLog.aarch6420
-rw-r--r--gcc/config/aarch64/aarch64.md8
-rw-r--r--gcc/config/aarch64/arm_neon.h131
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)
{