diff options
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_avx_66_0f.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c b/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c index e7389fc2..64d2a93f 100644 --- a/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c @@ -78,6 +78,27 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, SD(xZR, gyback, gyoffset); SD(xZR, gyback, gyoffset + 8); break; + case 0x6F: + INST_NAME("VMOVDQA Gx, Ex"); + nextop = F8; + GETEX(x2, 0, vex.l ? 24 : 8); + GETGX(); + GETGY(); + LD(x3, wback, fixedaddress); + SD(x3, gback, gdoffset); + LD(x3, wback, fixedaddress + 8); + SD(x3, gback, gdoffset + 8); + if (vex.l) { + GETEY(); + LD(x3, wback, fixedaddress); + SD(x3, gyback, gyoffset); + LD(x3, wback, fixedaddress + 8); + SD(x3, gyback, gyoffset + 8); + } else { + SD(xZR, gyback, gyoffset); + SD(xZR, gyback, gyoffset + 8); + } + break; case 0x7E: INST_NAME("VMOVD Ed, Gx"); nextop = F8; @@ -103,6 +124,27 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, } } break; + case 0x7F: + INST_NAME("VMOVDQA Ex, Gx"); + nextop = F8; + GETEX(x2, 0, vex.l ? 24 : 8); + GETGX(); + GETGY(); + LD(x3, gback, gdoffset); + SD(x3, wback, fixedaddress); + LD(x3, gback, gdoffset + 8); + SD(x3, wback, fixedaddress + 8); + if (vex.l) { + GETEY(); + LD(x3, gyback, gyoffset); + SD(x3, wback, fixedaddress); + LD(x3, gyback, gyoffset + 8); + SD(x3, wback, fixedaddress + 8); + } else if (MODREG) { + SD(xZR, wback, fixedaddress); + SD(xZR, wback, fixedaddress + 8); + } + break; default: DEFAULT; } |