On 4/2/19 11:19 PM, Philippe Mathieu-Daudé wrote:
>> +static inline void gen_ilvev_b(CPUMIPSState *env, uint32_t wd,
>> + uint32_t ws, uint32_t wt)
>> +{
>> + TCGv_i64 t1 = tcg_temp_new_i64();
>> + TCGv_i64 t2 = tcg_temp_new_i64();
>> + const uint64_t mask = 0x00ff00ff00ff00ffULL;
>> +
>> + tcg_gen_andi_i64(t1, msa_wr_d[wt * 2], mask);
>> + tcg_gen_andi_i64(t2, msa_wr_d[ws * 2], mask);
>> + tcg_gen_shli_i64(t2, t2, 8);
>> + tcg_gen_or_i64(msa_wr_d[wd * 2], t1, t2);
>> +
>
> Richard, is it cheaper to use another register to keep the constant mask
> (here reused 4x)?
>
> Such:
>
> TCGv_i64 mask = tcg_const_i64(0x00ff00ff00ff00ffULL);
>
> tcg_gen_and_i64(t1, msa_wr_d[wt * 2], mask);
> tcg_gen_and_i64(t2, msa_wr_d[ws * 2], mask);
> tcg_gen_shli_i64(t2, t2, 8);
> tcg_gen_or_i64(msa_wr_d[wd * 2], t1, t2);
With the current state of the tcg optimizer, yes.
r~