diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.target/aarch64/neg_1.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.target/aarch64/neg_1.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/neg_1.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/neg_1.c new file mode 100644 index 000000000..04b0fdd23 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/neg_1.c @@ -0,0 +1,67 @@ +/* { 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 } } */ |