mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-22 03:30:22 +02:00
Remove jit_nop
Instead, jit_align will call nop() internally. You can't nop 3 bytes on most architectures.
This commit is contained in:
parent
f2d7321504
commit
9d4185af2b
3 changed files with 10 additions and 38 deletions
|
@ -574,8 +574,6 @@ jit_load_args_3(jit_state_t *_jit, jit_operand_t a, jit_operand_t b,
|
||||||
M(RGG__, bxsubr_u) \
|
M(RGG__, bxsubr_u) \
|
||||||
M(RGu__, bxsubi_u) \
|
M(RGu__, bxsubi_u) \
|
||||||
\
|
\
|
||||||
M(_i___, nop) \
|
|
||||||
\
|
|
||||||
M(_G___, jmpr) \
|
M(_G___, jmpr) \
|
||||||
M(_p___, jmpi) \
|
M(_p___, jmpi) \
|
||||||
M(R____, jmp) \
|
M(R____, jmp) \
|
||||||
|
|
|
@ -248,16 +248,6 @@ is_power_of_two (unsigned x)
|
||||||
return x && !(x & (x-1));
|
return x && !(x & (x-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
jit_align(jit_state_t *_jit, unsigned align)
|
|
||||||
{
|
|
||||||
ASSERT (is_power_of_two (align));
|
|
||||||
uintptr_t here = _jit->pc.w;
|
|
||||||
uintptr_t there = (here + align - 1) & ~(align - 1);
|
|
||||||
if (there - here)
|
|
||||||
jit_nop(_jit, there - here);
|
|
||||||
}
|
|
||||||
|
|
||||||
static jit_gpr_t
|
static jit_gpr_t
|
||||||
get_temp_gpr(jit_state_t *_jit)
|
get_temp_gpr(jit_state_t *_jit)
|
||||||
{
|
{
|
||||||
|
@ -547,6 +537,16 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr)
|
||||||
FOR_EACH_INSTRUCTION(IMPL_INSTRUCTION)
|
FOR_EACH_INSTRUCTION(IMPL_INSTRUCTION)
|
||||||
#undef IMPL_INSTRUCTION
|
#undef IMPL_INSTRUCTION
|
||||||
|
|
||||||
|
void
|
||||||
|
jit_align(jit_state_t *_jit, unsigned align)
|
||||||
|
{
|
||||||
|
ASSERT (is_power_of_two (align));
|
||||||
|
uintptr_t here = _jit->pc.w;
|
||||||
|
uintptr_t there = (here + align - 1) & ~(align - 1);
|
||||||
|
if (there - here)
|
||||||
|
nop(_jit, there - here);
|
||||||
|
}
|
||||||
|
|
||||||
static jit_bool_t
|
static jit_bool_t
|
||||||
is_fpr_arg(enum jit_operand_abi arg)
|
is_fpr_arg(enum jit_operand_abi arg)
|
||||||
{
|
{
|
||||||
|
|
26
tests/nop.c
26
tests/nop.c
|
@ -1,26 +0,0 @@
|
||||||
#include "test.h"
|
|
||||||
|
|
||||||
static void
|
|
||||||
run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
|
|
||||||
{
|
|
||||||
jit_begin(j, arena_base, arena_size);
|
|
||||||
size_t align = jit_enter_jit_abi(j, 0, 0, 0);
|
|
||||||
|
|
||||||
size_t total = 0;
|
|
||||||
char *start = jit_address(j);
|
|
||||||
for (size_t i = 1; i < 10; total += i, i++)
|
|
||||||
jit_nop(j, i);
|
|
||||||
char *end = jit_address(j);
|
|
||||||
ASSERT(end - start == total);
|
|
||||||
jit_leave_jit_abi(j, 0, 0, align);
|
|
||||||
jit_reti(j, 42);
|
|
||||||
|
|
||||||
jit_word_t (*f)(void) = jit_end(j, NULL);
|
|
||||||
ASSERT(f() == 42);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc, char *argv[])
|
|
||||||
{
|
|
||||||
return main_helper(argc, argv, run_test);
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue