OSDN Git Service

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