(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
aes_xor_combine.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -mcpu=cortex-a55+aes" } */
       3  #include <arm_neon.h>
       4  
       5  #define AESE(r, v, key) (r = vaeseq_u8 ((v), (key)));
       6  #define AESD(r, v, key) (r = vaesdq_u8 ((v), (key)));
       7  
       8  const uint8x16_t zero = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
       9  
      10  uint8x16_t foo0 (uint8x16_t a, uint8x16_t b)
      11  {
      12    uint8x16_t dummy;
      13    AESE(dummy, a ^ b, zero);
      14    return dummy;
      15  }
      16  
      17  uint8x16_t foo1 (uint8x16_t a, uint8x16_t b)
      18  {
      19    uint8x16_t dummy;
      20    AESE(dummy, a ^ b, zero);
      21    AESE(dummy, dummy ^ a, zero);
      22    return dummy;
      23  }
      24  
      25  uint8x16_t bar0 (uint8x16_t a, uint8x16_t b)
      26  {
      27    uint8x16_t dummy;
      28    AESE(dummy, zero, a ^ b);
      29    return dummy;
      30  }
      31  
      32  uint8x16_t bar1 (uint8x16_t a, uint8x16_t b)
      33  {
      34    uint8x16_t dummy;
      35    AESE(dummy, zero, a ^ b);
      36    AESE(dummy, zero, b ^ dummy);
      37    return dummy;
      38  }
      39  
      40  uint8x16_t foo2 (uint8x16_t a, uint8x16_t b)
      41  {
      42    uint8x16_t dummy;
      43    AESD(dummy, a ^ b, zero);
      44    return dummy;
      45  }
      46  
      47  uint8x16_t foo3 (uint8x16_t a, uint8x16_t b)
      48  {
      49    uint8x16_t dummy;
      50    AESD(dummy, a ^ b, zero);
      51    AESD(dummy, dummy ^ a, zero);
      52    return dummy;
      53  }
      54  
      55  uint8x16_t bar2 (uint8x16_t a, uint8x16_t b)
      56  {
      57    uint8x16_t dummy;
      58    AESD(dummy, zero, a ^ b);
      59    return dummy;
      60  }
      61  
      62  uint8x16_t bar3 (uint8x16_t a, uint8x16_t b)
      63  {
      64    uint8x16_t dummy;
      65    AESD(dummy, zero, a ^ b);
      66    AESD(dummy, zero, b ^ dummy);
      67    return dummy;
      68  }
      69  /* { dg-final { scan-assembler-not "eor" } } */
      70  /* { dg-final { scan-assembler-not "mov" } } */