1  /* { dg-do run } */
       2  /* { dg-options "-O2 -fno-inline --save-temps" } */
       3  
       4  extern void abort (void);
       5  
       6  long long
       7  neg64 (long long a)
       8  {
       9    /* { dg-final { scan-assembler "neg\tx\[0-9\]+" } } */
      10    return 0 - a;
      11  }
      12  
      13  long long
      14  neg64_in_dreg (long long a)
      15  {
      16    /* { dg-final { scan-assembler "neg\td\[0-9\]+, d\[0-9\]+" } } */
      17    register long long x asm ("d8") = a;
      18    register long long y asm ("d9");
      19    asm volatile ("" : : "w" (x));
      20    y = 0 - x;
      21    asm volatile ("" : : "w" (y));
      22    return y;
      23  }
      24  
      25  int
      26  neg32 (int a)
      27  {
      28    /* { dg-final { scan-assembler "neg\tw\[0-9\]+" } } */
      29    return 0 - a;
      30  }
      31  
      32  int
      33  neg32_in_sreg (int a)
      34  {
      35    /* { dg-final { scan-assembler "neg\tv\[0-9\]+\.2s, v\[0-9\]+\.2s" } } */
      36    register int x asm ("s8") = a;
      37    register int y asm ("s9");
      38    asm volatile ("" : : "w" (x));
      39    y = 0 - x;
      40    asm volatile ("" : : "w" (y));
      41    return y;
      42  }
      43  
      44  int
      45  main (void)
      46  {
      47    long long a;
      48    int b;
      49    a = 61;
      50    b = 313;
      51  
      52    if (neg64 (a) != -61)
      53      abort ();
      54  
      55    if (neg64_in_dreg (a) != -61)
      56      abort ();
      57  
      58    if (neg32 (b) != -313)
      59      abort ();
      60  
      61    if (neg32_in_sreg (b) != -313)
      62      abort ();
      63  
      64    return 0;
      65  }
      66