diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-09-09 03:30:04 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-08 21:30:04 +0200 |
| commit | c6bb8b335a3acd0a5687cdd101e0e32aae6c032f (patch) | |
| tree | 374d01656e9bbb659c04e22cda5e517ca256f2f9 | |
| parent | 464fdc3ebe5816c281b0cf9e1960cb33386e29e9 (diff) | |
| download | box64-c6bb8b335a3acd0a5687cdd101e0e32aae6c032f.tar.gz box64-c6bb8b335a3acd0a5687cdd101e0e32aae6c032f.zip | |
[RV64_DYNAREC] Added more scalar avx opcodes and fixed a typo (#3009)
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_avx_0f.c | 39 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_avx_66_0f38.c | 2 |
2 files changed, 40 insertions, 1 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_avx_0f.c b/src/dynarec/rv64/dynarec_rv64_avx_0f.c index 987bf036..ec68be6e 100644 --- a/src/dynarec/rv64/dynarec_rv64_avx_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_avx_0f.c @@ -46,6 +46,45 @@ uintptr_t dynarec64_AVX_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, in rex_t rex = vex.rex; switch (opcode) { + case 0x10: + INST_NAME("VMOVUPS Gx, Ex"); + nextop = F8; + GETEX(x1, 0, vex.l ? 24 : 8); + GETGX(); + GETGY(); + LD(x3, wback, fixedaddress + 0); + LD(x4, wback, fixedaddress + 8); + SD(x3, gback, gdoffset + 0); + SD(x4, gback, gdoffset + 8); + if (vex.l) { + GETEY(); + LD(x3, wback, fixedaddress + 0); + LD(x4, wback, fixedaddress + 8); + SD(x3, gback, gyoffset + 0); + SD(x4, gback, gyoffset + 8); + } else + YMM0(gd); + break; + case 0x11: + INST_NAME("VMOVUPS Ex, Gx"); + nextop = F8; + GETEX(x1, 0, vex.l ? 24 : 8); + GETGX(); + GETGY(); + LD(x3, gback, gdoffset + 0); + LD(x4, gback, gdoffset + 8); + SD(x3, wback, fixedaddress + 0); + SD(x4, wback, fixedaddress + 8); + if (vex.l) { + GETEY(); + LD(x3, gback, gyoffset + 0); + LD(x4, gback, gyoffset + 8); + SD(x3, wback, fixedaddress + 0); + SD(x4, wback, fixedaddress + 8); + } else + YMM0(ed); + if (!MODREG) SMWRITE2(); + break; case 0x12: nextop = F8; GETEX(x2, 0, 8); diff --git a/src/dynarec/rv64/dynarec_rv64_avx_66_0f38.c b/src/dynarec/rv64/dynarec_rv64_avx_66_0f38.c index 40ec2518..65b9d47b 100644 --- a/src/dynarec/rv64/dynarec_rv64_avx_66_0f38.c +++ b/src/dynarec/rv64/dynarec_rv64_avx_66_0f38.c @@ -590,7 +590,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i AND(x6, x4, x2); AND(x7, x5, x3); OR(x6, x6, x7); - BNEZ(x3, 4 + 4); + BNEZ(x6, 4 + 4); ORI(xFlags, xFlags, 1 << F_CF); } } |