From 38cf61209e1a5adcb25053b5bac8a3684cc400af Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Thu, 30 Mar 2023 20:25:16 +0000 Subject: [RV64_DYNAREC] Some more fixes to a few opcode (thanks to cosim) --- src/dynarec/rv64/dynarec_rv64_00.c | 2 +- src/dynarec/rv64/dynarec_rv64_emit_math.c | 2 +- src/dynarec/rv64/rv64_emitter.h | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c index a7be6681..61327703 100644 --- a/src/dynarec/rv64/dynarec_rv64_00.c +++ b/src/dynarec/rv64/dynarec_rv64_00.c @@ -834,7 +834,7 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0); SMREADLOCK(lock); - LB(x1, ed, fixedaddress); + LBU(x1, ed, fixedaddress); } if(gb2) { MOV64x(x4, ~0xff00); diff --git a/src/dynarec/rv64/dynarec_rv64_emit_math.c b/src/dynarec/rv64/dynarec_rv64_emit_math.c index 65680410..d05ccc24 100644 --- a/src/dynarec/rv64/dynarec_rv64_emit_math.c +++ b/src/dynarec/rv64/dynarec_rv64_emit_math.c @@ -771,7 +771,7 @@ void emit_neg32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s MV(s3, s1); // s3 = op1 } - NEG(s1, s1); + NEGxw(s1, s1); IFX(X_PEND) { SDxw(s1, xEmu, offsetof(x64emu_t, res)); } diff --git a/src/dynarec/rv64/rv64_emitter.h b/src/dynarec/rv64/rv64_emitter.h index f3d2f4b1..cf9b957a 100644 --- a/src/dynarec/rv64/rv64_emitter.h +++ b/src/dynarec/rv64/rv64_emitter.h @@ -205,6 +205,8 @@ f28–31 ft8–11 FP temporaries Caller #define NOT(rd, rs1) XORI(rd, rs1, -1) // rd = -rs1 #define NEG(rd, rs1) SUB(rd, xZR, rs1) +// rd = -rs1 +#define NEGxw(rd, rs1) SUBxw(rd, xZR, rs1) // rd = rs1 == 0 #define SEQZ(rd, rs1) SLTIU(rd, rs1, 1) // rd = rs1 != 0 -- cgit 1.4.1