8 static jmp_buf env_sigtrap
;
9 static void handler_sigtrap ( int x
) { longjmp(env_sigtrap
,1); }
11 void try ( char* who
, void(*maybe_traps
)(long,long), long arg1
, long arg2
)
13 struct sigaction tmp_act
;
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
);
21 if (setjmp(env_sigtrap
)) {
24 maybe_traps(arg1
, arg2
);
26 signal(SIGTRAP
, SIG_DFL
);
28 printf("%s(%4lld,%4lld) -> %s\n", who
, (long long int)arg1
,
30 trapped
? "TRAP" : "no trap" );
33 static void tw_0 ( long n
, long m
) {
34 __asm__
__volatile__("tw 0, %0,%1"
35 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
37 static void tw_1 ( long n
, long m
) {
38 __asm__
__volatile__("tw 1, %0,%1"
39 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
41 static void tw_2 ( long n
, long m
) {
42 __asm__
__volatile__("tw 2, %0,%1"
43 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
45 static void tw_3 ( long n
, long m
) {
46 __asm__
__volatile__("tw 3, %0,%1"
47 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
49 static void tw_4 ( long n
, long m
) {
50 __asm__
__volatile__("tw 4, %0,%1"
51 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
53 static void tw_5 ( long n
, long m
) {
54 __asm__
__volatile__("tw 5, %0,%1"
55 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
57 static void tw_6 ( long n
, long m
) {
58 __asm__
__volatile__("tw 6, %0,%1"
59 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
61 static void tw_7 ( long n
, long m
) {
62 __asm__
__volatile__("tw 7, %0,%1"
63 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
65 static void tw_8 ( long n
, long m
) {
66 __asm__
__volatile__("tw 8, %0,%1"
67 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
69 static void tw_9 ( long n
, long m
) {
70 __asm__
__volatile__("tw 9, %0,%1"
71 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
73 static void tw_10 ( long n
, long m
) {
74 __asm__
__volatile__("tw 10, %0,%1"
75 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
77 static void tw_11 ( long n
, long m
) {
78 __asm__
__volatile__("tw 11, %0,%1"
79 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
81 static void tw_12 ( long n
, long m
) {
82 __asm__
__volatile__("tw 12, %0,%1"
83 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
85 static void tw_13 ( long n
, long m
) {
86 __asm__
__volatile__("tw 13, %0,%1"
87 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
89 static void tw_14 ( long n
, long m
) {
90 __asm__
__volatile__("tw 14, %0,%1"
91 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
93 static void tw_15 ( long n
, long m
) {
94 __asm__
__volatile__("tw 15, %0,%1"
95 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
97 static void tw_16 ( long n
, long m
) {
98 __asm__
__volatile__("tw 16, %0,%1"
99 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
101 static void tw_17 ( long n
, long m
) {
102 __asm__
__volatile__("tw 17, %0,%1"
103 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
105 static void tw_18 ( long n
, long m
) {
106 __asm__
__volatile__("tw 18, %0,%1"
107 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
109 static void tw_19 ( long n
, long m
) {
110 __asm__
__volatile__("tw 19, %0,%1"
111 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
113 static void tw_20 ( long n
, long m
) {
114 __asm__
__volatile__("tw 20, %0,%1"
115 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
117 static void tw_21 ( long n
, long m
) {
118 __asm__
__volatile__("tw 21, %0,%1"
119 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
121 static void tw_22 ( long n
, long m
) {
122 __asm__
__volatile__("tw 22, %0,%1"
123 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
125 static void tw_23 ( long n
, long m
) {
126 __asm__
__volatile__("tw 23, %0,%1"
127 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
129 static void tw_24 ( long n
, long m
) {
130 __asm__
__volatile__("tw 24, %0,%1"
131 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
133 static void tw_25 ( long n
, long m
) {
134 __asm__
__volatile__("tw 25, %0,%1"
135 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
137 static void tw_26 ( long n
, long m
) {
138 __asm__
__volatile__("tw 26, %0,%1"
139 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
141 static void tw_27 ( long n
, long m
) {
142 __asm__
__volatile__("tw 27, %0,%1"
143 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
145 static void tw_28 ( long n
, long m
) {
146 __asm__
__volatile__("tw 28, %0,%1"
147 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
149 static void tw_29 ( long n
, long m
) {
150 __asm__
__volatile__("tw 29, %0,%1"
151 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
153 static void tw_30 ( long n
, long m
) {
154 __asm__
__volatile__("tw 30, %0,%1"
155 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
157 static void tw_31 ( long n
, long m
) {
158 __asm__
__volatile__("tw 31, %0,%1"
159 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
162 #if defined(__powerpc64__)
164 static void td_0 ( long n
, long m
) {
165 __asm__
__volatile__("td 0, %0,%1"
166 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
168 static void td_1 ( long n
, long m
) {
169 __asm__
__volatile__("td 1, %0,%1"
170 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
172 static void td_2 ( long n
, long m
) {
173 __asm__
__volatile__("td 2, %0,%1"
174 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
176 static void td_3 ( long n
, long m
) {
177 __asm__
__volatile__("td 3, %0,%1"
178 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
180 static void td_4 ( long n
, long m
) {
181 __asm__
__volatile__("td 4, %0,%1"
182 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
184 static void td_5 ( long n
, long m
) {
185 __asm__
__volatile__("td 5, %0,%1"
186 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
188 static void td_6 ( long n
, long m
) {
189 __asm__
__volatile__("td 6, %0,%1"
190 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
192 static void td_7 ( long n
, long m
) {
193 __asm__
__volatile__("td 7, %0,%1"
194 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
196 static void td_8 ( long n
, long m
) {
197 __asm__
__volatile__("td 8, %0,%1"
198 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
200 static void td_9 ( long n
, long m
) {
201 __asm__
__volatile__("td 9, %0,%1"
202 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
204 static void td_10 ( long n
, long m
) {
205 __asm__
__volatile__("td 10, %0,%1"
206 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
208 static void td_11 ( long n
, long m
) {
209 __asm__
__volatile__("td 11, %0,%1"
210 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
212 static void td_12 ( long n
, long m
) {
213 __asm__
__volatile__("td 12, %0,%1"
214 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
216 static void td_13 ( long n
, long m
) {
217 __asm__
__volatile__("td 13, %0,%1"
218 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
220 static void td_14 ( long n
, long m
) {
221 __asm__
__volatile__("td 14, %0,%1"
222 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
224 static void td_15 ( long n
, long m
) {
225 __asm__
__volatile__("td 15, %0,%1"
226 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
228 static void td_16 ( long n
, long m
) {
229 __asm__
__volatile__("td 16, %0,%1"
230 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
232 static void td_17 ( long n
, long m
) {
233 __asm__
__volatile__("td 17, %0,%1"
234 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
236 static void td_18 ( long n
, long m
) {
237 __asm__
__volatile__("td 18, %0,%1"
238 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
240 static void td_19 ( long n
, long m
) {
241 __asm__
__volatile__("td 19, %0,%1"
242 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
244 static void td_20 ( long n
, long m
) {
245 __asm__
__volatile__("td 20, %0,%1"
246 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
248 static void td_21 ( long n
, long m
) {
249 __asm__
__volatile__("td 21, %0,%1"
250 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
252 static void td_22 ( long n
, long m
) {
253 __asm__
__volatile__("td 22, %0,%1"
254 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
256 static void td_23 ( long n
, long m
) {
257 __asm__
__volatile__("td 23, %0,%1"
258 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
260 static void td_24 ( long n
, long m
) {
261 __asm__
__volatile__("td 24, %0,%1"
262 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
264 static void td_25 ( long n
, long m
) {
265 __asm__
__volatile__("td 25, %0,%1"
266 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
268 static void td_26 ( long n
, long m
) {
269 __asm__
__volatile__("td 26, %0,%1"
270 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
272 static void td_27 ( long n
, long m
) {
273 __asm__
__volatile__("td 27, %0,%1"
274 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
276 static void td_28 ( long n
, long m
) {
277 __asm__
__volatile__("td 28, %0,%1"
278 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
280 static void td_29 ( long n
, long m
) {
281 __asm__
__volatile__("td 29, %0,%1"
282 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
284 static void td_30 ( long n
, long m
) {
285 __asm__
__volatile__("td 30, %0,%1"
286 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
288 static void td_31 ( long n
, long m
) {
289 __asm__
__volatile__("td 31, %0,%1"
290 : /*out*/ : /*in*/ "r" (n
), "r" (m
) );
298 #define TW_GROUP(cmp) \
299 try("tw_" #cmp "", tw_##cmp, -150, -100); \
300 try("tw_" #cmp "", tw_##cmp, -100, -100); \
301 try("tw_" #cmp "", tw_##cmp, -50, -100);
335 #if defined(__powerpc64__)
336 #define TD_GROUP(cmp) \
337 try("td_" #cmp "", td_##cmp, -150, -100); \
338 try("td_" #cmp "", td_##cmp, -100, -100); \
339 try("td_" #cmp "", td_##cmp, -50, -100);