aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2022-08-26 23:15:33 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2022-09-01 20:16:33 +0200
commit3dd116e32e8624dcfa966570a7806e92e19dc380 (patch)
tree1a9264d3c5c35f7ebd42ba11d5e8ed41df9ae769
parent91117bc546b10aeefd6d78502d82df5729f5f780 (diff)
downloadqemu-3dd116e32e8624dcfa966570a7806e92e19dc380.zip
qemu-3dd116e32e8624dcfa966570a7806e92e19dc380.tar.gz
qemu-3dd116e32e8624dcfa966570a7806e92e19dc380.tar.bz2
target/i386: do not use MOVL to move data between SSE registers
Write down explicitly the load/store sequence. Extracted from a patch by Paul Brook <paul@nowt.org>. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--target/i386/tcg/translate.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
index b7972f0..3237c1d 100644
--- a/target/i386/tcg/translate.c
+++ b/target/i386/tcg/translate.c
@@ -3295,8 +3295,10 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
offsetof(CPUX86State, xmm_regs[reg].ZMM_L(3)));
} else {
rm = (modrm & 7) | REX_B(s);
- gen_op_movl(s, offsetof(CPUX86State, xmm_regs[reg].ZMM_L(0)),
- offsetof(CPUX86State,xmm_regs[rm].ZMM_L(0)));
+ tcg_gen_ld_i32(s->tmp2_i32, cpu_env,
+ offsetof(CPUX86State, xmm_regs[rm].ZMM_L(0)));
+ tcg_gen_st_i32(s->tmp2_i32, cpu_env,
+ offsetof(CPUX86State, xmm_regs[reg].ZMM_L(0)));
}
break;
case 0x310: /* movsd xmm, ea */