diff --git a/src/isa/riscv32/exec/control.h b/src/isa/riscv32/exec/control.h index 56e681745b2bb010734994fb0d0d561fe96f26b2..8b64d19190236d1eb4f46727002d805d4e13b8ab 100644 --- a/src/isa/riscv32/exec/control.h +++ b/src/isa/riscv32/exec/control.h @@ -9,7 +9,9 @@ static inline make_EHelper(jal) { static inline make_EHelper(jalr) { rtl_addi(s, s0, dsrc1, id_src2->imm); +#ifdef __ENGINE_interpreter__ rtl_andi(s, s0, s0, ~0x1u); +#endif rtl_jr(s, s0); rtl_li(s, ddest, s->seq_pc); diff --git a/src/isa/riscv64/exec/control.h b/src/isa/riscv64/exec/control.h index cd70a4bdae1028d21c4b4f761504d32d8c49a6a9..577f57ed26949af9899bf2fdf74b2ba1bac54957 100644 --- a/src/isa/riscv64/exec/control.h +++ b/src/isa/riscv64/exec/control.h @@ -9,7 +9,9 @@ static inline make_EHelper(jal) { static inline make_EHelper(jalr) { rtl_addi(s, s0, dsrc1, id_src2->imm); +#ifdef __ENGINE_interpreter__ rtl_andi(s, s0, s0, ~0x1lu); +#endif rtl_jr(s, s0); rtl_li(s, ddest, s->seq_pc);