qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 23/37] target/i386: reimplement 0x0f 0x70-0x77, add AVX


From: Richard Henderson
Subject: Re: [PATCH v2 23/37] target/i386: reimplement 0x0f 0x70-0x77, add AVX
Date: Sat, 24 Sep 2022 20:53:18 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0

On 9/20/22 17:24, Paolo Bonzini wrote:
+static TCGv_ptr make_imm8u_xmm_vec(uint8_t imm, int vec_len)
+{
+    MemOp ot = vec_len == 16 ? MO_128 : MO_256;
+    TCGv_i32 imm_v = tcg_constant8u_i32(imm);
+    TCGv_ptr ptr = tcg_temp_new_ptr();
+
+    tcg_gen_gvec_dup_imm(MO_64, offsetof(CPUX86State, xmm_t0) + xmm_offset(ot),
+                         vec_len, vec_len, 0);
+
+    tcg_gen_addi_ptr(ptr, cpu_env, offsetof(CPUX86State, xmm_t0));
+    tcg_gen_st_i32(imm_v, ptr, offsetof(ZMMReg, ZMM_L(0)));

tcg_gen_st_i32(imm, cpu_env, offsetof(CPUX86State, xmm_t0.ZMM_L(0)));

+static void gen_VZEROUPPER(DisasContext *s, CPUX86State *env, X86DecodedInsn 
*decode)
+{
+    int i;
+
+    for (i = 0; i < CPU_NB_REGS; i++) {
+        int offset = ZMM_OFFSET(i) + offsetof(ZMMReg, ZMM_X(0));
+        tcg_gen_gvec_mov(MO_64, offset, offset, 16, 32);
+    }
+}

This has the same big-endian problem as MOVQ, wrt which end is cleared?

Perhaps better for now as

  offset = ZMM_OFFSET(i) + offsetof(ZMMReg, ZMM_X(0));
  tcg_gen_gvec_dupi(MO_64, offset, 16, 16, 0)


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]