diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-05-21 17:54:08 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-21 11:54:08 +0200 |
| commit | bb537e4dd5fe07b08c7d2fe01fe7798869aa959e (patch) | |
| tree | 04da0b486809bcc184d6167b3f5862087aad5a70 /src | |
| parent | eb59ff2ebdc4fd088f98a46a3f732291ae84376b (diff) | |
| download | box64-bb537e4dd5fe07b08c7d2fe01fe7798869aa959e.tar.gz box64-bb537e4dd5fe07b08c7d2fe01fe7798869aa959e.zip | |
[RV64_DYNAREC] Fixed some MMX opcodes (#1513)
* Fixed MOVD opcode * Fixed PSHUFW opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_0f.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index 90cddbba..4159068f 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -1000,6 +1000,10 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETGM(); if (MODREG) { ed = xRAX + (nextop & 7) + (rex.b << 3); + if (!rex.w) { + AND(x4, ed, xMASK); + ed = x4; + } } else { addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 1, 0); LDxw(x4, ed, fixedaddress); @@ -1021,8 +1025,8 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETGM(); GETEM(x2, 1); u8 = F8; - LHU(x3, gback, gdoffset + ((u8 >> (0 * 2)) & 3) * 2); - LHU(x4, gback, gdoffset + ((u8 >> (1 * 2)) & 3) * 2); + LHU(x3, wback, fixedaddress + ((u8 >> (0 * 2)) & 3) * 2); + LHU(x4, wback, fixedaddress + ((u8 >> (1 * 2)) & 3) * 2); LHU(x5, wback, fixedaddress + ((u8 >> (2 * 2)) & 3) * 2); LHU(x6, wback, fixedaddress + ((u8 >> (3 * 2)) & 3) * 2); SH(x3, gback, gdoffset + 0 * 2); |