annotate gcc/testsuite/gcc.dg/20030225-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 target/9732
kono
parents:
diff changeset
2 This testcase segfaulted on PPC because PIC_OFFSET_TABLE_REGNUM was no
kono
parents:
diff changeset
3 fixed register.
kono
parents:
diff changeset
4 Distilled from the xvid sources by Guillaume Morin <guillaume@morinfr.org>
kono
parents:
diff changeset
5 and Benjamin Herrenschmidt <benh@kernel.crashing.org>. */
kono
parents:
diff changeset
6 /* { dg-do run { target fpic } } */
kono
parents:
diff changeset
7 /* { dg-options "-O2 -fPIC" } */
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 extern void exit (int);
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 #define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */
kono
parents:
diff changeset
12 #define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */
kono
parents:
diff changeset
13 #define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */
kono
parents:
diff changeset
14 #define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */
kono
parents:
diff changeset
15 #define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */
kono
parents:
diff changeset
16 #define W7 565 /* 2048*sqrt(2)*cos(7*pi/16) */
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 /* private data */
kono
parents:
diff changeset
20 static short iclip[1024]; /* clipping table */
kono
parents:
diff changeset
21 static short *iclp;
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 void
kono
parents:
diff changeset
24 idct_int32(short *const block)
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26 static short *blk;
kono
parents:
diff changeset
27 static long i;
kono
parents:
diff changeset
28 static long X0, X1, X2, X3, X4, X5, X6, X7, X8;
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 for (i = 0; i < 8; i++) /* idct columns */
kono
parents:
diff changeset
31 {
kono
parents:
diff changeset
32 blk = block + i;
kono
parents:
diff changeset
33 /* shortcut */
kono
parents:
diff changeset
34 if (! ((X1 = (blk[8 * 4] << 8)) | (X2 = blk[8 * 6])
kono
parents:
diff changeset
35 | (X3 = blk[8 * 2]) | (X4 = blk[8 * 1]) | (X5 = blk[8 * 7])
kono
parents:
diff changeset
36 | (X6 = blk[8 * 5]) | (X7 = blk[8 * 3])))
kono
parents:
diff changeset
37 {
kono
parents:
diff changeset
38 blk[8 * 0] = blk[8 * 1] = blk[8 * 2] =
kono
parents:
diff changeset
39 blk[8 * 3] = blk[8 * 4] =
kono
parents:
diff changeset
40 blk[8 * 5] = blk[8 * 6] = blk[8 * 7] =
kono
parents:
diff changeset
41 iclp[(blk[8 * 0] + 32) >> 6];
kono
parents:
diff changeset
42 continue;
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44 X0 = (blk[8 * 0] << 8) + 8192;
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 /* first stage */
kono
parents:
diff changeset
47 X8 = W7 * (X4 + X5) + 4;
kono
parents:
diff changeset
48 X4 = (X8 + (W1 - W7) * X4) >> 3;
kono
parents:
diff changeset
49 X5 = (X8 - (W1 + W7) * X5) >> 3;
kono
parents:
diff changeset
50 X8 = W3 * (X6 + X7) + 4;
kono
parents:
diff changeset
51 X6 = (X8 - (W3 - W5) * X6) >> 3;
kono
parents:
diff changeset
52 X7 = (X8 - (W3 + W5) * X7) >> 3;
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 /* second stage */
kono
parents:
diff changeset
55 X8 = X0 + X1;
kono
parents:
diff changeset
56 X0 -= X1;
kono
parents:
diff changeset
57 X1 = W6 * (X3 + X2) + 4;
kono
parents:
diff changeset
58 X2 = (X1 - (W2 + W6) * X2) >> 3;
kono
parents:
diff changeset
59 X3 = (X1 + (W2 - W6) * X3) >> 3;
kono
parents:
diff changeset
60 X1 = X4 + X6;
kono
parents:
diff changeset
61 X4 -= X6;
kono
parents:
diff changeset
62 X6 = X5 + X7;
kono
parents:
diff changeset
63 X5 -= X7;
kono
parents:
diff changeset
64
kono
parents:
diff changeset
65 /* third stage */
kono
parents:
diff changeset
66 X7 = X8 + X3;
kono
parents:
diff changeset
67 X8 -= X3;
kono
parents:
diff changeset
68 X3 = X0 + X2;
kono
parents:
diff changeset
69 X0 -= X2;
kono
parents:
diff changeset
70 X2 = (181 * (X4 + X5) + 128) >> 8;
kono
parents:
diff changeset
71 X4 = (181 * (X4 - X5) + 128) >> 8;
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 /* fourth stage */
kono
parents:
diff changeset
74 blk[8 * 0] = iclp[(X7 + X1) >> 14];
kono
parents:
diff changeset
75 blk[8 * 1] = iclp[(X3 + X2) >> 14];
kono
parents:
diff changeset
76 blk[8 * 2] = iclp[(X0 + X4) >> 14];
kono
parents:
diff changeset
77 blk[8 * 3] = iclp[(X8 + X6) >> 14];
kono
parents:
diff changeset
78 blk[8 * 4] = iclp[(X8 - X6) >> 14];
kono
parents:
diff changeset
79 blk[8 * 5] = iclp[(X0 - X4) >> 14];
kono
parents:
diff changeset
80 blk[8 * 6] = iclp[(X3 - X2) >> 14];
kono
parents:
diff changeset
81 blk[8 * 7] = iclp[(X7 - X1) >> 14];
kono
parents:
diff changeset
82 }
kono
parents:
diff changeset
83 } /* end function idct_int32(block) */
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 int main(void) {
kono
parents:
diff changeset
87 int i;
kono
parents:
diff changeset
88 unsigned short tab[64];
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90 for (i = 0 ; i < 64 ; ++i)
kono
parents:
diff changeset
91 {
kono
parents:
diff changeset
92 tab[i] = (1+(int) (65535)*8000/(2147483647+1.0));
kono
parents:
diff changeset
93 }
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 iclp = iclip + 512;
kono
parents:
diff changeset
96 for (i = -512; i < 512; i++)
kono
parents:
diff changeset
97 iclp[i] = (i < -256) ? -256 : ((i > 255) ? 255 : i);
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 idct_int32((short *) tab);
kono
parents:
diff changeset
100 exit (0);
kono
parents:
diff changeset
101 }