(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
vqneg_s64_1.c
       1  /* Test vqneg_s64 intrinsics work correctly.  */
       2  /* { dg-do run } */
       3  /* { dg-options "--save-temps" } */
       4  
       5  #include <arm_neon.h>
       6  
       7  extern void abort (void);
       8  
       9  int __attribute__ ((noinline))
      10  test_vqneg_s64 (int64x1_t passed, int64_t expected)
      11  {
      12    return vget_lane_s64 (vqneg_s64 (passed), 0) != expected;
      13  }
      14  
      15  int __attribute__ ((noinline))
      16  test_vqnegd_s64 (int64_t passed, int64_t expected)
      17  {
      18    return vqnegd_s64 (passed) != expected;
      19  }
      20  
      21  /* { dg-final { scan-assembler-times "sqneg\\td\[0-9\]+, d\[0-9\]+" 2 } } */
      22  
      23  int
      24  main (int argc, char **argv)
      25  {
      26    /* Basic test.  */
      27    if (test_vqneg_s64 (vcreate_s64 (-1), 1))
      28      abort ();
      29    if (test_vqnegd_s64 (-1, 1))
      30      abort ();
      31  
      32    /* Negating max int64_t.  */
      33    if (test_vqneg_s64 (vcreate_s64 (0x7fffffffffffffff), 0x8000000000000001))
      34      abort ();
      35    if (test_vqnegd_s64 (0x7fffffffffffffff, 0x8000000000000001))
      36      abort ();
      37  
      38    /* Negating min int64_t.
      39       Note, exact negation cannot be represented as int64_t.  */
      40    if (test_vqneg_s64 (vcreate_s64 (0x8000000000000000), 0x7fffffffffffffff))
      41      abort ();
      42    if (test_vqnegd_s64 (0x8000000000000000, 0x7fffffffffffffff))
      43      abort ();
      44  
      45    return 0;
      46  }