diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-01 10:35:24 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-01 10:35:24 +0200 |
| commit | 75878b24cd87ceda99df7b93c410056d176d6c70 (patch) | |
| tree | 864763bca51fce7b7ebc68dd9df4de38ec58da8f /src | |
| parent | fe0425eb80a37bf96aadc5afbf7de636fff0641c (diff) | |
| download | box64-75878b24cd87ceda99df7b93c410056d176d6c70.tar.gz box64-75878b24cd87ceda99df7b93c410056d176d6c70.zip | |
[ARM64_DYNAREC] Added AVX.F3.0F 7F opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c index 7ff19269..f051acb6 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c @@ -62,7 +62,7 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, switch(opcode) { case 0x6F: - INST_NAME("VMOVDQU Gx,Ex");// no alignment constraint on NEON here, so same as MOVDQA + INST_NAME("VMOVDQU Gx, Ex");// no alignment constraint on NEON here, so same as MOVDQA nextop = F8; if(MODREG) { v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0); @@ -86,6 +86,29 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, if(!vex.l) YMM0(gd); break; + case 0x7F: + INST_NAME("VMOVDQU Ex, Gx"); + nextop = F8; + GETGX(v0, 0); + if(MODREG) { + v1 = sse_get_reg_empty(dyn, ninst, x1, (nextop&7) + (rex.b<<3)); + VMOVQ(v1, v0); + if(vex.l) { + GETGY(v0, 0, (nextop&7) + (rex.b<<3), -1, -1); + v1 = ymm_get_reg_empty(dyn, ninst, x1, (nextop&7) + (rex.b<<3), gd, -1, -1); + VMOVQ(v1, v0); + } // no ymm raz here it seems + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xffe<<4, 15, rex, NULL, 0, 0); + VSTR128_U12(v0, ed, fixedaddress); + if(vex.l) { + GETGY(v0, 0, -1, -1, -1); + VSTR128_U12(v0, ed, fixedaddress+16); + } + SMWRITE2(); + } + break; + default: DEFAULT; } |