Commit 040d8a1c by Ian Bolton Committed by Ian Bolton

AArch64 support for NEG in vector registers for DI and SI mode

From-SVN: r201261
parent 85bd4ac6
2013-07-26 Ian Bolton <ian.bolton@arm.com>
* config/aarch64/aarch64.md (neg<mode>2): Offer alternative that
uses vector registers.
2013-07-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
Richard Earnshaw <richard.earnshaw@arm.com>
......
......@@ -2041,12 +2041,17 @@
)
(define_insn "neg<mode>2"
[(set (match_operand:GPI 0 "register_operand" "=r")
(neg:GPI (match_operand:GPI 1 "register_operand" "r")))]
[(set (match_operand:GPI 0 "register_operand" "=r,w")
(neg:GPI (match_operand:GPI 1 "register_operand" "r,w")))]
""
"neg\\t%<w>0, %<w>1"
"@
neg\\t%<w>0, %<w>1
neg\\t%<rtn>0<vas>, %<rtn>1<vas>"
[(set_attr "v8type" "alu")
(set_attr "mode" "<MODE>")]
(set_attr "simd_type" "*,simd_negabs")
(set_attr "simd" "*,yes")
(set_attr "mode" "<MODE>")
(set_attr "simd_mode" "<MODE>")]
)
;; zero_extend version of above
......
2013-07-26 Ian Bolton <ian.bolton@arm.com>
* gcc.target/aarch64/neg_1.c: New test.
2013-07-25 Janus Weil <janus@gcc.gnu.org>
PR fortran/57966
......
/* { dg-do run } */
/* { dg-options "-O2 -fno-inline --save-temps" } */
extern void abort (void);
long long
neg64 (long long a)
{
/* { dg-final { scan-assembler "neg\tx\[0-9\]+" } } */
return 0 - a;
}
long long
neg64_in_dreg (long long a)
{
/* { dg-final { scan-assembler "neg\td\[0-9\]+, d\[0-9\]+" } } */
register long long x asm ("d8") = a;
register long long y asm ("d9");
asm volatile ("" : : "w" (x));
y = 0 - x;
asm volatile ("" : : "w" (y));
return y;
}
int
neg32 (int a)
{
/* { dg-final { scan-assembler "neg\tw\[0-9\]+" } } */
return 0 - a;
}
int
neg32_in_sreg (int a)
{
/* { dg-final { scan-assembler "neg\tv\[0-9\]+\.2s, v\[0-9\]+\.2s" } } */
register int x asm ("s8") = a;
register int y asm ("s9");
asm volatile ("" : : "w" (x));
y = 0 - x;
asm volatile ("" : : "w" (y));
return y;
}
int
main (void)
{
long long a;
int b;
a = 61;
b = 313;
if (neg64 (a) != -61)
abort ();
if (neg64_in_dreg (a) != -61)
abort ();
if (neg32 (b) != -313)
abort ();
if (neg32_in_sreg (b) != -313)
abort ();
return 0;
}
/* { dg-final { cleanup-saved-temps } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment