diff options
| author | Leslie Zhai <zhaixiang@loongson.cn> | 2024-12-25 22:56:54 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-25 15:56:54 +0100 |
| commit | 9492b6ca66ff36436d27994e54a2586e3e72ecfe (patch) | |
| tree | fc0f7f52ad91bad7b9cecf9e6aa6a59488ca9b7c /src | |
| parent | 4a45db781f865471a2778e046882d80087e26210 (diff) | |
| download | box64-9492b6ca66ff36436d27994e54a2586e3e72ecfe.tar.gz box64-9492b6ca66ff36436d27994e54a2586e3e72ecfe.zip | |
[LA64_DYNAREC] Added MOVLPD and MOVHPD opcodes (#2198)
* [LA64_DYNAREC] Added MOVLPD and MOVHPD opcodes * [LA64_DYNAREC] Fix VSTELM_D idx
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_0f.c | 1 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_660f.c | 24 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c index 7cc3938e..d7a0b89b 100644 --- a/src/dynarec/la64/dynarec_la64_0f.c +++ b/src/dynarec/la64/dynarec_la64_0f.c @@ -222,7 +222,6 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni VEXTRINS_D(v1, v0, 0x01); } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); - v1 = fpu_get_scratch(dyn); VSTELM_D(v0, ed, 0, 1); SMWRITE2(); } diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c index 90c7fdad..6d760bb9 100644 --- a/src/dynarec/la64/dynarec_la64_660f.c +++ b/src/dynarec/la64/dynarec_la64_660f.c @@ -103,6 +103,18 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int FLD_D(v1, wback, fixedaddress); VEXTRINS_D(v0, v1, 0); break; + case 0x13: + INST_NAME("MOVLPD Eq, Gx"); + nextop = F8; + GETGX(v0, 0); + if (MODREG) { + DEFAULT; + return addr; + } + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 0); + FST_D(v0, ed, fixedaddress); + SMWRITE2(); + break; case 0x14: INST_NAME("UNPCKLPD Gx, Ex"); nextop = F8; @@ -147,6 +159,18 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int FLD_D(v1, ed, fixedaddress); VEXTRINS_D(v0, v1, 0x10); break; + case 0x17: + INST_NAME("MOVHPD Eq, Gx"); + nextop = F8; + GETGX(v0, 0); + if (MODREG) { + DEFAULT; + return addr; + } + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSTELM_D(v0, ed, 0, 1); + SMWRITE2(); + break; case 0x1F: INST_NAME("NOP (multibyte)"); nextop = F8; |