testcase: Add testcase for PR 117330 [PR117330]
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / aes-fuse-1.c
blob1b4e10f78dbb9f96841f0474530f0c33aaf2fc29
1 /* { dg-do compile } */
2 /* { dg-options "-O3 -mcpu=cortex-a72+aes -dp" } */
3 /* { dg-additional-options "-march=armv8-a+aes" { target { aarch64*-*-* } } }*/
5 #include <arm_neon.h>
7 #define AESE(r, v, key) (r = vaeseq_u8 ((v), (key)));
8 #define AESMC(r, i) (r = vaesmcq_u8 (i))
10 const uint8x16_t zero = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
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;
21 void foo (void)
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);
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);
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);
59 AESMC (y, y);
60 dummy = vaddq_u8 (dummy, dummy);
61 dummy = vaddq_u8 (dummy, dummy);
62 AESMC (x, x);
65 /* { dg-final { scan-assembler-times "crypto_aese_fused" 6 } } */
66 /* { dg-final { scan-assembler-not "veor" } } */