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