diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-30 17:17:08 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-30 17:17:08 +0200 |
| commit | eae608f35c1cc1afd58bb30f7cc779102321763c (patch) | |
| tree | 2747f36a0a4e8374cc61dfdf665f5637b26f526c /src | |
| parent | 89dbd81f27bc8a3ad1e27d7073883f27ee15865f (diff) | |
| download | box64-eae608f35c1cc1afd58bb30f7cc779102321763c.tar.gz box64-eae608f35c1cc1afd58bb30f7cc779102321763c.zip | |
[ARM64_DYNAREC] Small improvment to VPBROADCAST[B/W] opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c index 91eefba3..05732a8b 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c @@ -1224,48 +1224,38 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip break; case 0x78: - INST_NAME("VBROADCASTB Gx, Ex"); + INST_NAME("VPBROADCASTB Gx, Ex"); nextop = F8; if(MODREG) { v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0); GETGX_empty(v0); VDUPQ_8(v0, v1, 0); - if(vex.l) { - GETGY_empty(v0, -1, -1, -1); - VDUPQ_8(v0, v1, 0); - } } else { GETGX_empty(v0); addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); VLDQ1R_8(v0, ed); - if(vex.l) { - GETGY_empty(v0, -1, -1, -1); - VLDQ1R_8(v0, ed); - } } - if(!vex.l) YMM0(gd); + if(vex.l) { + GETGY_empty(v1, -1, -1, -1); + VMOVQ(v0, v1); + } else YMM0(gd); break; case 0x79: - INST_NAME("VBROADCASTW Gx, Ex"); + INST_NAME("VPBROADCASTW Gx, Ex"); nextop = F8; if(MODREG) { v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0); GETGX_empty(v0); VDUPQ_16(v0, v1, 0); - if(vex.l) { - GETGY_empty(v0, -1, -1, -1); - VDUPQ_16(v0, v1, 0); - } } else { GETGX_empty(v0); addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); VLDQ1R_16(v0, ed); - if(vex.l) { - GETGY_empty(v0, -1, -1, -1); - VLDQ1R_16(v0, ed); - } } - if(!vex.l) YMM0(gd); + if(vex.l) { + GETGY_empty(v1, -1, -1, -1); + VMOVQ(v0, v1); + } else YMM0(gd); break; case 0x8C: |