diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_00.c | 8 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_arm64_helper.h | 4 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c index e5295b82..99a2cab6 100755 --- a/src/dynarec/dynarec_arm64_00.c +++ b/src/dynarec/dynarec_arm64_00.c @@ -848,8 +848,8 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin TSTx_mask(ed, 1, 0, 1+rex.w); // mask=3 or 7 B_MARK(cNE); MARKLOCK; - LDXRxw(x1, ed); - STXRxw(x3, gd, ed); + LDAXRxw(x1, ed); + STLXRxw(x3, gd, ed); CBNZx_MARKLOCK(x3); B_MARK2_nocond; MARK; @@ -977,8 +977,8 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRxw_U12(x1, xRDI, 0); ADDx_REG(xRSI, xRSI, x3); ADDx_REG(xRDI, xRDI, x3); - SUBSx_U12(xRCX, xRCX, 1); - B_MARK(cNE); + SUBx_U12(xRCX, xRCX, 1); + CBNZx_MARK(xRCX); // done } else { INST_NAME("MOVSD"); diff --git a/src/dynarec/dynarec_arm64_helper.h b/src/dynarec/dynarec_arm64_helper.h index 7c1d4ca7..d4920dec 100755 --- a/src/dynarec/dynarec_arm64_helper.h +++ b/src/dynarec/dynarec_arm64_helper.h @@ -261,6 +261,10 @@ #define B_MARK_nocond \ j32 = GETMARK-(dyn->arm_size); \ B(j32) +// Branch to MARK if reg is not 0 (use j32) +#define CBNZx_MARK(reg) \ + j32 = GETMARK-(dyn->arm_size); \ + CBNZx(reg, j32) // Branch to MARK2 if cond (use j32) #define B_MARK2(cond) \ j32 = GETMARK2-(dyn->arm_size); \ |