2 /* { dg-require-effective-target int32plus } */
3 /* { dg-options "-ftree-loop-distribution" } */
5 #define CAST_LONG unsigned int
6 typedef struct cast_key_st
10 #define CAST_exp(l,A,a,n) \
13 a[n+2]=(l>> 8)&0xff; \
14 a[n+1]=(l>>16)&0xff; \
17 CAST_LONG CAST_S_table
[1024];
19 #define S4 (CAST_S_table + 000)
20 #define S5 (CAST_S_table + 256)
21 #define S6 (CAST_S_table + 512)
22 #define S7 (CAST_S_table + 768)
25 CAST_set_key (CAST_KEY
* key
)
30 CAST_LONG X
[4] = {0,0,0,0}, Z
[4];
33 for (i
= 0; i
< 16; i
++)
37 l
= X
[0] ^ S4
[x
[13]] ^ S5
[x
[15]] ^ S6
[x
[12]] ^ S7
[x
[14]] ^ S6
[x
[8]];
38 CAST_exp (l
, Z
, z
, 0);
39 CAST_exp (l
, Z
, z
, 4);
40 CAST_exp (l
, Z
, z
, 8);
41 CAST_exp (l
, Z
, z
, 12);
42 K
[0] = S4
[z
[8]] ^ S5
[z
[9]] ^ S6
[z
[7]] ^ S7
[z
[6]] ^ S4
[z
[2]];
43 K
[1] = S4
[z
[10]] ^ S5
[z
[11]] ^ S6
[z
[5]] ^ S7
[z
[4]] ^ S5
[z
[6]];
44 K
[2] = S4
[z
[12]] ^ S5
[z
[13]] ^ S6
[z
[3]] ^ S7
[z
[2]] ^ S6
[z
[9]];
45 K
[3] = S4
[z
[14]] ^ S5
[z
[15]] ^ S6
[z
[1]] ^ S7
[z
[0]] ^ S7
[z
[12]];
46 K
[4] = S4
[x
[3]] ^ S5
[x
[2]] ^ S6
[x
[12]] ^ S7
[x
[13]] ^ S4
[x
[8]];
47 K
[5] = S4
[x
[1]] ^ S5
[x
[0]] ^ S6
[x
[14]] ^ S7
[x
[15]] ^ S5
[x
[13]];
48 K
[6] = S4
[x
[7]] ^ S5
[x
[6]] ^ S6
[x
[8]] ^ S7
[x
[9]] ^ S6
[x
[3]];
49 K
[7] = S4
[x
[5]] ^ S5
[x
[4]] ^ S6
[x
[10]] ^ S7
[x
[11]] ^ S7
[x
[7]];
50 K
[8] = S4
[z
[3]] ^ S5
[z
[2]] ^ S6
[z
[12]] ^ S7
[z
[13]] ^ S4
[z
[9]];
51 K
[9] = S4
[z
[1]] ^ S5
[z
[0]] ^ S6
[z
[14]] ^ S7
[z
[15]] ^ S5
[z
[12]];
52 K
[10] = S4
[z
[7]] ^ S5
[z
[6]] ^ S6
[z
[8]] ^ S7
[z
[9]] ^ S6
[z
[2]];
53 K
[11] = S4
[z
[5]] ^ S5
[z
[4]] ^ S6
[z
[10]] ^ S7
[z
[11]] ^ S7
[z
[6]];
54 l
= Z
[2] ^ S4
[z
[5]] ^ S5
[z
[7]] ^ S6
[z
[4]] ^ S7
[z
[6]] ^ S6
[z
[0]];
55 CAST_exp (l
, X
, x
, 0);
56 K
[12] = S4
[x
[8]] ^ S5
[x
[9]] ^ S6
[x
[7]] ^ S7
[x
[6]] ^ S4
[x
[3]];
57 K
[13] = S4
[x
[10]] ^ S5
[x
[11]] ^ S6
[x
[5]] ^ S7
[x
[4]] ^ S5
[x
[7]];
58 K
[14] = S4
[x
[12]] ^ S5
[x
[13]] ^ S6
[x
[3]] ^ S7
[x
[2]] ^ S6
[x
[8]];
59 K
[15] = S4
[x
[14]] ^ S5
[x
[15]] ^ S6
[x
[1]] ^ S7
[x
[0]] ^ S7
[x
[13]];
64 for (i
= 0; i
< 16; i
++)
66 key
->data
[i
* 2] = k
[i
];
67 key
->data
[i
* 2 + 1] = ((k
[i
+ 16]) + 16) & 0x1f;
74 CAST_KEY ref
= { {0x0069B3F8, 0x00000013, 0x000AEFF8, 0x00000013, 0x004AD0E0, 0x0000001B, 0x00818F18, 0x00000018, 0x008FF000, 0x0000001B, 0x002D1C00, 0x0000001B, 0x00EA2800, 0x00000010, 0x00C73400, 0x00000010, 0x004BF8E0, 0x0000001B, 0x00B3D718, 0x00000018, 0x00B0EBF8, 0x00000013, 0x003247F8, 0x00000013, 0x00C5BA20, 0x00000010, 0x002D1C00, 0x00000010, 0x0060822B, 0x00000008, 0x0096236B, 0x0000001B} };
77 for (i
= 1; i
< 1024; i
++)
78 CAST_S_table
[i
] = (CAST_S_table
[i
-1] * 7 + 3) & 0xFFFFFF;
80 if (__builtin_memcmp(&ref
, &key
, sizeof(ref
)))