[(set_attr "type" "neon_fp_neg_<stype><q>")]
)
+(define_insn "aarch64_fnegv2di2<vczle><vczbe>"
+ [(set (match_operand:V2DI 0 "register_operand" "=w")
+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "w")]
+ UNSPEC_FNEG))]
+ "TARGET_SIMD"
+ "fneg\\t%0.2d, %1.2d"
+ [(set_attr "type" "neon_fp_neg_d")]
+)
+
(define_insn "abs<mode>2<vczle><vczbe>"
[(set (match_operand:VHSDF 0 "register_operand" "=w")
(abs:VHSDF (match_operand:VHSDF 1 "register_operand" "w")))]
/* Use the same base type as aarch64_gen_shareable_zero. */
rtx zero = CONST0_RTX (V4SImode);
emit_move_insn (lowpart_subreg (V4SImode, target, mode), zero);
- rtx neg = lowpart_subreg (V2DFmode, target, mode);
- emit_insn (gen_negv2df2 (neg, copy_rtx (neg)));
+ rtx neg = lowpart_subreg (V2DImode, target, mode);
+ emit_insn (gen_aarch64_fnegv2di2 (neg, copy_rtx (neg)));
return true;
}
UNSPEC_FMINNMV ; Used in aarch64-simd.md.
UNSPEC_FMINV ; Used in aarch64-simd.md.
UNSPEC_FADDV ; Used in aarch64-simd.md.
+ UNSPEC_FNEG ; Used in aarch64-simd.md.
UNSPEC_ADDV ; Used in aarch64-simd.md.
UNSPEC_SMAXV ; Used in aarch64-simd.md.
UNSPEC_SMINV ; Used in aarch64-simd.md.
--- /dev/null
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-signed-zeros" } */
+
+typedef __attribute__((__vector_size__ (8))) unsigned long V;
+
+V __attribute__((__noipa__))
+foo (void)
+{
+ return (V){ 0x8000000000000000 };
+}
+
+V ref = (V){ 0x8000000000000000 };
+
+int
+main ()
+{
+ V v = foo ();
+ if (v[0] != ref[0])
+ __builtin_abort();
+}