From b0c10c9ae5938302b2bb9c941ba2a15e15d61be0 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 24 Nov 2024 15:49:02 +0800 Subject: [RV64_DYNAREC] Minor optimizations on CMPXCHG (#2062) --- src/dynarec/rv64/dynarec_rv64_f0.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_f0.c b/src/dynarec/rv64/dynarec_rv64_f0.c index 05242ef3..10d5231f 100644 --- a/src/dynarec/rv64/dynarec_rv64_f0.c +++ b/src/dynarec/rv64/dynarec_rv64_f0.c @@ -110,8 +110,7 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni wback = xRAX+(wback&3); } if (wb2) { - MV(x2, wback); - SRLI(x2, x2, wb2); + SRLI(x2, wback, wb2); ANDI(x2, x2, 0xff); } else { ANDI(x2, wback, 0xff); @@ -123,8 +122,7 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } BNE_MARK2(x6, x2); if (wb2) { - MV(wback, x2); - SRLI(wback, wback, wb2); + SRLI(wback, x2, wb2); ANDI(wback, wback, 0xff); } else { ANDI(wback, x2, 0xff); @@ -136,9 +134,6 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni OR(xRAX, xRAX, x2); B_NEXT_nocond; } else { - // this one is tricky, and did some repetitive work. - // mostly because we only got 6 scratch registers, - // and has so much to do. if(rex.rex) { gb1 = xRAX+((nextop&0x38)>>3)+(rex.r<<3); gb2 = 0; @@ -163,8 +158,7 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni NOT(x2, x2); AND(x2, x1, x2); if (gb2) { - MV(x1, gb1); - SRLI(x1, x1, 8); + SRLI(x1, gb1, 8); ANDI(x1, x1, 0xff); } else { ANDI(x1, gb1, 0xff); -- cgit 1.4.1