blob: 8b958040e3cc7ea6b1ec79cc71df440895338d59 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/* { dg-do assemble } */
/* { dg-xfail-if "The array is too big" { "m6811-*-* m6812-*-*" } { "*" } { "" } } */
/* { dg-skip-if "The array is too big" { "avr-*-*" "pdp11-*-*" } { "*" } { "" } } */
/* { dg-xfail-if "The array too big" { "h8300-*-*" } { "-mno-h" "-mn" } { "" } } */
/* { dg-skip-if "" { m32c-*-* } { } { } } */
/* PR c/6957
This testcase ICEd at -O2 on IA-32, because
(insn 141 139 142 (set (subreg:SF (reg:QI 72) 0)
(plus:SF (reg:SF 73)
(reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil))
(expr_list:REG_DEAD (reg:SF 73) (nil)))
couldn't be reloaded. */
void
foo (unsigned int n, int x, int y, unsigned char *z)
{
int a, b;
float c[2048][4];
switch (x)
{
case 0x1906:
a = b = -1;
break;
case 0x190A:
a = b = -1;
break;
case 0x8049:
a = b = -1;
break;
case 0x1907:
a = 1;
b = 2;
break;
default:
return;
}
if (a >= 0)
{
unsigned char *d = z;
unsigned int i;
for (i = 0; i < n; i++)
{
do
{
union
{
float r;
unsigned int i;
}
e;
e.r = c[i][1];
d[a] =
((e.i >= 0x3f7f0000) ? ((int) e.i <
0) ? (unsigned char) 0
: (unsigned char) 255 : (e.r =
e.r * (255.0F / 256.0F) +
32768.0F, (unsigned char) e.i));
}
while (0);
d += y;
}
}
if (b >= 0)
{
unsigned char *d = z;
unsigned int i;
for (i = 0; i < n; i++)
{
do
{
union
{
float r;
unsigned int i;
}
e;
e.r = c[i][2];
d[b] =
((e.i >= 0x3f7f0000) ? ((int) e.i <
0) ? (unsigned char) 0
: (unsigned char) 255 : (e.r =
e.r * (255.0F / 256.0F) +
32768.0F, (unsigned char) e.i));
}
while (0);
d += y;
}
}
}
|