| /* { 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; |
| } |
| |