diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-02-07 16:57:56 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-07 09:57:56 +0100 |
| commit | 6c60ad4695c167ac0a9f75b4b139eb46f5abaab9 (patch) | |
| tree | 1c5f11ce00c633de5b168c182a2a756bfb86835c /src | |
| parent | 37697e2ec7484a9bcc00d70a46147365121617a1 (diff) | |
| download | box64-6c60ad4695c167ac0a9f75b4b139eb46f5abaab9.tar.gz box64-6c60ad4695c167ac0a9f75b4b139eb46f5abaab9.zip | |
[RV64_DYNAREC] Small optim to 64 A1/A3 opcodes (#2320)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_64.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_64.c b/src/dynarec/rv64/dynarec_rv64_64.c index c7b7885e..8d1e2d7f 100644 --- a/src/dynarec/rv64/dynarec_rv64_64.c +++ b/src/dynarec/rv64/dynarec_rv64_64.c @@ -496,9 +496,12 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u64 = F32; else u64 = F64; - // TODO: could be optimized. - MOV64z(x1, u64); - ADDz(x1, x1, x4); + if (u64 < 0x800) { + ADDIz(x1, x4, u64); + } else { + MOV64z(x1, u64); + ADDz(x1, x1, x4); + } LDxw(xRAX, x1, 0); break; @@ -509,9 +512,12 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u64 = F32; else u64 = F64; - // TODO: could be optimized. - MOV64z(x1, u64); - ADDz(x1, x1, x4); + if (u64 < 0x800) { + ADDIz(x1, x4, u64); + } else { + MOV64z(x1, u64); + ADDz(x1, x1, x4); + } SDxw(xRAX, x1, 0); SMWRITE2(); break; |