diff options
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; |