diff options
Diffstat (limited to 'src/dynarec/arm64/dynarec_arm64_helper.h')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 8fd918d6..45296269 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -490,8 +490,13 @@ GETEX_Y(ex, 0, D); \ GETGX_empty(gx) +// Get empty GX, and non-writen EX +#define GETGX_empty_EX(gx, ex, D) \ + GETEX_Y(ex, 0, D); \ + GETGX_empty(gx) + // Get empty GX, and non-writen VX -#define GETGX_empty_VX(gx, vx, D) \ +#define GETGX_empty_VX(gx, vx) \ GETVX(vx, 0); \ GETGX_empty(gx) @@ -501,6 +506,11 @@ GETEX_Y(ex, 1, D); \ GETGX(gx, 0) +#define GETGXVXEX_empty(gx, vx, ex, D) \ + GETVX(vx, 0); \ + GETGX(gx, 0); \ + GETEX_empty_Y(ex, D); + // Get empty GY, and non-writen VY and EY #define GETGY_empty_VYEY(gy, vy, ey) \ vy = ymm_get_reg(dyn, ninst, x1, vex.v, 0, gd, (MODREG)?((nextop&7)+(rex.b<<3)):-1, -1); \ @@ -554,6 +564,17 @@ a = fpu_get_scratch(dyn, ninst); \ VLD128(a, ed, fixedaddress); \ } +// Get EX as a quad, (x3 is used) +#define GETEX_empty_Y(a, D) \ + if(MODREG) { \ + a = sse_get_reg_empty(dyn, ninst, x3, (nextop&7)+(rex.b<<3)); \ + } else { \ + WILLWRITE2(); \ + addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0xffe<<4, 15, rex, NULL, 0, D); \ + unscaled = 0; \ + a = fpu_get_scratch(dyn, ninst); \ + VLD128(a, ed, fixedaddress); \ + } // Get EX as a quad, (x1 is used) #define GETEX(a, w, D) \ |