From 9de2aa55cdafac5a8f0aa38345d829f086a04cf6 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 13 May 2023 15:27:32 +0000 Subject: [RV64_DYNAREC] Small optim for GETSEW(...) helper macro --- src/dynarec/rv64/dynarec_rv64_helper.h | 3 +-- src/dynarec/rv64/rv64_emitter.h | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index d76bd552..66e228b6 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -150,8 +150,7 @@ //GETSEW will use i for ed, and can use r3 for wback. This is the Signed version #define GETSEW(i, D) if(MODREG) { \ wback = xRAX+(nextop&7)+(rex.b<<3);\ - SLLI(i, wback, 48); \ - SRAI(i, i, 48); \ + if(rv64_zbb) SEXTH(i, wback); else {SLLI(i, wback, 48); SRAI(i, i, 48);}\ ed = i; \ wb1 = 0; \ } else { \ diff --git a/src/dynarec/rv64/rv64_emitter.h b/src/dynarec/rv64/rv64_emitter.h index 3ee6bd11..bc737cc0 100644 --- a/src/dynarec/rv64/rv64_emitter.h +++ b/src/dynarec/rv64/rv64_emitter.h @@ -572,7 +572,9 @@ f28–31 ft8–11 FP temporaries Caller // Sign-extend half-word #define SEXTH(rd, rs) EMIT(R_type(0b0110000, 0b00101, rs, 0b001, rd, 0b0010011)) // Zero-extend half-word -#define ZEXTH(rd, rs) if(rv64_zbb) EMIT(R_type(0b0000100, 0b00000, rs, 0b100, rd, 0b0111011)); else {SLLI(rd, rs, 48); SRLI(rd, rd, 48);} +#define ZEXTH_(rd, rs) EMIT(R_type(0b0000100, 0b00000, rs, 0b100, rd, 0b0111011)) +// Zero-extend half-word +#define ZEXTH(rd, rs) if(rv64_zbb) ZEXTH_(rd, rs); else {SLLI(rd, rs, 48); SRLI(rd, rd, 48);} // Rotate left (register) #define ROL(rd, rs1, rs2) EMIT(R_type(0b0110000, rs2, rs1, 0b001, rd, 0b0110011)) // Rotate left word (register) -- cgit 1.4.1