} while (0)
#define host_instructions_updated(base, end, force) \
- do { if (force) __builtin___clear_cache(base, end); } while (0)
+ do { if (force) emith_update_add(base, end); } while (0)
#define host_arg2reg(rd, arg) \
rd = arg
{
int step, tmp;
asm volatile(
- " bal 0f;" // needed to allow for jr.hb
- " b 3f;"
-
- "0: rdhwr %2, $1;"
- " beqz %2, 2f;"
+ " rdhwr %2, $1;"
+ " bal 0f;" // needed to allow for jr.hb:
+ "0: addiu $ra, $ra, 3f-0b;" // set ra to insn after jr.hb
+ " beqz %2, 3f;"
"1: synci 0(%0);"
" sltu %3, %0, %1;"
emith_jump_patch(jump, bl->blx, &jump);
emith_jump_at(bl->blx, be->tcache_ptr);
host_instructions_updated(bl->blx, bl->blx + emith_jump_at_size(),
- ((uintptr_t)bl->blx & 0x0f) + emith_jump_at_size()-1 > 0x0f);
+ ((uintptr_t)bl->blx & 0x1f) + emith_jump_at_size()-1 > 0x1f);
}
} else {
printf("unknown BL type %d\n", bl->type);
exit(1);
}
- host_instructions_updated(jump, jump + jsz, ((uintptr_t)jump & 0x0f) + jsz-1 > 0x0f);
+ host_instructions_updated(jump, jump + jsz, ((uintptr_t)jump & 0x1f) + jsz-1 > 0x1f);
}
// move bl to block_entry