From 7e514ce4bd3a255ef7555f4867659e9c41d0719b Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Mon, 26 Jun 2023 14:36:11 +0800 Subject: [DYNAREC_RV64] Fixed A0 MOV AL,Ob (#866) * [DYNAREC_RV64] Fixed A0 MOV AL,Ob * Fixed rv64_move32 --- src/dynarec/rv64/dynarec_rv64_00_2.c | 4 +++- src/dynarec/rv64/dynarec_rv64_helper.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_00_2.c b/src/dynarec/rv64/dynarec_rv64_00_2.c index 3fe52cef..7a5794b9 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_2.c +++ b/src/dynarec/rv64/dynarec_rv64_00_2.c @@ -520,7 +520,9 @@ uintptr_t dynarec64_00_2(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOV AL,Ob"); if(rex.is32bits) u64 = F32; else u64 = F64; MOV64z(x1, u64); - LBU(xRAX, x1, 0); + LBU(x1, x1, 0); + ANDI(xRAX, xRAX, ~0xff); + OR(xRAX, xRAX, x1); break; case 0xA1: INST_NAME("MOV EAX,Od"); diff --git a/src/dynarec/rv64/dynarec_rv64_helper.c b/src/dynarec/rv64/dynarec_rv64_helper.c index 3342880e..a005c3b9 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.c +++ b/src/dynarec/rv64/dynarec_rv64_helper.c @@ -2047,7 +2047,7 @@ void rv64_move32(dynarec_rv64_t* dyn, int ninst, int reg, int32_t val, int zerou LUI(reg, hi20); src = reg; } - if (lo12 || !hi20) ADDI(reg, src, lo12); + if (lo12 || !hi20) ADDIW(reg, src, lo12); if((zeroup && ((hi20&0x80000) || (!hi20 && (lo12&0x800))) || (!zeroup && !(val&0x80000000) && ((hi20&0x80000) || (!hi20 && (lo12&0x800)))))) { ZEROUP(reg); -- cgit 1.4.1