2 This testcase segfaulted on PPC because PIC_OFFSET_TABLE_REGNUM was no
4 Distilled from the xvid sources by Guillaume Morin <guillaume@morinfr.org>
5 and Benjamin Herrenschmidt <benh@kernel.crashing.org>. */
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 } */
11 extern void exit (int);
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) */
22 static short iclip
[1024]; /* clipping table */
26 idct_int32(short *const block
)
30 static long X0
, X1
, X2
, X3
, X4
, X5
, X6
, X7
, X8
;
32 for (i
= 0; i
< 8; i
++) /* idct columns */
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])))
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];
46 X0
= (blk
[8 * 0] << 8) + 8192;
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;
59 X1
= W6
* (X3
+ X2
) + 4;
60 X2
= (X1
- (W2
+ W6
) * X2
) >> 3;
61 X3
= (X1
+ (W2
- W6
) * X3
) >> 3;
72 X2
= (181 * (X4
+ X5
) + 128) >> 8;
73 X4
= (181 * (X4
- X5
) + 128) >> 8;
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];
85 } /* end function idct_int32(block) */
90 unsigned short tab
[64];
92 for (i
= 0 ; i
< 64 ; ++i
)
94 tab
[i
] = (1+(int) (65535)*8000/(2147483647+1.0));
98 for (i
= -512; i
< 512; i
++)
99 iclp
[i
] = (i
< -256) ? -256 : ((i
> 255) ? 255 : i
);
101 idct_int32((short *) tab
);