1*b725ae77Skettenis /* Check that GDB can correctly update a value, living in a register,
2*b725ae77Skettenis in the target. This pretty much relies on the compiler taking heed
3*b725ae77Skettenis of requests for values to be stored in registers. */
4*b725ae77Skettenis
5*b725ae77Skettenis /* NOTE: carlton/2002-12-05: These functions were all static, but for
6*b725ae77Skettenis whatever reason that caused GCC 3.1 to optimize away some of the
7*b725ae77Skettenis function calls within main even when no optimization flags were
8*b725ae77Skettenis passed. */
9*b725ae77Skettenis
10*b725ae77Skettenis typedef signed char charest;
11*b725ae77Skettenis
12*b725ae77Skettenis charest
add_charest(register charest u,register charest v)13*b725ae77Skettenis add_charest (register charest u, register charest v)
14*b725ae77Skettenis {
15*b725ae77Skettenis return u + v;
16*b725ae77Skettenis }
17*b725ae77Skettenis
18*b725ae77Skettenis short
add_short(register short u,register short v)19*b725ae77Skettenis add_short (register short u, register short v)
20*b725ae77Skettenis {
21*b725ae77Skettenis return u + v;
22*b725ae77Skettenis }
23*b725ae77Skettenis
24*b725ae77Skettenis int
add_int(register int u,register int v)25*b725ae77Skettenis add_int (register int u, register int v)
26*b725ae77Skettenis {
27*b725ae77Skettenis return u + v;
28*b725ae77Skettenis }
29*b725ae77Skettenis
30*b725ae77Skettenis long
add_long(register long u,register long v)31*b725ae77Skettenis add_long (register long u, register long v)
32*b725ae77Skettenis {
33*b725ae77Skettenis return u + v;
34*b725ae77Skettenis }
35*b725ae77Skettenis
36*b725ae77Skettenis typedef long long longest;
37*b725ae77Skettenis
38*b725ae77Skettenis longest
add_longest(register longest u,register longest v)39*b725ae77Skettenis add_longest (register longest u, register longest v)
40*b725ae77Skettenis {
41*b725ae77Skettenis return u + v;
42*b725ae77Skettenis }
43*b725ae77Skettenis
44*b725ae77Skettenis float
add_float(register float u,register float v)45*b725ae77Skettenis add_float (register float u, register float v)
46*b725ae77Skettenis {
47*b725ae77Skettenis return u + v;
48*b725ae77Skettenis }
49*b725ae77Skettenis
50*b725ae77Skettenis double
add_double(register double u,register double v)51*b725ae77Skettenis add_double (register double u, register double v)
52*b725ae77Skettenis {
53*b725ae77Skettenis return u + v;
54*b725ae77Skettenis }
55*b725ae77Skettenis
56*b725ae77Skettenis typedef long double doublest;
57*b725ae77Skettenis
58*b725ae77Skettenis doublest
add_doublest(register doublest u,register doublest v)59*b725ae77Skettenis add_doublest (register doublest u, register doublest v)
60*b725ae77Skettenis {
61*b725ae77Skettenis return u + v;
62*b725ae77Skettenis }
63*b725ae77Skettenis
64*b725ae77Skettenis /* */
65*b725ae77Skettenis
66*b725ae77Skettenis charest
wack_charest(register charest u,register charest v)67*b725ae77Skettenis wack_charest (register charest u, register charest v)
68*b725ae77Skettenis {
69*b725ae77Skettenis register charest l = u, r = v;
70*b725ae77Skettenis l = add_charest (l, r);
71*b725ae77Skettenis return l + r;
72*b725ae77Skettenis }
73*b725ae77Skettenis
74*b725ae77Skettenis short
wack_short(register short u,register short v)75*b725ae77Skettenis wack_short (register short u, register short v)
76*b725ae77Skettenis {
77*b725ae77Skettenis register short l = u, r = v;
78*b725ae77Skettenis l = add_short (l, r);
79*b725ae77Skettenis return l + r;
80*b725ae77Skettenis }
81*b725ae77Skettenis
82*b725ae77Skettenis int
wack_int(register int u,register int v)83*b725ae77Skettenis wack_int (register int u, register int v)
84*b725ae77Skettenis {
85*b725ae77Skettenis register int l = u, r = v;
86*b725ae77Skettenis l = add_int (l, r);
87*b725ae77Skettenis return l + r;
88*b725ae77Skettenis }
89*b725ae77Skettenis
90*b725ae77Skettenis long
wack_long(register long u,register long v)91*b725ae77Skettenis wack_long (register long u, register long v)
92*b725ae77Skettenis {
93*b725ae77Skettenis register long l = u, r = v;
94*b725ae77Skettenis l = add_long (l, r);
95*b725ae77Skettenis return l + r;
96*b725ae77Skettenis }
97*b725ae77Skettenis
98*b725ae77Skettenis long
wack_longest(register longest u,register longest v)99*b725ae77Skettenis wack_longest (register longest u, register longest v)
100*b725ae77Skettenis {
101*b725ae77Skettenis register longest l = u, r = v;
102*b725ae77Skettenis l = add_longest (l, r);
103*b725ae77Skettenis return l + r;
104*b725ae77Skettenis }
105*b725ae77Skettenis
106*b725ae77Skettenis float
wack_float(register float u,register float v)107*b725ae77Skettenis wack_float (register float u, register float v)
108*b725ae77Skettenis {
109*b725ae77Skettenis register float l = u, r = v;
110*b725ae77Skettenis l = add_float (l, r);
111*b725ae77Skettenis return l + r;
112*b725ae77Skettenis }
113*b725ae77Skettenis
114*b725ae77Skettenis double
wack_double(register double u,register double v)115*b725ae77Skettenis wack_double (register double u, register double v)
116*b725ae77Skettenis {
117*b725ae77Skettenis register double l = u, r = v;
118*b725ae77Skettenis l = add_double (l, r);
119*b725ae77Skettenis return l + r;
120*b725ae77Skettenis }
121*b725ae77Skettenis
122*b725ae77Skettenis doublest
wack_doublest(register doublest u,register doublest v)123*b725ae77Skettenis wack_doublest (register doublest u, register doublest v)
124*b725ae77Skettenis {
125*b725ae77Skettenis register doublest l = u, r = v;
126*b725ae77Skettenis l = add_doublest (l, r);
127*b725ae77Skettenis return l + r;
128*b725ae77Skettenis }
129*b725ae77Skettenis
130*b725ae77Skettenis /* */
131*b725ae77Skettenis
132*b725ae77Skettenis struct s_1 { short s[1]; } z_1, s_1;
133*b725ae77Skettenis struct s_2 { short s[2]; } z_2, s_2;
134*b725ae77Skettenis struct s_3 { short s[3]; } z_3, s_3;
135*b725ae77Skettenis struct s_4 { short s[4]; } z_4, s_4;
136*b725ae77Skettenis
137*b725ae77Skettenis struct s_1
add_struct_1(struct s_1 s)138*b725ae77Skettenis add_struct_1 (struct s_1 s)
139*b725ae77Skettenis {
140*b725ae77Skettenis int i;
141*b725ae77Skettenis for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
142*b725ae77Skettenis {
143*b725ae77Skettenis s.s[i] = s.s[i] + s.s[i];
144*b725ae77Skettenis }
145*b725ae77Skettenis return s;
146*b725ae77Skettenis }
147*b725ae77Skettenis
148*b725ae77Skettenis struct s_2
add_struct_2(struct s_2 s)149*b725ae77Skettenis add_struct_2 (struct s_2 s)
150*b725ae77Skettenis {
151*b725ae77Skettenis int i;
152*b725ae77Skettenis for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
153*b725ae77Skettenis {
154*b725ae77Skettenis s.s[i] = s.s[i] + s.s[i];
155*b725ae77Skettenis }
156*b725ae77Skettenis return s;
157*b725ae77Skettenis }
158*b725ae77Skettenis
159*b725ae77Skettenis struct s_3
add_struct_3(struct s_3 s)160*b725ae77Skettenis add_struct_3 (struct s_3 s)
161*b725ae77Skettenis {
162*b725ae77Skettenis int i;
163*b725ae77Skettenis for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
164*b725ae77Skettenis {
165*b725ae77Skettenis s.s[i] = s.s[i] + s.s[i];
166*b725ae77Skettenis }
167*b725ae77Skettenis return s;
168*b725ae77Skettenis }
169*b725ae77Skettenis
170*b725ae77Skettenis struct s_4
add_struct_4(struct s_4 s)171*b725ae77Skettenis add_struct_4 (struct s_4 s)
172*b725ae77Skettenis {
173*b725ae77Skettenis int i;
174*b725ae77Skettenis for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
175*b725ae77Skettenis {
176*b725ae77Skettenis s.s[i] = s.s[i] + s.s[i];
177*b725ae77Skettenis }
178*b725ae77Skettenis return s;
179*b725ae77Skettenis }
180*b725ae77Skettenis
181*b725ae77Skettenis struct s_1
wack_struct_1(void)182*b725ae77Skettenis wack_struct_1 (void)
183*b725ae77Skettenis {
184*b725ae77Skettenis int i; register struct s_1 u = z_1;
185*b725ae77Skettenis for (i = 0; i < sizeof (s_1) / sizeof (s_1.s[0]); i++) { s_1.s[i] = i + 1; }
186*b725ae77Skettenis u = add_struct_1 (u);
187*b725ae77Skettenis return u;
188*b725ae77Skettenis }
189*b725ae77Skettenis
190*b725ae77Skettenis struct s_2
wack_struct_2(void)191*b725ae77Skettenis wack_struct_2 (void)
192*b725ae77Skettenis {
193*b725ae77Skettenis int i; register struct s_2 u = z_2;
194*b725ae77Skettenis for (i = 0; i < sizeof (s_2) / sizeof (s_2.s[0]); i++) { s_2.s[i] = i + 1; }
195*b725ae77Skettenis u = add_struct_2 (u);
196*b725ae77Skettenis return u;
197*b725ae77Skettenis }
198*b725ae77Skettenis
199*b725ae77Skettenis struct s_3
wack_struct_3(void)200*b725ae77Skettenis wack_struct_3 (void)
201*b725ae77Skettenis {
202*b725ae77Skettenis int i; register struct s_3 u = z_3;
203*b725ae77Skettenis for (i = 0; i < sizeof (s_3) / sizeof (s_3.s[0]); i++) { s_3.s[i] = i + 1; }
204*b725ae77Skettenis u = add_struct_3 (u);
205*b725ae77Skettenis return u;
206*b725ae77Skettenis }
207*b725ae77Skettenis
208*b725ae77Skettenis struct s_4
wack_struct_4(void)209*b725ae77Skettenis wack_struct_4 (void)
210*b725ae77Skettenis {
211*b725ae77Skettenis int i; register struct s_4 u = z_4;
212*b725ae77Skettenis for (i = 0; i < sizeof (s_4) / sizeof (s_4.s[0]); i++) { s_4.s[i] = i + 1; }
213*b725ae77Skettenis u = add_struct_4 (u);
214*b725ae77Skettenis return u;
215*b725ae77Skettenis }
216*b725ae77Skettenis
217*b725ae77Skettenis /* */
218*b725ae77Skettenis
219*b725ae77Skettenis struct f_1 {unsigned i:1;unsigned j:1;unsigned k:1; } f_1 = {1,1,1}, F_1;
220*b725ae77Skettenis struct f_2 {unsigned i:2;unsigned j:2;unsigned k:2; } f_2 = {1,1,1}, F_2;
221*b725ae77Skettenis struct f_3 {unsigned i:3;unsigned j:3;unsigned k:3; } f_3 = {1,1,1}, F_3;
222*b725ae77Skettenis struct f_4 {unsigned i:4;unsigned j:4;unsigned k:4; } f_4 = {1,1,1}, F_4;
223*b725ae77Skettenis
224*b725ae77Skettenis struct f_1
wack_field_1(void)225*b725ae77Skettenis wack_field_1 (void)
226*b725ae77Skettenis {
227*b725ae77Skettenis register struct f_1 u = f_1;
228*b725ae77Skettenis return u;
229*b725ae77Skettenis }
230*b725ae77Skettenis
231*b725ae77Skettenis struct f_2
wack_field_2(void)232*b725ae77Skettenis wack_field_2 (void)
233*b725ae77Skettenis {
234*b725ae77Skettenis register struct f_2 u = f_2;
235*b725ae77Skettenis return u;
236*b725ae77Skettenis }
237*b725ae77Skettenis
238*b725ae77Skettenis struct f_3
wack_field_3(void)239*b725ae77Skettenis wack_field_3 (void)
240*b725ae77Skettenis {
241*b725ae77Skettenis register struct f_3 u = f_3;
242*b725ae77Skettenis return u;
243*b725ae77Skettenis }
244*b725ae77Skettenis
245*b725ae77Skettenis struct f_4
wack_field_4(void)246*b725ae77Skettenis wack_field_4 (void)
247*b725ae77Skettenis {
248*b725ae77Skettenis register struct f_4 u = f_4;
249*b725ae77Skettenis return u;
250*b725ae77Skettenis }
251*b725ae77Skettenis
252*b725ae77Skettenis /* */
253*b725ae77Skettenis
254*b725ae77Skettenis int
main()255*b725ae77Skettenis main ()
256*b725ae77Skettenis {
257*b725ae77Skettenis /* These calls are for current frame test. */
258*b725ae77Skettenis wack_charest (-1, -2);
259*b725ae77Skettenis wack_short (-1, -2);
260*b725ae77Skettenis wack_int (-1, -2);
261*b725ae77Skettenis wack_long (-1, -2);
262*b725ae77Skettenis wack_longest (-1, -2);
263*b725ae77Skettenis wack_float (-1, -2);
264*b725ae77Skettenis wack_double (-1, -2);
265*b725ae77Skettenis wack_doublest (-1, -2);
266*b725ae77Skettenis
267*b725ae77Skettenis /* These calls are for up frame. */
268*b725ae77Skettenis wack_charest (-1, -2);
269*b725ae77Skettenis wack_short (-1, -2);
270*b725ae77Skettenis wack_int (-1, -2);
271*b725ae77Skettenis wack_long (-1, -2);
272*b725ae77Skettenis wack_longest (-1, -2);
273*b725ae77Skettenis wack_float (-1, -2);
274*b725ae77Skettenis wack_double (-1, -2);
275*b725ae77Skettenis wack_doublest (-1, -2);
276*b725ae77Skettenis
277*b725ae77Skettenis /* These calls are for current frame test. */
278*b725ae77Skettenis wack_struct_1 ();
279*b725ae77Skettenis wack_struct_2 ();
280*b725ae77Skettenis wack_struct_3 ();
281*b725ae77Skettenis wack_struct_4 ();
282*b725ae77Skettenis
283*b725ae77Skettenis /* These calls are for up frame. */
284*b725ae77Skettenis wack_struct_1 ();
285*b725ae77Skettenis wack_struct_2 ();
286*b725ae77Skettenis wack_struct_3 ();
287*b725ae77Skettenis wack_struct_4 ();
288*b725ae77Skettenis
289*b725ae77Skettenis wack_field_1 ();
290*b725ae77Skettenis wack_field_2 ();
291*b725ae77Skettenis wack_field_3 ();
292*b725ae77Skettenis wack_field_4 ();
293*b725ae77Skettenis
294*b725ae77Skettenis return 0;
295*b725ae77Skettenis }
296