annotate gcc/testsuite/gcc.dg/pr55150-1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR middle-end/55150 */
kono
parents:
diff changeset
2 /* { dg-do compile } */
kono
parents:
diff changeset
3 /* { dg-options "-Os -g" } */
kono
parents:
diff changeset
4 /* { dg-require-effective-target int32plus } */
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 typedef unsigned int KEY_TABLE_TYPE[(272 / 4)];
kono
parents:
diff changeset
7 typedef unsigned int u32;
kono
parents:
diff changeset
8 typedef unsigned char u8;
kono
parents:
diff changeset
9 static const u32 Camellia_SBOX[][256] = {
kono
parents:
diff changeset
10 };
kono
parents:
diff changeset
11 static const u32 SIGMA[] = {
kono
parents:
diff changeset
12 0xa09e667f, 0x3bcc908b, 0xb67ae858, 0x4caa73b2, 0xc6ef372f, 0xe94f82be, 0x54ff53a5, 0xf1d36f1c, 0x10e527fa, 0xde682d1d, 0xb05688c2, 0xb3e6c1fd };
kono
parents:
diff changeset
13 int Camellia_Ekeygen (int keyBitLength, const u8 * rawKey, KEY_TABLE_TYPE k) {
kono
parents:
diff changeset
14 register u32 s0, s1, s2, s3;
kono
parents:
diff changeset
15 k[0] = s0 = ( {
kono
parents:
diff changeset
16 u32 r = *(const u32 *) (rawKey);
kono
parents:
diff changeset
17 r;
kono
parents:
diff changeset
18 }
kono
parents:
diff changeset
19 );
kono
parents:
diff changeset
20 k[2] = s2 = ( {
kono
parents:
diff changeset
21 u32 r = *(const u32 *) (rawKey + 8);
kono
parents:
diff changeset
22 r;
kono
parents:
diff changeset
23 }
kono
parents:
diff changeset
24 );
kono
parents:
diff changeset
25 k[3] = s3 = ( {
kono
parents:
diff changeset
26 u32 r = *(const u32 *) (rawKey + 12);
kono
parents:
diff changeset
27 r;
kono
parents:
diff changeset
28 }
kono
parents:
diff changeset
29 );
kono
parents:
diff changeset
30 if (keyBitLength != 128) {
kono
parents:
diff changeset
31 k[8] = s0 = ( {
kono
parents:
diff changeset
32 u32 r = *(const u32 *) (rawKey + 16);
kono
parents:
diff changeset
33 r;
kono
parents:
diff changeset
34 }
kono
parents:
diff changeset
35 );
kono
parents:
diff changeset
36 if (keyBitLength == 192) {
kono
parents:
diff changeset
37 k[10] = s2 = ~s0;
kono
parents:
diff changeset
38 k[11] = s3 = ~s1;
kono
parents:
diff changeset
39 }
kono
parents:
diff changeset
40 }
kono
parents:
diff changeset
41 s0 ^= k[0], s1 ^= k[1], s2 ^= k[2], s3 ^= k[3];
kono
parents:
diff changeset
42 if (keyBitLength == 128) {
kono
parents:
diff changeset
43 k[4] = s0, k[5] = s1, k[6] = s2, k[7] = s3;
kono
parents:
diff changeset
44 }
kono
parents:
diff changeset
45 else {
kono
parents:
diff changeset
46 k[12] = s0, k[13] = s1, k[14] = s2, k[15] = s3;
kono
parents:
diff changeset
47 s0 ^= k[8], s1 ^= k[9], s2 ^= k[10], s3 ^= k[11];
kono
parents:
diff changeset
48 do {
kono
parents:
diff changeset
49 register u32 _t0, _t1, _t2, _t3;
kono
parents:
diff changeset
50 _t0 = s2 ^ ((SIGMA + 10))[0];
kono
parents:
diff changeset
51 _t3 ^= Camellia_SBOX[3][(_t0 >> 8) & 0xff];
kono
parents:
diff changeset
52 s1 ^= _t3;
kono
parents:
diff changeset
53 }
kono
parents:
diff changeset
54 while (0);
kono
parents:
diff changeset
55 do {
kono
parents:
diff changeset
56 u32 _t0 = s0 >> (32 - 30);
kono
parents:
diff changeset
57 s2 = (s2 << 30) | (s3 >> (32 - 30));
kono
parents:
diff changeset
58 s3 = (s3 << 30) | _t0;
kono
parents:
diff changeset
59 }
kono
parents:
diff changeset
60 while (0);
kono
parents:
diff changeset
61 k[40] = s0, k[41] = s1, k[42] = s2, k[43] = s3;
kono
parents:
diff changeset
62 k[64] = s1, k[65] = s2, k[66] = s3, k[67] = s0;
kono
parents:
diff changeset
63 s0 = k[8], s1 = k[9], s2 = k[10], s3 = k[11];
kono
parents:
diff changeset
64 k[36] = s0, k[37] = s1, k[38] = s2, k[39] = s3;
kono
parents:
diff changeset
65 s0 = k[12], s1 = k[13], s2 = k[14], s3 = k[15];
kono
parents:
diff changeset
66 do {
kono
parents:
diff changeset
67 s1 = (s1 << 15) | (s2 >> (32 - 15));
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69 while (0);
kono
parents:
diff changeset
70 k[12] = s0, k[13] = s1, k[14] = s2, k[15] = s3;
kono
parents:
diff changeset
71 k[44] = s1, k[45] = s2, k[46] = s3, k[47] = s0;
kono
parents:
diff changeset
72 }
kono
parents:
diff changeset
73 }