Revision 9bbc5cc8
b/dyngen-exec.h | ||
---|---|---|
254 | 254 |
#define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n) |
255 | 255 |
#elif defined(__s390__) |
256 | 256 |
#define EXIT_TB() asm volatile ("br %r14") |
257 |
#define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n)
|
|
257 |
#define GOTO_LABEL_PARAM(n) asm volatile ("bras %r7,8; .long " ASM_NAME(__op_gen_label) #n "; l %r7, 0(%r7); br %r7")
|
|
258 | 258 |
#elif defined(__alpha__) |
259 | 259 |
#define EXIT_TB() asm volatile ("ret") |
260 | 260 |
#elif defined(__ia64__) |
b/exec-all.h | ||
---|---|---|
340 | 340 |
"1:\n");\ |
341 | 341 |
} while (0) |
342 | 342 |
|
343 |
#elif defined(__s390__) |
|
344 |
/* GCC spills R13, so we have to restore it before branching away */ |
|
345 |
|
|
346 |
#define GOTO_TB(opname, tbparam, n)\ |
|
347 |
do {\ |
|
348 |
static void __attribute__((used)) *dummy ## n = &&dummy_label ## n;\ |
|
349 |
static void __attribute__((used)) *__op_label ## n \ |
|
350 |
__asm__(ASM_OP_LABEL_NAME(n, opname)) = &&label ## n;\ |
|
351 |
__asm__ __volatile__ ( \ |
|
352 |
"l %%r13,52(%%r15)\n" \ |
|
353 |
"br %0\n" \ |
|
354 |
: : "r" (((TranslationBlock*)tbparam)->tb_next[n]));\ |
|
355 |
\ |
|
356 |
for(;*((int*)0);); /* just to keep GCC busy */ \ |
|
357 |
label ## n: ;\ |
|
358 |
dummy_label ## n: ;\ |
|
359 |
} while(0) |
|
360 |
|
|
343 | 361 |
#else |
344 | 362 |
|
345 | 363 |
/* jump to next block operations (more portable code, does not need |
Also available in: Unified diff