(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
aes-fuse-1.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target arm_crypto_ok } */
       3  /* { dg-add-options arm_crypto } */
       4  /* { dg-additional-options "-mcpu=cortex-a53 -O3 -dp" } */
       5  
       6  #include <arm_neon.h>
       7  
       8  #define AESE(r, v, key) (r = vaeseq_u8 ((v), (key)));
       9  #define AESMC(r, i) (r = vaesmcq_u8 (i))
      10  
      11  const uint8x16_t zero = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      12  
      13  uint8x16_t dummy;
      14  uint8x16_t a;
      15  uint8x16_t b;
      16  uint8x16_t c;
      17  uint8x16_t d;
      18  uint8x16_t x;
      19  uint8x16_t y;
      20  uint8x16_t k;
      21  
      22  void foo (void)
      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" } } */