diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-21 20:48:14 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-21 20:48:14 +0100 |
| commit | 79ca411d6a5d35e66842b3886d2c6077ef85b58a (patch) | |
| tree | a65ea119fb4ab8cd28459116dfe41ba4b6c7baad /src | |
| parent | 9cdf1f9711502158b8db8be40d13cc41451a7242 (diff) | |
| download | box64-79ca411d6a5d35e66842b3886d2c6077ef85b58a.tar.gz box64-79ca411d6a5d35e66842b3886d2c6077ef85b58a.zip | |
[DYNAREC] Added 0F 57 opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index edb99cb6..9ce1951f 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -27,21 +27,23 @@ #define GETGX(a) \ gd = ((nextop&0x38)>>3)+(rex.r<<3); \ a = sse_get_reg(dyn, ninst, x1, gd) -#define GETEX(a, D) \ - if(MODREG) { \ - a = sse_get_reg(dyn, ninst, x1, nextop&7+(rex.b<<3)); \ - } else { \ - addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0); \ - a = fpu_get_scratch_quad(dyn); \ - VLD1Q_64(a, ed); \ + +#define GETEX(a, D) \ + if(MODREG) { \ + a = sse_get_reg(dyn, ninst, x1, nextop&7+(rex.b<<3)); \ + } else { \ + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<4, 15, rex, 0, 0); \ + a = fpu_get_scratch(dyn); \ + VLDR128_U12(a, ed, fixedaddress); \ } -#define GETGM(a) \ + +#define GETGM(a) \ gd = (nextop&0x38)>>3; \ a = mmx_get_reg(dyn, ninst, x1, gd) -#define GETEM(a) \ - if(MODREG) { \ +#define GETEM(a, D) \ + if(MODREG) { \ a = mmx_get_reg(dyn, ninst, x1, nextop&7); \ - } else { \ + } else { \ addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0); \ a = fpu_get_scratch_double(dyn); \ VLD1_64(a, ed); \ @@ -242,6 +244,14 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GOCOND(0x90, "SET", "Eb"); #undef GO + case 0x57: + INST_NAME("XORPS Gx, Ex"); + nextop = F8; + GETEX(q0, 0); + GETGX(v0); + VEORQ(v0, v0, q0); + break; + case 0xA2: INST_NAME("CPUID"); MOVx_REG(x1, xRAX); |