diff options
Diffstat (limited to 'src/dynarec/dynarec_arm64_00.c')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_00.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c index bb40a9a7..4cd18a25 100755 --- a/src/dynarec/dynarec_arm64_00.c +++ b/src/dynarec/dynarec_arm64_00.c @@ -2319,9 +2319,15 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVx_REG(xRAX, x2); } else { GETEDH(x1, 0); // get edd changed addr, so cannot be called 2 times for same op... - CBZxw_MARK(xRDX); + //Need to see if RDX==0 and RAX not signed + // or RDX==-1 and RAX signed + CBNZx_MARK2(xRDX); + TBZ_MARK(xRAX, 31); + MARK2; MVNx_REG(x2, xRDX); - CBZxw_MARK(x2); + CBNZx_MARK3(x2); + TBNZ_MARK(xRAX, 31); + MARK3; if(ed!=x1) {MOVx_REG(x1, ed);} CALL((void*)idiv64, -1); B_NEXT_nocond; |