[DYNAREC] Fixed 66 8D opcode and also a regression introduced in last commit (#3050)

This commit is contained in:
Yang Liu
2025-10-10 21:59:31 +08:00
committed by GitHub
parent 70ab16a6d6
commit 65b6f716d5
4 changed files with 8 additions and 10 deletions

View File

@@ -706,13 +706,11 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
if(MODREG) { // reg <= reg? that's an invalid operation
DEFAULT;
} else { // mem <= reg
addr = geted(dyn, addr, ninst, nextop, &ed, gd, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0);
if(gd!=ed) { // it's sometimes used as a 3 bytes NOP
if(rex.w)
MOVx_REG(gd, ed);
else
BFIx(gd, ed, 0, 16);
}
addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0);
if (rex.w)
MOVx_REG(gd, ed);
else
BFIx(gd, ed, 0, 16);
}
break;
case 0x8E:

View File

@@ -380,7 +380,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
// done
if (!rex.w) { B_MARK_nocond; }
MOVxw_REG(xRAX, x1);
if(!ALIGNED_ATOMICxw && rex.w) {
if (!ALIGNED_ATOMICxw) {
B_MARK_nocond;
}
}

View File

@@ -194,7 +194,7 @@ uintptr_t dynarec64_F0(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
BEQZ_MARKLOCK(x4);
if (!rex.w) { B_MARK_nocond; }
MVxw(xRAX, x1);
if (rex.w) { B_MARK_nocond; }
B_MARK_nocond;
MARK3;
// Unaligned
ADDI_D(x5, xZR, -(1 << (rex.w + 2)));

View File

@@ -267,7 +267,7 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
BNEZ_MARKLOCK(x4);
if (!rex.w) { B_MARK_nocond; }
MVxw(xRAX, x1);
if (rex.w) { B_MARK_nocond; }
B_MARK_nocond;
MARK3;
// Unaligned
ANDI(x5, wback, -(1 << (rex.w + 2)));