1
2 #include <stdio.h>
3 #include <signal.h>
4 #include <setjmp.h>
5 #include <string.h>
6 #include <assert.h>
7
8 static jmp_buf env_sigtrap;
handler_sigtrap(int x)9 static void handler_sigtrap ( int x ) { longjmp(env_sigtrap,1); }
10
try(char * who,void (* maybe_traps)(long),long arg)11 void try ( char* who, void(*maybe_traps)(long), long arg )
12 {
13 struct sigaction tmp_act;
14 int r, trapped = 0;
15 memset(&tmp_act, 0, sizeof(tmp_act));
16 tmp_act.sa_handler = handler_sigtrap;
17 sigemptyset(&tmp_act.sa_mask);
18 tmp_act.sa_flags = SA_NODEFER;
19 r = sigaction(SIGTRAP, &tmp_act, NULL);
20 assert(r == 0);
21 if (setjmp(env_sigtrap)) {
22 trapped = 1;
23 } else {
24 maybe_traps(arg);
25 }
26 signal(SIGTRAP, SIG_DFL);
27
28 printf("%s(%4lld) -> %s\n", who, (long long int)arg,
29 trapped ? "TRAP" : "no trap" );
30 }
31
twi_0_neg100(long n)32 static void twi_0_neg100 ( long n ) {
33 __asm__ __volatile__("twi 0, %0,-100"
34 : /*out*/ : /*in*/ "r" (n) );
35 }
twi_1_neg100(long n)36 static void twi_1_neg100 ( long n ) {
37 __asm__ __volatile__("twi 1, %0,-100"
38 : /*out*/ : /*in*/ "r" (n) );
39 }
twi_2_neg100(long n)40 static void twi_2_neg100 ( long n ) {
41 __asm__ __volatile__("twi 2, %0,-100"
42 : /*out*/ : /*in*/ "r" (n) );
43 }
twi_3_neg100(long n)44 static void twi_3_neg100 ( long n ) {
45 __asm__ __volatile__("twi 3, %0,-100"
46 : /*out*/ : /*in*/ "r" (n) );
47 }
twi_4_neg100(long n)48 static void twi_4_neg100 ( long n ) {
49 __asm__ __volatile__("twi 4, %0,-100"
50 : /*out*/ : /*in*/ "r" (n) );
51 }
twi_5_neg100(long n)52 static void twi_5_neg100 ( long n ) {
53 __asm__ __volatile__("twi 5, %0,-100"
54 : /*out*/ : /*in*/ "r" (n) );
55 }
twi_6_neg100(long n)56 static void twi_6_neg100 ( long n ) {
57 __asm__ __volatile__("twi 6, %0,-100"
58 : /*out*/ : /*in*/ "r" (n) );
59 }
twi_7_neg100(long n)60 static void twi_7_neg100 ( long n ) {
61 __asm__ __volatile__("twi 7, %0,-100"
62 : /*out*/ : /*in*/ "r" (n) );
63 }
twi_8_neg100(long n)64 static void twi_8_neg100 ( long n ) {
65 __asm__ __volatile__("twi 8, %0,-100"
66 : /*out*/ : /*in*/ "r" (n) );
67 }
twi_9_neg100(long n)68 static void twi_9_neg100 ( long n ) {
69 __asm__ __volatile__("twi 9, %0,-100"
70 : /*out*/ : /*in*/ "r" (n) );
71 }
twi_10_neg100(long n)72 static void twi_10_neg100 ( long n ) {
73 __asm__ __volatile__("twi 10, %0,-100"
74 : /*out*/ : /*in*/ "r" (n) );
75 }
twi_11_neg100(long n)76 static void twi_11_neg100 ( long n ) {
77 __asm__ __volatile__("twi 11, %0,-100"
78 : /*out*/ : /*in*/ "r" (n) );
79 }
twi_12_neg100(long n)80 static void twi_12_neg100 ( long n ) {
81 __asm__ __volatile__("twi 12, %0,-100"
82 : /*out*/ : /*in*/ "r" (n) );
83 }
twi_13_neg100(long n)84 static void twi_13_neg100 ( long n ) {
85 __asm__ __volatile__("twi 13, %0,-100"
86 : /*out*/ : /*in*/ "r" (n) );
87 }
twi_14_neg100(long n)88 static void twi_14_neg100 ( long n ) {
89 __asm__ __volatile__("twi 14, %0,-100"
90 : /*out*/ : /*in*/ "r" (n) );
91 }
twi_15_neg100(long n)92 static void twi_15_neg100 ( long n ) {
93 __asm__ __volatile__("twi 15, %0,-100"
94 : /*out*/ : /*in*/ "r" (n) );
95 }
twi_16_neg100(long n)96 static void twi_16_neg100 ( long n ) {
97 __asm__ __volatile__("twi 16, %0,-100"
98 : /*out*/ : /*in*/ "r" (n) );
99 }
twi_17_neg100(long n)100 static void twi_17_neg100 ( long n ) {
101 __asm__ __volatile__("twi 17, %0,-100"
102 : /*out*/ : /*in*/ "r" (n) );
103 }
twi_18_neg100(long n)104 static void twi_18_neg100 ( long n ) {
105 __asm__ __volatile__("twi 18, %0,-100"
106 : /*out*/ : /*in*/ "r" (n) );
107 }
twi_19_neg100(long n)108 static void twi_19_neg100 ( long n ) {
109 __asm__ __volatile__("twi 19, %0,-100"
110 : /*out*/ : /*in*/ "r" (n) );
111 }
twi_20_neg100(long n)112 static void twi_20_neg100 ( long n ) {
113 __asm__ __volatile__("twi 20, %0,-100"
114 : /*out*/ : /*in*/ "r" (n) );
115 }
twi_21_neg100(long n)116 static void twi_21_neg100 ( long n ) {
117 __asm__ __volatile__("twi 21, %0,-100"
118 : /*out*/ : /*in*/ "r" (n) );
119 }
twi_22_neg100(long n)120 static void twi_22_neg100 ( long n ) {
121 __asm__ __volatile__("twi 22, %0,-100"
122 : /*out*/ : /*in*/ "r" (n) );
123 }
twi_23_neg100(long n)124 static void twi_23_neg100 ( long n ) {
125 __asm__ __volatile__("twi 23, %0,-100"
126 : /*out*/ : /*in*/ "r" (n) );
127 }
twi_24_neg100(long n)128 static void twi_24_neg100 ( long n ) {
129 __asm__ __volatile__("twi 24, %0,-100"
130 : /*out*/ : /*in*/ "r" (n) );
131 }
twi_25_neg100(long n)132 static void twi_25_neg100 ( long n ) {
133 __asm__ __volatile__("twi 25, %0,-100"
134 : /*out*/ : /*in*/ "r" (n) );
135 }
twi_26_neg100(long n)136 static void twi_26_neg100 ( long n ) {
137 __asm__ __volatile__("twi 26, %0,-100"
138 : /*out*/ : /*in*/ "r" (n) );
139 }
twi_27_neg100(long n)140 static void twi_27_neg100 ( long n ) {
141 __asm__ __volatile__("twi 27, %0,-100"
142 : /*out*/ : /*in*/ "r" (n) );
143 }
twi_28_neg100(long n)144 static void twi_28_neg100 ( long n ) {
145 __asm__ __volatile__("twi 28, %0,-100"
146 : /*out*/ : /*in*/ "r" (n) );
147 }
twi_29_neg100(long n)148 static void twi_29_neg100 ( long n ) {
149 __asm__ __volatile__("twi 29, %0,-100"
150 : /*out*/ : /*in*/ "r" (n) );
151 }
twi_30_neg100(long n)152 static void twi_30_neg100 ( long n ) {
153 __asm__ __volatile__("twi 30, %0,-100"
154 : /*out*/ : /*in*/ "r" (n) );
155 }
twi_31_neg100(long n)156 static void twi_31_neg100 ( long n ) {
157 __asm__ __volatile__("twi 31, %0,-100"
158 : /*out*/ : /*in*/ "r" (n) );
159 }
160
161 #if defined(__powerpc64__)
162
tdi_0_neg100(long n)163 static void tdi_0_neg100 ( long n ) {
164 __asm__ __volatile__("tdi 0, %0,-100"
165 : /*out*/ : /*in*/ "r" (n) );
166 }
tdi_1_neg100(long n)167 static void tdi_1_neg100 ( long n ) {
168 __asm__ __volatile__("tdi 1, %0,-100"
169 : /*out*/ : /*in*/ "r" (n) );
170 }
tdi_2_neg100(long n)171 static void tdi_2_neg100 ( long n ) {
172 __asm__ __volatile__("tdi 2, %0,-100"
173 : /*out*/ : /*in*/ "r" (n) );
174 }
tdi_3_neg100(long n)175 static void tdi_3_neg100 ( long n ) {
176 __asm__ __volatile__("tdi 3, %0,-100"
177 : /*out*/ : /*in*/ "r" (n) );
178 }
tdi_4_neg100(long n)179 static void tdi_4_neg100 ( long n ) {
180 __asm__ __volatile__("tdi 4, %0,-100"
181 : /*out*/ : /*in*/ "r" (n) );
182 }
tdi_5_neg100(long n)183 static void tdi_5_neg100 ( long n ) {
184 __asm__ __volatile__("tdi 5, %0,-100"
185 : /*out*/ : /*in*/ "r" (n) );
186 }
tdi_6_neg100(long n)187 static void tdi_6_neg100 ( long n ) {
188 __asm__ __volatile__("tdi 6, %0,-100"
189 : /*out*/ : /*in*/ "r" (n) );
190 }
tdi_7_neg100(long n)191 static void tdi_7_neg100 ( long n ) {
192 __asm__ __volatile__("tdi 7, %0,-100"
193 : /*out*/ : /*in*/ "r" (n) );
194 }
tdi_8_neg100(long n)195 static void tdi_8_neg100 ( long n ) {
196 __asm__ __volatile__("tdi 8, %0,-100"
197 : /*out*/ : /*in*/ "r" (n) );
198 }
tdi_9_neg100(long n)199 static void tdi_9_neg100 ( long n ) {
200 __asm__ __volatile__("tdi 9, %0,-100"
201 : /*out*/ : /*in*/ "r" (n) );
202 }
tdi_10_neg100(long n)203 static void tdi_10_neg100 ( long n ) {
204 __asm__ __volatile__("tdi 10, %0,-100"
205 : /*out*/ : /*in*/ "r" (n) );
206 }
tdi_11_neg100(long n)207 static void tdi_11_neg100 ( long n ) {
208 __asm__ __volatile__("tdi 11, %0,-100"
209 : /*out*/ : /*in*/ "r" (n) );
210 }
tdi_12_neg100(long n)211 static void tdi_12_neg100 ( long n ) {
212 __asm__ __volatile__("tdi 12, %0,-100"
213 : /*out*/ : /*in*/ "r" (n) );
214 }
tdi_13_neg100(long n)215 static void tdi_13_neg100 ( long n ) {
216 __asm__ __volatile__("tdi 13, %0,-100"
217 : /*out*/ : /*in*/ "r" (n) );
218 }
tdi_14_neg100(long n)219 static void tdi_14_neg100 ( long n ) {
220 __asm__ __volatile__("tdi 14, %0,-100"
221 : /*out*/ : /*in*/ "r" (n) );
222 }
tdi_15_neg100(long n)223 static void tdi_15_neg100 ( long n ) {
224 __asm__ __volatile__("tdi 15, %0,-100"
225 : /*out*/ : /*in*/ "r" (n) );
226 }
tdi_16_neg100(long n)227 static void tdi_16_neg100 ( long n ) {
228 __asm__ __volatile__("tdi 16, %0,-100"
229 : /*out*/ : /*in*/ "r" (n) );
230 }
tdi_17_neg100(long n)231 static void tdi_17_neg100 ( long n ) {
232 __asm__ __volatile__("tdi 17, %0,-100"
233 : /*out*/ : /*in*/ "r" (n) );
234 }
tdi_18_neg100(long n)235 static void tdi_18_neg100 ( long n ) {
236 __asm__ __volatile__("tdi 18, %0,-100"
237 : /*out*/ : /*in*/ "r" (n) );
238 }
tdi_19_neg100(long n)239 static void tdi_19_neg100 ( long n ) {
240 __asm__ __volatile__("tdi 19, %0,-100"
241 : /*out*/ : /*in*/ "r" (n) );
242 }
tdi_20_neg100(long n)243 static void tdi_20_neg100 ( long n ) {
244 __asm__ __volatile__("tdi 20, %0,-100"
245 : /*out*/ : /*in*/ "r" (n) );
246 }
tdi_21_neg100(long n)247 static void tdi_21_neg100 ( long n ) {
248 __asm__ __volatile__("tdi 21, %0,-100"
249 : /*out*/ : /*in*/ "r" (n) );
250 }
tdi_22_neg100(long n)251 static void tdi_22_neg100 ( long n ) {
252 __asm__ __volatile__("tdi 22, %0,-100"
253 : /*out*/ : /*in*/ "r" (n) );
254 }
tdi_23_neg100(long n)255 static void tdi_23_neg100 ( long n ) {
256 __asm__ __volatile__("tdi 23, %0,-100"
257 : /*out*/ : /*in*/ "r" (n) );
258 }
tdi_24_neg100(long n)259 static void tdi_24_neg100 ( long n ) {
260 __asm__ __volatile__("tdi 24, %0,-100"
261 : /*out*/ : /*in*/ "r" (n) );
262 }
tdi_25_neg100(long n)263 static void tdi_25_neg100 ( long n ) {
264 __asm__ __volatile__("tdi 25, %0,-100"
265 : /*out*/ : /*in*/ "r" (n) );
266 }
tdi_26_neg100(long n)267 static void tdi_26_neg100 ( long n ) {
268 __asm__ __volatile__("tdi 26, %0,-100"
269 : /*out*/ : /*in*/ "r" (n) );
270 }
tdi_27_neg100(long n)271 static void tdi_27_neg100 ( long n ) {
272 __asm__ __volatile__("tdi 27, %0,-100"
273 : /*out*/ : /*in*/ "r" (n) );
274 }
tdi_28_neg100(long n)275 static void tdi_28_neg100 ( long n ) {
276 __asm__ __volatile__("tdi 28, %0,-100"
277 : /*out*/ : /*in*/ "r" (n) );
278 }
tdi_29_neg100(long n)279 static void tdi_29_neg100 ( long n ) {
280 __asm__ __volatile__("tdi 29, %0,-100"
281 : /*out*/ : /*in*/ "r" (n) );
282 }
tdi_30_neg100(long n)283 static void tdi_30_neg100 ( long n ) {
284 __asm__ __volatile__("tdi 30, %0,-100"
285 : /*out*/ : /*in*/ "r" (n) );
286 }
tdi_31_neg100(long n)287 static void tdi_31_neg100 ( long n ) {
288 __asm__ __volatile__("tdi 31, %0,-100"
289 : /*out*/ : /*in*/ "r" (n) );
290 }
291
292 #endif
293
294
main(void)295 int main ( void )
296 {
297 #define TWI_GROUP(cmp) \
298 try("twi_" #cmp "_neg100", twi_##cmp##_neg100, -150); \
299 try("twi_" #cmp "_neg100", twi_##cmp##_neg100, -100); \
300 try("twi_" #cmp "_neg100", twi_##cmp##_neg100, -50);
301
302 TWI_GROUP(0);
303 TWI_GROUP(1);
304 TWI_GROUP(2);
305 TWI_GROUP(3);
306 TWI_GROUP(4);
307 TWI_GROUP(5);
308 TWI_GROUP(6);
309 TWI_GROUP(7);
310 TWI_GROUP(8);
311 TWI_GROUP(9);
312 TWI_GROUP(10);
313 TWI_GROUP(11);
314 TWI_GROUP(12);
315 TWI_GROUP(13);
316 TWI_GROUP(14);
317 TWI_GROUP(15);
318 TWI_GROUP(16);
319 TWI_GROUP(17);
320 TWI_GROUP(18);
321 TWI_GROUP(19);
322 TWI_GROUP(20);
323 TWI_GROUP(21);
324 TWI_GROUP(22);
325 TWI_GROUP(23);
326 TWI_GROUP(24);
327 TWI_GROUP(25);
328 TWI_GROUP(26);
329 TWI_GROUP(27);
330 TWI_GROUP(28);
331 TWI_GROUP(29);
332 TWI_GROUP(30);
333 TWI_GROUP(31);
334 #if defined(__powerpc64__)
335 #define TDI_GROUP(cmp) \
336 try("tdi_" #cmp "_neg100", tdi_##cmp##_neg100, -150); \
337 try("tdi_" #cmp "_neg100", tdi_##cmp##_neg100, -100); \
338 try("tdi_" #cmp "_neg100", tdi_##cmp##_neg100, -50);
339
340 TDI_GROUP(0);
341 TDI_GROUP(1);
342 TDI_GROUP(2);
343 TDI_GROUP(3);
344 TDI_GROUP(4);
345 TDI_GROUP(5);
346 TDI_GROUP(6);
347 TDI_GROUP(7);
348 TDI_GROUP(8);
349 TDI_GROUP(9);
350 TDI_GROUP(10);
351 TDI_GROUP(11);
352 TDI_GROUP(12);
353 TDI_GROUP(13);
354 TDI_GROUP(14);
355 TDI_GROUP(15);
356 TDI_GROUP(16);
357 TDI_GROUP(17);
358 TDI_GROUP(18);
359 TDI_GROUP(19);
360 TDI_GROUP(20);
361 TDI_GROUP(21);
362 TDI_GROUP(22);
363 TDI_GROUP(23);
364 TDI_GROUP(24);
365 TDI_GROUP(25);
366 TDI_GROUP(26);
367 TDI_GROUP(27);
368 TDI_GROUP(28);
369 TDI_GROUP(29);
370 TDI_GROUP(30);
371 TDI_GROUP(31);
372 #endif
373 return 0;
374 }
375