On 4/3/19 5:28 AM, Aleksandar Markovic wrote: >> + tcg_gen_andi_i64(t1, msa_wr_d[wt * 2], mask); >> + tcg_gen_deposit_i64(msa_wr_d[wd * 2], t1, msa_wr_d[ws * 2], 32, 32); >> + >> + tcg_gen_andi_i64(t1, msa_wr_d[wt * 2 + 1], mask); >> + tcg_gen_deposit_i64(msa_wr_d[wd * 2 + 1], t1, msa_wr_d[ws * 2 + 1], 32, >> 32); >> + >> + tcg_temp_free_i64(t1); >> +} >> + > > This can be further optimized this way: (doublecheck the accuracy, writing > from > home) > > gen_ilvev_w(CPUMIPSState *env, uint32_t wd, > uint32_t ws, uint32_t wt) > { > tcg_gen_shli_i64(msa_wr_d[wd * 2], msa_wr_d[ws * 2], 32); > tcg_gen_deposit_i64(msa_wr_d[wd * 2], t1, msa_wr_d[wt * 2], 0, 32); >
No, the shift can be performed by the deposit. See my other reply in this thread. r~