annotate gcc/testsuite/gcc.dg/pr55150-2.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 04ced10e8804
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-require-effective-target fpic } */
kono
parents:
diff changeset
4 /* { dg-options "-Os -g -fPIC" } */
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 typedef unsigned char DES_cblock[8];
kono
parents:
diff changeset
7 typedef struct DES_ks {
kono
parents:
diff changeset
8 }
kono
parents:
diff changeset
9 DES_key_schedule;
kono
parents:
diff changeset
10 void DES_encrypt1 (long *, DES_key_schedule *, int);
kono
parents:
diff changeset
11 void DES_ede3_cbcm_encrypt (const unsigned char *in, unsigned char *out, long length, DES_key_schedule * ks1, DES_key_schedule * ks2, DES_key_schedule * ks3, DES_cblock * ivec1, DES_cblock * ivec2, int enc) {
kono
parents:
diff changeset
12 register unsigned long tout0, tout1, xor0, xor1, m0, m1;
kono
parents:
diff changeset
13 register long l = length;
kono
parents:
diff changeset
14 unsigned long tin[2];
kono
parents:
diff changeset
15 unsigned char *iv1, *iv2;
kono
parents:
diff changeset
16 iv1 = &(*ivec1)[0];
kono
parents:
diff changeset
17 iv2 = &(*ivec2)[0];
kono
parents:
diff changeset
18 if (enc) {
kono
parents:
diff changeset
19 (m0 = ((unsigned long) (*((iv1)++))), m0 |= ((unsigned long) (*((iv1)++))) << 8L, m0 |= ((unsigned long) (*((iv1)++))) << 16L, m0 |= ((unsigned long) (*((iv1)++))) << 24L);
kono
parents:
diff changeset
20 (m1 = ((unsigned long) (*((iv1)++))), m1 |= ((unsigned long) (*((iv1)++))) << 8L, m1 |= ((unsigned long) (*((iv1)++))) << 16L, m1 |= ((unsigned long) (*((iv1)++))) << 24L);
kono
parents:
diff changeset
21 (tout0 = ((unsigned long) (*((iv2)++))), tout0 |= ((unsigned long) (*((iv2)++))) << 8L, tout0 |= ((unsigned long) (*((iv2)++))) << 16L, tout0 |= ((unsigned long) (*((iv2)++))) << 24L);
kono
parents:
diff changeset
22 for (l -= 8;
kono
parents:
diff changeset
23 l >= -7;
kono
parents:
diff changeset
24 l -= 8) {
kono
parents:
diff changeset
25 DES_encrypt1 (tin, ks3, 1);
kono
parents:
diff changeset
26 DES_encrypt1 (tin, ks1, 1);
kono
parents:
diff changeset
27 }
kono
parents:
diff changeset
28 (*((iv1)++) = (unsigned char) (((m0)) & 0xff), *((iv1)++) = (unsigned char) (((m0) >> 8L) & 0xff), *((iv1)++) = (unsigned char) (((m0) >> 16L) & 0xff), *((iv1)++) = (unsigned char) (((m0) >> 24L) & 0xff));
kono
parents:
diff changeset
29 (*((iv1)++) = (unsigned char) (((m1)) & 0xff), *((iv1)++) = (unsigned char) (((m1) >> 8L) & 0xff), *((iv1)++) = (unsigned char) (((m1) >> 16L) & 0xff), *((iv1)++) = (unsigned char) (((m1) >> 24L) & 0xff));
kono
parents:
diff changeset
30 (*((iv2)++) = (unsigned char) (((tout0)) & 0xff), *((iv2)++) = (unsigned char) (((tout0) >> 8L) & 0xff), *((iv2)++) = (unsigned char) (((tout0) >> 16L) & 0xff), *((iv2)++) = (unsigned char) (((tout0) >> 24L) & 0xff));
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32 else {
kono
parents:
diff changeset
33 (m0 = ((unsigned long) (*((iv1)++))), m0 |= ((unsigned long) (*((iv1)++))) << 8L, m0 |= ((unsigned long) (*((iv1)++))) << 16L, m0 |= ((unsigned long) (*((iv1)++))) << 24L);
kono
parents:
diff changeset
34 (xor1 = ((unsigned long) (*((iv2)++))), xor1 |= ((unsigned long) (*((iv2)++))) << 8L, xor1 |= ((unsigned long) (*((iv2)++))) << 16L, xor1 |= ((unsigned long) (*((iv2)++))) << 24L);
kono
parents:
diff changeset
35 for (l -= 8;
kono
parents:
diff changeset
36 l >= -7;
kono
parents:
diff changeset
37 l -= 8) {
kono
parents:
diff changeset
38 DES_encrypt1 (tin, ks3, 1);
kono
parents:
diff changeset
39 if (l < 0) {
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 switch (l + 8) {
kono
parents:
diff changeset
42 case 7: *(--(out)) = (unsigned char) (((tout1) >> 16L) & 0xff);
kono
parents:
diff changeset
43 case 6: *(--(out)) = (unsigned char) (((tout1) >> 8L) & 0xff);
kono
parents:
diff changeset
44 case 5: *(--(out)) = (unsigned char) (((tout1)) & 0xff);
kono
parents:
diff changeset
45 case 4: *(--(out)) = (unsigned char) (((tout0) >> 24L) & 0xff);
kono
parents:
diff changeset
46 case 1: *(--(out)) = (unsigned char) (((tout0)) & 0xff);
kono
parents:
diff changeset
47 }
kono
parents:
diff changeset
48 };
kono
parents:
diff changeset
49 }
kono
parents:
diff changeset
50 }
kono
parents:
diff changeset
51 (*((iv1)++) = (unsigned char) (((m0)) & 0xff), *((iv1)++) = (unsigned char) (((m0) >> 8L) & 0xff), *((iv1)++) = (unsigned char) (((m0) >> 16L) & 0xff), *((iv1)++) = (unsigned char) (((m0) >> 24L) & 0xff));
kono
parents:
diff changeset
52 (*((iv2)++) = (unsigned char) (((xor0)) & 0xff), *((iv2)++) = (unsigned char) (((xor0) >> 8L) & 0xff), *((iv2)++) = (unsigned char) (((xor0) >> 16L) & 0xff), *((iv2)++) = (unsigned char) (((xor0) >> 24L) & 0xff));
kono
parents:
diff changeset
53 (*((iv2)++) = (unsigned char) (((xor1)) & 0xff), *((iv2)++) = (unsigned char) (((xor1) >> 8L) & 0xff), *((iv2)++) = (unsigned char) (((xor1) >> 16L) & 0xff), *((iv2)++) = (unsigned char) (((xor1) >> 24L) & 0xff));
kono
parents:
diff changeset
54 }
kono
parents:
diff changeset
55 }