diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2022-08-26 23:15:33 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2022-09-01 20:16:33 +0200 |
commit | 3dd116e32e8624dcfa966570a7806e92e19dc380 (patch) | |
tree | 1a9264d3c5c35f7ebd42ba11d5e8ed41df9ae769 | |
parent | 91117bc546b10aeefd6d78502d82df5729f5f780 (diff) | |
download | qemu-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.c | 6 |
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 */ |