diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c index cbd7ea1a..5338c53a 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c @@ -554,12 +554,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip nextop = F8; if(vex.l) {GETEX64(q1, 0, 0);} else {GETEX32(q1, 0, 0);} GETGX_empty(q0); + SXTL_8(q0, q1); if(vex.l) { GETGY_empty(v0, -1, -1, -1); - SXTL_8(v0, q1); - SXTL2_16(v0, v0); + SXTL2_16(v0, q0); } else YMM0(gd); - SXTL_8(q0, q1); SXTL_16(q0, q0); break; case 0x22: @@ -567,14 +566,12 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip nextop = F8; if(vex.l) {GETEX32(q1, 0, 0);} else {GETEX16(q1, 0, 0);} GETGX_empty(q0); + SXTL_8(q0, q1); + SXTL_16(q0, q0); if(vex.l) { GETGY_empty(v0, -1, -1, -1); - SXTL_8(v0, q1); - SXTL_16(v0, v0); - SXTL2_32(v0, v0); + SXTL2_32(v0, q0); } else YMM0(gd); - SXTL_8(q0, q1); - SXTL_16(q0, q0); SXTL_32(q0, q0); break; case 0x23: @@ -593,12 +590,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip nextop = F8; if(vex.l) {GETEX64(q1, 0, 0);} else {GETEX32(q1, 0, 0);} GETGX_empty(q0); + SXTL_16(q0, q1); if(vex.l) { GETGY_empty(v0, -1, -1, -1); - SXTL_16(v0, q1); - SXTL2_32(v0, v0); + SXTL2_32(v0, q0); } else YMM0(gd); - SXTL_16(q0, q1); SXTL_32(q0, q0); break; case 0x25: @@ -928,12 +924,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip GETG; if(vex.l) { GETEX64(q1, 0, 0); } else { GETEX32(q1, 0, 0); YMM0(gd); } GETGX_empty(q0); + UXTL_8(q0, q1); if(vex.l) { GETGY_empty(v0, -1, -1, -1); - UXTL_8(v0, q1); - UXTL2_16(v0, v0); + UXTL2_16(v0, q0); } - UXTL_8(q0, q1); UXTL_16(q0, q0); break; case 0x32: @@ -942,14 +937,12 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip GETG; if(vex.l) { GETEX32(q1, 0, 0); } else { GETEX16(q1, 0, 0); YMM0(gd); } GETGX_empty(q0); + UXTL_8(q0, q1); + UXTL_16(q0, q0); if(vex.l) { GETGY_empty(v0, -1, -1, -1); - UXTL_8(v0, q1); - UXTL_16(v0, v0); - UXTL2_32(v0, v0); + UXTL2_32(v0, q0); } - UXTL_8(q0, q1); - UXTL_16(q0, q0); UXTL_32(q0, q0); break; case 0x33: @@ -970,12 +963,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip GETG; if(vex.l) { GETEX64(q1, 0, 0); } else { GETEX32(q1, 0, 0); YMM0(gd); } GETGX_empty(q0); + UXTL_16(q0, q1); if(vex.l) { GETGY_empty(v0, -1, -1, -1); - UXTL_16(v0, q1); - UXTL2_32(v0, v0); + UXTL2_32(v0, q0); } - UXTL_16(q0, q1); UXTL_32(q0, q0); break; case 0x35: |