From 81eb0b45b3fc2653a524663cf67632d6b40ed336 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 7 Jan 2025 20:39:47 +0100 Subject: [ARM64_DYNAREC]Small optimisation for 8bits and 16bits NOT opcode on register --- src/dynarec/arm64/dynarec_arm64_00.c | 12 +++++++++--- src/dynarec/arm64/dynarec_arm64_66.c | 12 +++++++++--- src/dynarec/arm64/dynarec_arm64_helper.h | 3 +++ 3 files changed, 21 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 07b724e1..8f452ca9 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -3383,9 +3383,15 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 2: INST_NAME("NOT Eb"); - GETEB(x1, 0); - MVNw_REG(x1, x1); - EBBACK; + if(MODREG) { + CALCEB(); + int mask = convert_bitmask_x(0xff<>12)&1, mask&0x3F, (mask>>6)&0x3F); + } else { + GETEB(x1, 0); + MVNw_REG(x1, x1); + EBBACK; + } break; case 3: INST_NAME("NEG Eb"); diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index b1d66f1c..288691a3 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -1347,9 +1347,15 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 2: INST_NAME("NOT Ew"); - GETEW(x1, 0); - MVNw_REG(ed, ed); - EWBACK; + if(MODREG) { + CALCEW(); + int mask = convert_bitmask_x(0xffff); + EORx_mask(wback, wback, (mask>>12)&1, mask&0x3F, (mask>>6)&0x3F); + } else { + GETEW(x1, 0); + MVNw_REG(ed, ed); + EWBACK; + } break; case 3: INST_NAME("NEG Ew"); diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 403f1535..2da90d59 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -258,6 +258,9 @@ ed = i; \ wb1 = 1; \ } +//Compute wback for MDREG only, no fetching +#define CALCEW() \ + wback = TO_NAT((nextop & 7) + (rex.b << 3)); \ //GETEW will use i for ed, and can use r3 for wback. #define GETEW(i, D) \ if (MODREG) { \ -- cgit 1.4.1