Revision 56779034
b/tcg/arm/tcg-target.c | ||
---|---|---|
352 | 352 |
|
353 | 353 |
static inline void tcg_out_b_noaddr(TCGContext *s, int cond) |
354 | 354 |
{ |
355 |
/* We pay attention here to not modify the branch target by skipping |
|
356 |
the corresponding bytes. This ensure that caches and memory are |
|
357 |
kept coherent during retranslation. */ |
|
355 | 358 |
#ifdef HOST_WORDS_BIGENDIAN |
356 | 359 |
tcg_out8(s, (cond << 4) | 0x0a); |
357 | 360 |
s->code_ptr += 3; |
b/tcg/ia64/tcg-target.c | ||
---|---|---|
871 | 871 |
{ |
872 | 872 |
TCGLabel *l = &s->labels[label_index]; |
873 | 873 |
|
874 |
/* We pay attention here to not modify the branch target by reading |
|
875 |
the existing value and using it again. This ensure that caches and |
|
876 |
memory are kept coherent during retranslation. */ |
|
874 | 877 |
tcg_out_bundle(s, mmB, |
875 | 878 |
tcg_opc_m48(TCG_REG_P0, OPC_NOP_M48, 0), |
876 | 879 |
tcg_opc_m48(TCG_REG_P0, OPC_NOP_M48, 0), |
b/tcg/mips/tcg-target.c | ||
---|---|---|
351 | 351 |
*/ |
352 | 352 |
static inline void tcg_out_opc_br(TCGContext *s, int opc, int rt, int rs) |
353 | 353 |
{ |
354 |
/* We need to keep the offset unchanged for retranslation */ |
|
354 |
/* We pay attention here to not modify the branch target by reading |
|
355 |
the existing value and using it again. This ensure that caches and |
|
356 |
memory are kept coherent during retranslation. */ |
|
355 | 357 |
uint16_t offset = (uint16_t)(*(uint32_t *) s->code_ptr); |
356 | 358 |
|
357 | 359 |
tcg_out_opc_imm(s, opc, rt, rs, offset); |
Also available in: Unified diff