@@ -3842,14 +3842,15 @@ static void gen_sse(DisasContext *s, int b, target_ulong pc_start, int rex_r)
(s->mem_index >> 2) - 1);
} else { /* pextrq */
#ifdef TARGET_X86_64
- tcg_gen_ld_i64(cpu_tmp1_i64, cpu_env,
- offsetof(CPUX86State,
- xmm_regs[reg].XMM_Q(val & 1)));
- if (mod == 3)
- gen_op_mov_reg_v(ot, rm, cpu_tmp1_i64);
- else
- tcg_gen_qemu_st64(cpu_tmp1_i64, cpu_A0,
- (s->mem_index >> 2) - 1);
+ tcg_gen_ld_tl(cpu_T[0], cpu_env,
+ offsetof(CPUX86State,
+ xmm_regs[reg].XMM_Q(val & 1)));
+ if (mod == 3) {
+ gen_op_mov_reg_v(ot, rm, cpu_T[0]);
+ } else {
+ tcg_gen_qemu_st64_tl(cpu_T[0], cpu_A0,
+ (s->mem_index >> 2) - 1);
+ }
#else
goto illegal_op;
#endif
gen_op_mov_reg_v() wants a TCGv, so use cpu_T[0] like pextrd does. Signed-off-by: Andreas Färber <andreas.faerber@web.de> --- target-i386/translate.c | 17 +++++++++-------- 1 files changed, 9 insertions(+), 8 deletions(-)