diff --git a/src/dynarec/dynarec_arm64_67.c b/src/dynarec/dynarec_arm64_67.c index 6e3687a52..22466181d 100755 --- a/src/dynarec/dynarec_arm64_67.c +++ b/src/dynarec/dynarec_arm64_67.c @@ -157,6 +157,9 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; #undef GO + case 0xE8: + return dynarec64_00(dyn, addr-1, ip, ninst, rex, rep, ok, need_epilog); // addr-1, to "put back" opcode) + default: DEFAULT; } diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c index 239bae4af..6668999f9 100644 --- a/src/emu/x64run67.c +++ b/src/emu/x64run67.c @@ -29,6 +29,7 @@ int Run67(x64emu_t *emu, rex_t rex, int rep) int8_t tmp8s; uint8_t tmp8u; uint32_t tmp32u; + int32_t tmp32s; uint64_t tmp64u; reg64_t *oped, *opgd; @@ -237,6 +238,12 @@ int Run67(x64emu_t *emu, rex_t rex, int rep) R_RIP += tmp8s; break; + case 0xE8: /* CALL Id */ + tmp32s = F32S; // call is relative + Push(emu, R_RIP); + R_RIP += tmp32s; + break; + case 0xF7: /* GRP3 Ed(,Id) */ nextop = F8; tmp8u = (nextop>>3)&7;