Revision 76d83bde exec-all.h
b/exec-all.h | ||
---|---|---|
350 | 350 |
"1:\n");\ |
351 | 351 |
} while (0) |
352 | 352 |
|
353 |
#elif defined(__s390__) |
|
354 |
/* GCC spills R13, so we have to restore it before branching away */ |
|
355 |
|
|
356 |
#define GOTO_TB(opname, tbparam, n)\ |
|
357 |
do {\ |
|
358 |
static void __attribute__((used)) *dummy ## n = &&dummy_label ## n;\ |
|
359 |
static void __attribute__((used)) *__op_label ## n \ |
|
360 |
__asm__(ASM_OP_LABEL_NAME(n, opname)) = &&label ## n;\ |
|
361 |
__asm__ __volatile__ ( \ |
|
362 |
"l %%r13,52(%%r15)\n" \ |
|
363 |
"br %0\n" \ |
|
364 |
: : "r" (((TranslationBlock*)tbparam)->tb_next[n]));\ |
|
365 |
\ |
|
366 |
for(;*((int*)0);); /* just to keep GCC busy */ \ |
|
367 |
label ## n: ;\ |
|
368 |
dummy_label ## n: ;\ |
|
369 |
} while(0) |
|
370 |
|
|
371 | 353 |
#else |
372 | 354 |
|
373 | 355 |
/* jump to next block operations (more portable code, does not need |
Also available in: Unified diff