diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-10 15:17:03 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-10 15:17:03 +0200 |
| commit | 072241eb10a92c481113959d514d73cd6ab04063 (patch) | |
| tree | 17ecdc98eeb289e2916b20aa5cf56057ec6fddb1 /src | |
| parent | 84a8500323ad35246003e52cb669d34ee266d531 (diff) | |
| download | box64-072241eb10a92c481113959d514d73cd6ab04063.tar.gz box64-072241eb10a92c481113959d514d73cd6ab04063.zip | |
[ARM64_DYNAREC] Fixed AVX.66.0F3A 00/01 opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c index 620bf31d..e9b21133 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c @@ -69,13 +69,15 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip nextop = F8; GETGX_empty_EX(v0, q0, 1); u8 = F8; - if(v0==q0) {d0 = fpu_get_scratch(dyn, ninst); d1 = fpu_get_scratch(dyn, ninst);} + if(v0==q0) d0 = fpu_get_scratch(dyn, ninst); + if(v0==q0 || !MODREG) d1 = fpu_get_scratch(dyn, ninst); + q1 = d1; GETGY_empty_EY(v1, q1); - if(v0==q0) { VMOVQ(d0, v0); VMOVQ(d1, v1); q0 = d0; q1 = d1;} else {d1 = q1; d0 = q0;} + if(v0==q0) { VMOVQ(d0, q0); VMOVQ(d1, q1); } else {d1 = q1; d0 = q0;} VMOVeD(v0, 0, ((u8>>1)&1)?d1:d0, (u8>>0)&1); VMOVeD(v0, 1, ((u8>>3)&1)?d1:d0, (u8>>2)&1); - VMOVeD(v1, 0, ((u8>>5)&1)?q1:q0, (u8>>4)&1); - VMOVeD(v1, 1, ((u8>>7)&1)?q1:q0, (u8>>6)&1); + VMOVeD(v1, 0, ((u8>>5)&1)?d1:d0, (u8>>4)&1); + VMOVeD(v1, 1, ((u8>>7)&1)?d1:d0, (u8>>6)&1); break; case 0x02: INST_NAME("VPBLENDD Gx, Vx, Ex, u8"); |