mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
target-i386: Rename XMM_[BWLSDQ] helpers to ZMM_*
They are helpers for the ZMMReg fields, so name them accordingly. This is just a global search+replace, no other changes are being introduced. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
+12
-12
@@ -753,24 +753,24 @@ typedef struct BNDCSReg {
|
||||
} BNDCSReg;
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#define XMM_B(n) _b[63 - (n)]
|
||||
#define XMM_W(n) _w[31 - (n)]
|
||||
#define XMM_L(n) _l[15 - (n)]
|
||||
#define XMM_S(n) _s[15 - (n)]
|
||||
#define XMM_Q(n) _q[7 - (n)]
|
||||
#define XMM_D(n) _d[7 - (n)]
|
||||
#define ZMM_B(n) _b[63 - (n)]
|
||||
#define ZMM_W(n) _w[31 - (n)]
|
||||
#define ZMM_L(n) _l[15 - (n)]
|
||||
#define ZMM_S(n) _s[15 - (n)]
|
||||
#define ZMM_Q(n) _q[7 - (n)]
|
||||
#define ZMM_D(n) _d[7 - (n)]
|
||||
|
||||
#define MMX_B(n) _b[7 - (n)]
|
||||
#define MMX_W(n) _w[3 - (n)]
|
||||
#define MMX_L(n) _l[1 - (n)]
|
||||
#define MMX_S(n) _s[1 - (n)]
|
||||
#else
|
||||
#define XMM_B(n) _b[n]
|
||||
#define XMM_W(n) _w[n]
|
||||
#define XMM_L(n) _l[n]
|
||||
#define XMM_S(n) _s[n]
|
||||
#define XMM_Q(n) _q[n]
|
||||
#define XMM_D(n) _d[n]
|
||||
#define ZMM_B(n) _b[n]
|
||||
#define ZMM_W(n) _w[n]
|
||||
#define ZMM_L(n) _l[n]
|
||||
#define ZMM_S(n) _s[n]
|
||||
#define ZMM_Q(n) _q[n]
|
||||
#define ZMM_D(n) _d[n]
|
||||
|
||||
#define MMX_B(n) _b[n]
|
||||
#define MMX_W(n) _w[n]
|
||||
|
||||
@@ -1169,8 +1169,8 @@ static void do_fxsave(CPUX86State *env, target_ulong ptr, int data64,
|
||||
|| (env->hflags & HF_CPL_MASK)
|
||||
|| !(env->hflags & HF_LMA_MASK)) {
|
||||
for (i = 0; i < nb_xmm_regs; i++) {
|
||||
cpu_stq_data_ra(env, addr, env->xmm_regs[i].XMM_Q(0), retaddr);
|
||||
cpu_stq_data_ra(env, addr + 8, env->xmm_regs[i].XMM_Q(1), retaddr);
|
||||
cpu_stq_data_ra(env, addr, env->xmm_regs[i].ZMM_Q(0), retaddr);
|
||||
cpu_stq_data_ra(env, addr + 8, env->xmm_regs[i].ZMM_Q(1), retaddr);
|
||||
addr += 16;
|
||||
}
|
||||
}
|
||||
@@ -1226,8 +1226,8 @@ static void do_fxrstor(CPUX86State *env, target_ulong ptr, int data64,
|
||||
|| (env->hflags & HF_CPL_MASK)
|
||||
|| !(env->hflags & HF_LMA_MASK)) {
|
||||
for (i = 0; i < nb_xmm_regs; i++) {
|
||||
env->xmm_regs[i].XMM_Q(0) = cpu_ldq_data_ra(env, addr, retaddr);
|
||||
env->xmm_regs[i].XMM_Q(1) = cpu_ldq_data_ra(env, addr + 8, retaddr);
|
||||
env->xmm_regs[i].ZMM_Q(0) = cpu_ldq_data_ra(env, addr, retaddr);
|
||||
env->xmm_regs[i].ZMM_Q(1) = cpu_ldq_data_ra(env, addr + 8, retaddr);
|
||||
addr += 16;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,8 +61,8 @@ int x86_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n)
|
||||
n -= IDX_XMM_REGS;
|
||||
if (n < CPU_NB_REGS32 ||
|
||||
(TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK)) {
|
||||
stq_p(mem_buf, env->xmm_regs[n].XMM_Q(0));
|
||||
stq_p(mem_buf + 8, env->xmm_regs[n].XMM_Q(1));
|
||||
stq_p(mem_buf, env->xmm_regs[n].ZMM_Q(0));
|
||||
stq_p(mem_buf + 8, env->xmm_regs[n].ZMM_Q(1));
|
||||
return 16;
|
||||
}
|
||||
} else {
|
||||
@@ -170,8 +170,8 @@ int x86_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
||||
n -= IDX_XMM_REGS;
|
||||
if (n < CPU_NB_REGS32 ||
|
||||
(TARGET_LONG_BITS == 64 && env->hflags & HF_CS64_MASK)) {
|
||||
env->xmm_regs[n].XMM_Q(0) = ldq_p(mem_buf);
|
||||
env->xmm_regs[n].XMM_Q(1) = ldq_p(mem_buf + 8);
|
||||
env->xmm_regs[n].ZMM_Q(0) = ldq_p(mem_buf);
|
||||
env->xmm_regs[n].ZMM_Q(1) = ldq_p(mem_buf + 8);
|
||||
return 16;
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -535,10 +535,10 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
||||
for(i=0;i<nb;i++) {
|
||||
cpu_fprintf(f, "XMM%02d=%08x%08x%08x%08x",
|
||||
i,
|
||||
env->xmm_regs[i].XMM_L(3),
|
||||
env->xmm_regs[i].XMM_L(2),
|
||||
env->xmm_regs[i].XMM_L(1),
|
||||
env->xmm_regs[i].XMM_L(0));
|
||||
env->xmm_regs[i].ZMM_L(3),
|
||||
env->xmm_regs[i].ZMM_L(2),
|
||||
env->xmm_regs[i].ZMM_L(1),
|
||||
env->xmm_regs[i].ZMM_L(0));
|
||||
if ((i & 1) == 1)
|
||||
cpu_fprintf(f, "\n");
|
||||
else
|
||||
|
||||
+20
-20
@@ -1237,8 +1237,8 @@ static int kvm_put_fpu(X86CPU *cpu)
|
||||
}
|
||||
memcpy(fpu.fpr, env->fpregs, sizeof env->fpregs);
|
||||
for (i = 0; i < CPU_NB_REGS; i++) {
|
||||
stq_p(&fpu.xmm[i][0], env->xmm_regs[i].XMM_Q(0));
|
||||
stq_p(&fpu.xmm[i][8], env->xmm_regs[i].XMM_Q(1));
|
||||
stq_p(&fpu.xmm[i][0], env->xmm_regs[i].ZMM_Q(0));
|
||||
stq_p(&fpu.xmm[i][8], env->xmm_regs[i].ZMM_Q(1));
|
||||
}
|
||||
fpu.mxcsr = env->mxcsr;
|
||||
|
||||
@@ -1299,14 +1299,14 @@ static int kvm_put_xsave(X86CPU *cpu)
|
||||
ymmh = (uint8_t *)&xsave->region[XSAVE_YMMH_SPACE];
|
||||
zmmh = (uint8_t *)&xsave->region[XSAVE_ZMM_Hi256];
|
||||
for (i = 0; i < CPU_NB_REGS; i++, xmm += 16, ymmh += 16, zmmh += 32) {
|
||||
stq_p(xmm, env->xmm_regs[i].XMM_Q(0));
|
||||
stq_p(xmm+8, env->xmm_regs[i].XMM_Q(1));
|
||||
stq_p(ymmh, env->xmm_regs[i].XMM_Q(2));
|
||||
stq_p(ymmh+8, env->xmm_regs[i].XMM_Q(3));
|
||||
stq_p(zmmh, env->xmm_regs[i].XMM_Q(4));
|
||||
stq_p(zmmh+8, env->xmm_regs[i].XMM_Q(5));
|
||||
stq_p(zmmh+16, env->xmm_regs[i].XMM_Q(6));
|
||||
stq_p(zmmh+24, env->xmm_regs[i].XMM_Q(7));
|
||||
stq_p(xmm, env->xmm_regs[i].ZMM_Q(0));
|
||||
stq_p(xmm+8, env->xmm_regs[i].ZMM_Q(1));
|
||||
stq_p(ymmh, env->xmm_regs[i].ZMM_Q(2));
|
||||
stq_p(ymmh+8, env->xmm_regs[i].ZMM_Q(3));
|
||||
stq_p(zmmh, env->xmm_regs[i].ZMM_Q(4));
|
||||
stq_p(zmmh+8, env->xmm_regs[i].ZMM_Q(5));
|
||||
stq_p(zmmh+16, env->xmm_regs[i].ZMM_Q(6));
|
||||
stq_p(zmmh+24, env->xmm_regs[i].ZMM_Q(7));
|
||||
}
|
||||
|
||||
#ifdef TARGET_X86_64
|
||||
@@ -1665,8 +1665,8 @@ static int kvm_get_fpu(X86CPU *cpu)
|
||||
}
|
||||
memcpy(env->fpregs, fpu.fpr, sizeof env->fpregs);
|
||||
for (i = 0; i < CPU_NB_REGS; i++) {
|
||||
env->xmm_regs[i].XMM_Q(0) = ldq_p(&fpu.xmm[i][0]);
|
||||
env->xmm_regs[i].XMM_Q(1) = ldq_p(&fpu.xmm[i][8]);
|
||||
env->xmm_regs[i].ZMM_Q(0) = ldq_p(&fpu.xmm[i][0]);
|
||||
env->xmm_regs[i].ZMM_Q(1) = ldq_p(&fpu.xmm[i][8]);
|
||||
}
|
||||
env->mxcsr = fpu.mxcsr;
|
||||
|
||||
@@ -1717,14 +1717,14 @@ static int kvm_get_xsave(X86CPU *cpu)
|
||||
ymmh = (const uint8_t *)&xsave->region[XSAVE_YMMH_SPACE];
|
||||
zmmh = (const uint8_t *)&xsave->region[XSAVE_ZMM_Hi256];
|
||||
for (i = 0; i < CPU_NB_REGS; i++, xmm += 16, ymmh += 16, zmmh += 32) {
|
||||
env->xmm_regs[i].XMM_Q(0) = ldq_p(xmm);
|
||||
env->xmm_regs[i].XMM_Q(1) = ldq_p(xmm+8);
|
||||
env->xmm_regs[i].XMM_Q(2) = ldq_p(ymmh);
|
||||
env->xmm_regs[i].XMM_Q(3) = ldq_p(ymmh+8);
|
||||
env->xmm_regs[i].XMM_Q(4) = ldq_p(zmmh);
|
||||
env->xmm_regs[i].XMM_Q(5) = ldq_p(zmmh+8);
|
||||
env->xmm_regs[i].XMM_Q(6) = ldq_p(zmmh+16);
|
||||
env->xmm_regs[i].XMM_Q(7) = ldq_p(zmmh+24);
|
||||
env->xmm_regs[i].ZMM_Q(0) = ldq_p(xmm);
|
||||
env->xmm_regs[i].ZMM_Q(1) = ldq_p(xmm+8);
|
||||
env->xmm_regs[i].ZMM_Q(2) = ldq_p(ymmh);
|
||||
env->xmm_regs[i].ZMM_Q(3) = ldq_p(ymmh+8);
|
||||
env->xmm_regs[i].ZMM_Q(4) = ldq_p(zmmh);
|
||||
env->xmm_regs[i].ZMM_Q(5) = ldq_p(zmmh+8);
|
||||
env->xmm_regs[i].ZMM_Q(6) = ldq_p(zmmh+16);
|
||||
env->xmm_regs[i].ZMM_Q(7) = ldq_p(zmmh+24);
|
||||
}
|
||||
|
||||
#ifdef TARGET_X86_64
|
||||
|
||||
+17
-17
@@ -36,8 +36,8 @@ static const VMStateDescription vmstate_xmm_reg = {
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT64(XMM_Q(0), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(1), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(0), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(1), ZMMReg),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
@@ -52,8 +52,8 @@ static const VMStateDescription vmstate_ymmh_reg = {
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT64(XMM_Q(2), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(3), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(2), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(3), ZMMReg),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
@@ -67,10 +67,10 @@ static const VMStateDescription vmstate_zmmh_reg = {
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT64(XMM_Q(4), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(5), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(6), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(7), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(4), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(5), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(6), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(7), ZMMReg),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
@@ -85,14 +85,14 @@ static const VMStateDescription vmstate_hi16_zmm_reg = {
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT64(XMM_Q(0), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(1), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(2), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(3), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(4), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(5), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(6), ZMMReg),
|
||||
VMSTATE_UINT64(XMM_Q(7), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(0), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(1), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(2), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(3), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(4), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(5), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(6), ZMMReg),
|
||||
VMSTATE_UINT64(ZMM_Q(7), ZMMReg),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
@@ -787,7 +787,7 @@ static bool avx512_needed(void *opaque)
|
||||
}
|
||||
|
||||
for (i = 0; i < CPU_NB_REGS; i++) {
|
||||
#define ENV_XMM(reg, field) (env->xmm_regs[reg].XMM_Q(field))
|
||||
#define ENV_XMM(reg, field) (env->xmm_regs[reg].ZMM_Q(field))
|
||||
if (ENV_XMM(i, 4) || ENV_XMM(i, 6) ||
|
||||
ENV_XMM(i, 5) || ENV_XMM(i, 7)) {
|
||||
return true;
|
||||
|
||||
+145
-145
File diff suppressed because it is too large
Load Diff
+94
-94
@@ -2602,28 +2602,28 @@ static inline void gen_ldo_env_A0(DisasContext *s, int offset)
|
||||
{
|
||||
int mem_index = s->mem_index;
|
||||
tcg_gen_qemu_ld_i64(cpu_tmp1_i64, cpu_A0, mem_index, MO_LEQ);
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, XMM_Q(0)));
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(0)));
|
||||
tcg_gen_addi_tl(cpu_tmp0, cpu_A0, 8);
|
||||
tcg_gen_qemu_ld_i64(cpu_tmp1_i64, cpu_tmp0, mem_index, MO_LEQ);
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, XMM_Q(1)));
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(1)));
|
||||
}
|
||||
|
||||
static inline void gen_sto_env_A0(DisasContext *s, int offset)
|
||||
{
|
||||
int mem_index = s->mem_index;
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, XMM_Q(0)));
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(0)));
|
||||
tcg_gen_qemu_st_i64(cpu_tmp1_i64, cpu_A0, mem_index, MO_LEQ);
|
||||
tcg_gen_addi_tl(cpu_tmp0, cpu_A0, 8);
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, XMM_Q(1)));
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(1)));
|
||||
tcg_gen_qemu_st_i64(cpu_tmp1_i64, cpu_tmp0, mem_index, MO_LEQ);
|
||||
}
|
||||
|
||||
static inline void gen_op_movo(int d_offset, int s_offset)
|
||||
{
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, s_offset + offsetof(ZMMReg, XMM_Q(0)));
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, d_offset + offsetof(ZMMReg, XMM_Q(0)));
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, s_offset + offsetof(ZMMReg, XMM_Q(1)));
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, d_offset + offsetof(ZMMReg, XMM_Q(1)));
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, s_offset + offsetof(ZMMReg, ZMM_Q(0)));
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, d_offset + offsetof(ZMMReg, ZMM_Q(0)));
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env, s_offset + offsetof(ZMMReg, ZMM_Q(1)));
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env, d_offset + offsetof(ZMMReg, ZMM_Q(1)));
|
||||
}
|
||||
|
||||
static inline void gen_op_movq(int d_offset, int s_offset)
|
||||
@@ -3074,10 +3074,10 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
if (b1 & 1) {
|
||||
gen_stq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
} else {
|
||||
tcg_gen_ld32u_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(0)));
|
||||
xmm_regs[reg].ZMM_L(0)));
|
||||
gen_op_st_v(s, MO_32, cpu_T[0], cpu_A0);
|
||||
}
|
||||
break;
|
||||
@@ -3144,29 +3144,29 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_op_ld_v(s, MO_32, cpu_T[0], cpu_A0);
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)));
|
||||
tcg_gen_movi_tl(cpu_T[0], 0);
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].XMM_L(1)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].XMM_L(2)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].XMM_L(3)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].ZMM_L(1)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].ZMM_L(2)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].ZMM_L(3)));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_L(0)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_L(0)));
|
||||
}
|
||||
break;
|
||||
case 0x310: /* movsd xmm, ea */
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
tcg_gen_movi_tl(cpu_T[0], 0);
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].XMM_L(2)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].XMM_L(3)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].ZMM_L(2)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].ZMM_L(3)));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_Q(0)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(0)));
|
||||
}
|
||||
break;
|
||||
case 0x012: /* movlps */
|
||||
@@ -3174,12 +3174,12 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
} else {
|
||||
/* movhlps */
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_Q(1)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(1)));
|
||||
}
|
||||
break;
|
||||
case 0x212: /* movsldup */
|
||||
@@ -3188,40 +3188,40 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
gen_ldo_env_A0(s, offsetof(CPUX86State, xmm_regs[reg]));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_L(0)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(2)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_L(2)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_L(0)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(2)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_L(2)));
|
||||
}
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(1)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(3)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_L(2)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(1)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(3)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_L(2)));
|
||||
break;
|
||||
case 0x312: /* movddup */
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_Q(0)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(0)));
|
||||
}
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(1)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(1)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)));
|
||||
break;
|
||||
case 0x016: /* movhps */
|
||||
case 0x116: /* movhpd */
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(1)));
|
||||
xmm_regs[reg].ZMM_Q(1)));
|
||||
} else {
|
||||
/* movlhps */
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(1)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_Q(0)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(1)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(0)));
|
||||
}
|
||||
break;
|
||||
case 0x216: /* movshdup */
|
||||
@@ -3230,15 +3230,15 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
gen_ldo_env_A0(s, offsetof(CPUX86State, xmm_regs[reg]));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(1)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_L(1)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(3)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_L(3)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(1)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_L(1)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(3)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_L(3)));
|
||||
}
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_L(1)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].XMM_L(2)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_L(3)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_L(1)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[reg].ZMM_L(2)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_L(3)));
|
||||
break;
|
||||
case 0x178:
|
||||
case 0x378:
|
||||
@@ -3279,13 +3279,13 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
#ifdef TARGET_X86_64
|
||||
if (s->dflag == MO_64) {
|
||||
tcg_gen_ld_i64(cpu_T[0], cpu_env,
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)));
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)));
|
||||
gen_ldst_modrm(env, s, modrm, MO_64, OR_TMP0, 1);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
tcg_gen_ld32u_tl(cpu_T[0], cpu_env,
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)));
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)));
|
||||
gen_ldst_modrm(env, s, modrm, MO_32, OR_TMP0, 1);
|
||||
}
|
||||
break;
|
||||
@@ -3293,13 +3293,13 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_Q(0)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(0)));
|
||||
}
|
||||
gen_op_movq_env_0(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(1)));
|
||||
gen_op_movq_env_0(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(1)));
|
||||
break;
|
||||
case 0x7f: /* movq ea, mm */
|
||||
if (mod != 3) {
|
||||
@@ -3329,23 +3329,23 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
case 0x211: /* movss ea, xmm */
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
tcg_gen_ld32u_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)));
|
||||
tcg_gen_ld32u_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)));
|
||||
gen_op_st_v(s, MO_32, cpu_T[0], cpu_A0);
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[rm].XMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_L(0)));
|
||||
gen_op_movl(offsetof(CPUX86State,xmm_regs[rm].ZMM_L(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_L(0)));
|
||||
}
|
||||
break;
|
||||
case 0x311: /* movsd ea, xmm */
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_stq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[rm].XMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)));
|
||||
}
|
||||
break;
|
||||
case 0x013: /* movlps */
|
||||
@@ -3353,7 +3353,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_stq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
} else {
|
||||
goto illegal_op;
|
||||
}
|
||||
@@ -3363,7 +3363,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_stq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(1)));
|
||||
xmm_regs[reg].ZMM_Q(1)));
|
||||
} else {
|
||||
goto illegal_op;
|
||||
}
|
||||
@@ -3380,9 +3380,9 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
val = cpu_ldub_code(env, s->pc++);
|
||||
if (is_xmm) {
|
||||
tcg_gen_movi_tl(cpu_T[0], val);
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_t0.XMM_L(0)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_t0.ZMM_L(0)));
|
||||
tcg_gen_movi_tl(cpu_T[0], 0);
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_t0.XMM_L(1)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_t0.ZMM_L(1)));
|
||||
op1_offset = offsetof(CPUX86State,xmm_t0);
|
||||
} else {
|
||||
tcg_gen_movi_tl(cpu_T[0], val);
|
||||
@@ -3503,10 +3503,10 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
if ((b >> 8) & 1) {
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State, xmm_t0.XMM_Q(0)));
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State, xmm_t0.ZMM_Q(0)));
|
||||
} else {
|
||||
gen_op_ld_v(s, MO_32, cpu_T[0], cpu_A0);
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_t0.XMM_L(0)));
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,xmm_t0.ZMM_L(0)));
|
||||
}
|
||||
op2_offset = offsetof(CPUX86State,xmm_t0);
|
||||
} else {
|
||||
@@ -3538,7 +3538,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (b1) {
|
||||
val &= 7;
|
||||
tcg_gen_st16_tl(cpu_T[0], cpu_env,
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_W(val)));
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_W(val)));
|
||||
} else {
|
||||
val &= 3;
|
||||
tcg_gen_st16_tl(cpu_T[0], cpu_env,
|
||||
@@ -3555,7 +3555,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
val &= 7;
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
tcg_gen_ld16u_tl(cpu_T[0], cpu_env,
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_W(val)));
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_W(val)));
|
||||
} else {
|
||||
val &= 3;
|
||||
rm = (modrm & 7);
|
||||
@@ -3569,26 +3569,26 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (mod != 3) {
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
gen_stq_env_A0(s, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(0)));
|
||||
xmm_regs[reg].ZMM_Q(0)));
|
||||
} else {
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[rm].XMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)));
|
||||
gen_op_movq_env_0(offsetof(CPUX86State,xmm_regs[rm].XMM_Q(1)));
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(0)),
|
||||
offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)));
|
||||
gen_op_movq_env_0(offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(1)));
|
||||
}
|
||||
break;
|
||||
case 0x2d6: /* movq2dq */
|
||||
gen_helper_enter_mmx(cpu_env);
|
||||
rm = (modrm & 7);
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(0)),
|
||||
gen_op_movq(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(0)),
|
||||
offsetof(CPUX86State,fpregs[rm].mmx));
|
||||
gen_op_movq_env_0(offsetof(CPUX86State,xmm_regs[reg].XMM_Q(1)));
|
||||
gen_op_movq_env_0(offsetof(CPUX86State,xmm_regs[reg].ZMM_Q(1)));
|
||||
break;
|
||||
case 0x3d6: /* movdq2q */
|
||||
gen_helper_enter_mmx(cpu_env);
|
||||
rm = (modrm & 7) | REX_B(s);
|
||||
gen_op_movq(offsetof(CPUX86State,fpregs[reg & 7].mmx),
|
||||
offsetof(CPUX86State,xmm_regs[rm].XMM_Q(0)));
|
||||
offsetof(CPUX86State,xmm_regs[rm].ZMM_Q(0)));
|
||||
break;
|
||||
case 0xd7: /* pmovmskb */
|
||||
case 0x1d7:
|
||||
@@ -3640,20 +3640,20 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
case 0x23: case 0x33: /* pmovsxwd, pmovzxwd */
|
||||
case 0x25: case 0x35: /* pmovsxdq, pmovzxdq */
|
||||
gen_ldq_env_A0(s, op2_offset +
|
||||
offsetof(ZMMReg, XMM_Q(0)));
|
||||
offsetof(ZMMReg, ZMM_Q(0)));
|
||||
break;
|
||||
case 0x21: case 0x31: /* pmovsxbd, pmovzxbd */
|
||||
case 0x24: case 0x34: /* pmovsxwq, pmovzxwq */
|
||||
tcg_gen_qemu_ld_i32(cpu_tmp2_i32, cpu_A0,
|
||||
s->mem_index, MO_LEUL);
|
||||
tcg_gen_st_i32(cpu_tmp2_i32, cpu_env, op2_offset +
|
||||
offsetof(ZMMReg, XMM_L(0)));
|
||||
offsetof(ZMMReg, ZMM_L(0)));
|
||||
break;
|
||||
case 0x22: case 0x32: /* pmovsxbq, pmovzxbq */
|
||||
tcg_gen_qemu_ld_tl(cpu_tmp0, cpu_A0,
|
||||
s->mem_index, MO_LEUW);
|
||||
tcg_gen_st16_tl(cpu_tmp0, cpu_env, op2_offset +
|
||||
offsetof(ZMMReg, XMM_W(0)));
|
||||
offsetof(ZMMReg, ZMM_W(0)));
|
||||
break;
|
||||
case 0x2a: /* movntqda */
|
||||
gen_ldo_env_A0(s, op1_offset);
|
||||
@@ -4078,7 +4078,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
switch (b) {
|
||||
case 0x14: /* pextrb */
|
||||
tcg_gen_ld8u_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_B(val & 15)));
|
||||
xmm_regs[reg].ZMM_B(val & 15)));
|
||||
if (mod == 3) {
|
||||
gen_op_mov_reg_v(ot, rm, cpu_T[0]);
|
||||
} else {
|
||||
@@ -4088,7 +4088,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
break;
|
||||
case 0x15: /* pextrw */
|
||||
tcg_gen_ld16u_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_W(val & 7)));
|
||||
xmm_regs[reg].ZMM_W(val & 7)));
|
||||
if (mod == 3) {
|
||||
gen_op_mov_reg_v(ot, rm, cpu_T[0]);
|
||||
} else {
|
||||
@@ -4100,7 +4100,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
if (ot == MO_32) { /* pextrd */
|
||||
tcg_gen_ld_i32(cpu_tmp2_i32, cpu_env,
|
||||
offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(val & 3)));
|
||||
xmm_regs[reg].ZMM_L(val & 3)));
|
||||
if (mod == 3) {
|
||||
tcg_gen_extu_i32_tl(cpu_regs[rm], cpu_tmp2_i32);
|
||||
} else {
|
||||
@@ -4111,7 +4111,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
#ifdef TARGET_X86_64
|
||||
tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env,
|
||||
offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(val & 1)));
|
||||
xmm_regs[reg].ZMM_Q(val & 1)));
|
||||
if (mod == 3) {
|
||||
tcg_gen_mov_i64(cpu_regs[rm], cpu_tmp1_i64);
|
||||
} else {
|
||||
@@ -4125,7 +4125,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
break;
|
||||
case 0x17: /* extractps */
|
||||
tcg_gen_ld32u_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(val & 3)));
|
||||
xmm_regs[reg].ZMM_L(val & 3)));
|
||||
if (mod == 3) {
|
||||
gen_op_mov_reg_v(ot, rm, cpu_T[0]);
|
||||
} else {
|
||||
@@ -4141,36 +4141,36 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
s->mem_index, MO_UB);
|
||||
}
|
||||
tcg_gen_st8_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_B(val & 15)));
|
||||
xmm_regs[reg].ZMM_B(val & 15)));
|
||||
break;
|
||||
case 0x21: /* insertps */
|
||||
if (mod == 3) {
|
||||
tcg_gen_ld_i32(cpu_tmp2_i32, cpu_env,
|
||||
offsetof(CPUX86State,xmm_regs[rm]
|
||||
.XMM_L((val >> 6) & 3)));
|
||||
.ZMM_L((val >> 6) & 3)));
|
||||
} else {
|
||||
tcg_gen_qemu_ld_i32(cpu_tmp2_i32, cpu_A0,
|
||||
s->mem_index, MO_LEUL);
|
||||
}
|
||||
tcg_gen_st_i32(cpu_tmp2_i32, cpu_env,
|
||||
offsetof(CPUX86State,xmm_regs[reg]
|
||||
.XMM_L((val >> 4) & 3)));
|
||||
.ZMM_L((val >> 4) & 3)));
|
||||
if ((val >> 0) & 1)
|
||||
tcg_gen_st_i32(tcg_const_i32(0 /*float32_zero*/),
|
||||
cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(0)));
|
||||
xmm_regs[reg].ZMM_L(0)));
|
||||
if ((val >> 1) & 1)
|
||||
tcg_gen_st_i32(tcg_const_i32(0 /*float32_zero*/),
|
||||
cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(1)));
|
||||
xmm_regs[reg].ZMM_L(1)));
|
||||
if ((val >> 2) & 1)
|
||||
tcg_gen_st_i32(tcg_const_i32(0 /*float32_zero*/),
|
||||
cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(2)));
|
||||
xmm_regs[reg].ZMM_L(2)));
|
||||
if ((val >> 3) & 1)
|
||||
tcg_gen_st_i32(tcg_const_i32(0 /*float32_zero*/),
|
||||
cpu_env, offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(3)));
|
||||
xmm_regs[reg].ZMM_L(3)));
|
||||
break;
|
||||
case 0x22:
|
||||
if (ot == MO_32) { /* pinsrd */
|
||||
@@ -4182,7 +4182,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
}
|
||||
tcg_gen_st_i32(cpu_tmp2_i32, cpu_env,
|
||||
offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_L(val & 3)));
|
||||
xmm_regs[reg].ZMM_L(val & 3)));
|
||||
} else { /* pinsrq */
|
||||
#ifdef TARGET_X86_64
|
||||
if (mod == 3) {
|
||||
@@ -4193,7 +4193,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
}
|
||||
tcg_gen_st_i64(cpu_tmp1_i64, cpu_env,
|
||||
offsetof(CPUX86State,
|
||||
xmm_regs[reg].XMM_Q(val & 1)));
|
||||
xmm_regs[reg].ZMM_Q(val & 1)));
|
||||
#else
|
||||
goto illegal_op;
|
||||
#endif
|
||||
@@ -4318,11 +4318,11 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
/* 32 bit access */
|
||||
gen_op_ld_v(s, MO_32, cpu_T[0], cpu_A0);
|
||||
tcg_gen_st32_tl(cpu_T[0], cpu_env,
|
||||
offsetof(CPUX86State,xmm_t0.XMM_L(0)));
|
||||
offsetof(CPUX86State,xmm_t0.ZMM_L(0)));
|
||||
break;
|
||||
case 3:
|
||||
/* 64 bit access */
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State, xmm_t0.XMM_D(0)));
|
||||
gen_ldq_env_A0(s, offsetof(CPUX86State, xmm_t0.ZMM_D(0)));
|
||||
break;
|
||||
default:
|
||||
/* 128 bit access */
|
||||
|
||||
Reference in New Issue
Block a user