annotate gcc/testsuite/g++.dg/opt/longbranch2.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR target/11689
kono
parents:
diff changeset
2 // Originator: thor@math.tu-berlin.de
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 // { dg-do compile }
kono
parents:
diff changeset
5 // { dg-options "-O3 -funroll-loops -mtune=k6 -fomit-frame-pointer" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 // This used to fail to assemble because of an out-of-range 'loop' instructions.
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 class JKeeper {
kono
parents:
diff changeset
12 public:
kono
parents:
diff changeset
13 unsigned long a0;
kono
parents:
diff changeset
14 };
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 class EBCOTLut : public JKeeper {
kono
parents:
diff changeset
17 unsigned char a1[1<<8];
kono
parents:
diff changeset
18 unsigned char a2[1<<9];
kono
parents:
diff changeset
19 unsigned char a3[1<<9];
kono
parents:
diff changeset
20 long a4[1<<9];
kono
parents:
diff changeset
21 public:
kono
parents:
diff changeset
22 EBCOTLut(void);
kono
parents:
diff changeset
23 };
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 EBCOTLut::EBCOTLut(void)
kono
parents:
diff changeset
26 {
kono
parents:
diff changeset
27 unsigned char inter[36]; // intermediate lookup table;
kono
parents:
diff changeset
28 unsigned long i;
kono
parents:
diff changeset
29 for(i=0;i<36;i++) {
kono
parents:
diff changeset
30 inter[i] = 0;
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32 for(i=1;i<16;i++) {
kono
parents:
diff changeset
33 a1[i | (1<<7)] = 8<<1;
kono
parents:
diff changeset
34 a1[i | (1<<6)] = 8<<1;
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36 for(i=0;i < ((1<<9)-1);i++) {
kono
parents:
diff changeset
37 int ds = (i>>0) & 0x01; // significance of DOWN
kono
parents:
diff changeset
38 int us = (i>>1) & 0x01; // significance of UP
kono
parents:
diff changeset
39 int rs = (i>>2) & 0x01; // significance of RIGHT
kono
parents:
diff changeset
40 int ls = (i>>3) & 0x01; // significance of LEFT
kono
parents:
diff changeset
41 int dn = (i>>5) & 0x01; // sign of DOWN
kono
parents:
diff changeset
42 int un = (i>>6) & 0x01; // sign of UP
kono
parents:
diff changeset
43 int rn = (i>>7) & 0x01; // sign of RIGHT
kono
parents:
diff changeset
44 int ln = (i>>8) & 0x01; // sign of LEFT
kono
parents:
diff changeset
45 int h,v; // h and v as in the VM description
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 h = ls*(1-ln*2) + rs*(1-2*rn);
kono
parents:
diff changeset
48 v = us*(1-un*2) + ds*(1-2*dn);
kono
parents:
diff changeset
49 h = (h >= -1)?(h):(-1);
kono
parents:
diff changeset
50 v = (v >= -1)?(v):(-1);
kono
parents:
diff changeset
51 h = (h <= 1)?(h):(1);
kono
parents:
diff changeset
52 v = (v <= 1)?(v):(1);
kono
parents:
diff changeset
53 a2[i] = inter[((h+1)<<3) | (v+1)];
kono
parents:
diff changeset
54 a3[i] = inter[((h+1)<<3) | (v+1)] & (unsigned char)(~1);
kono
parents:
diff changeset
55 }
kono
parents:
diff changeset
56 for(i=0;i< 1<<9; i++) {
kono
parents:
diff changeset
57 a4[i] = 2*(i-(1<<(9-1)))*(i-(1<<(9-1))) -
kono
parents:
diff changeset
58 ((i< (1<<(9-1)))?
kono
parents:
diff changeset
59 (2*(i-(1<<(9-2)))*(i-(1<<(9-2)))):
kono
parents:
diff changeset
60 (2*(i-(3<<(9-2)))*(i-(3<<(9-2)))));
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 }
kono
parents:
diff changeset
63 }