(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
aes-fuse-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -mcpu=cortex-a72+aes -dp" } */
       3  /* { dg-additional-options "-march=armv8-a+aes" { target { aarch64*-*-* } } }*/
       4  
       5  #include <arm_neon.h>
       6  
       7  #define AESE(r, v, key) (r = vaeseq_u8 ((v), (key)));
       8  #define AESMC(r, i) (r = vaesmcq_u8 (i))
       9  
      10  const uint8x16_t zero = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      11  
      12  uint8x16_t dummy;
      13  uint8x16_t a;
      14  uint8x16_t b;
      15  uint8x16_t c;
      16  uint8x16_t d;
      17  uint8x16_t x;
      18  uint8x16_t y;
      19  uint8x16_t k;
      20  
      21  void foo (void)
      22  
      23  {
      24    AESE (a, a, k);
      25    dummy = vaddq_u8 (dummy, dummy);
      26    dummy = vaddq_u8 (dummy, dummy);
      27    AESE (b, b, k);
      28    dummy = vaddq_u8 (dummy, dummy);
      29    dummy = vaddq_u8 (dummy, dummy);
      30    AESE (c, c, k);
      31    dummy = vaddq_u8 (dummy, dummy);
      32    dummy = vaddq_u8 (dummy, dummy);
      33    AESE (d, d, k);
      34    dummy = vaddq_u8 (dummy, dummy);
      35    dummy = vaddq_u8 (dummy, dummy);
      36  
      37    x = x ^ k;
      38    AESE (x, x, zero);
      39    dummy = vaddq_u8 (dummy, dummy);
      40    dummy = vaddq_u8 (dummy, dummy);
      41    y = y ^ k;
      42    AESE (y, y, zero);
      43    dummy = vaddq_u8 (dummy, dummy);
      44    dummy = vaddq_u8 (dummy, dummy);
      45  
      46    AESMC (d, d);
      47    dummy = vaddq_u8 (dummy, dummy);
      48    dummy = vaddq_u8 (dummy, dummy);
      49    AESMC (c, c);
      50    dummy = vaddq_u8 (dummy, dummy);
      51    dummy = vaddq_u8 (dummy, dummy);
      52    AESMC (b, b);
      53    dummy = vaddq_u8 (dummy, dummy);
      54    dummy = vaddq_u8 (dummy, dummy);
      55    AESMC (a, a);
      56    dummy = vaddq_u8 (dummy, dummy);
      57    dummy = vaddq_u8 (dummy, dummy);
      58  
      59    AESMC (y, y);
      60    dummy = vaddq_u8 (dummy, dummy);
      61    dummy = vaddq_u8 (dummy, dummy);
      62    AESMC (x, x);
      63  }
      64  
      65  /* { dg-final { scan-assembler-times "crypto_aese_fused" 6 } } */
      66  /* { dg-final { scan-assembler-not "veor" } } */