On 11/19/21 7:13 AM, Song Gao wrote:
+static void gen_mulh_w(TCGv dest, TCGv src1, TCGv src2) +{ + tcg_gen_mul_i64(dest, src1, src2); + tcg_gen_sari_i64(dest, dest, 32); +} + +static void gen_mulh_wu(TCGv dest, TCGv src1, TCGv src2) +{ + tcg_gen_mul_i64(dest, src1, src2); + tcg_gen_sari_i64(dest, dest, 32); +}
These two are the same; you only need one of them. The difference between the two insns is in the EXT_{SIGN,ZERO} parameter that precedes these callbacks.
+static void gen_alsl_w(TCGv dest, TCGv src1, TCGv src2, + TCGv temp, target_long sa) +{ + tcg_gen_shli_tl(temp, src1, sa); + tcg_gen_add_tl(dest, temp, src2); +} + +static void gen_alsl_wu(TCGv dest, TCGv src1, TCGv src2, + TCGv temp, target_long sa) +{ + tcg_gen_shli_tl(temp, src1, sa); + tcg_gen_add_tl(dest, temp, src2); +} + +static void gen_alsl_d(TCGv dest, TCGv src1, TCGv src2, + TCGv temp, target_long sa) +{ + tcg_gen_shli_tl(temp, src1, sa); + tcg_gen_add_tl(dest, temp, src2); +}
Likewise, these are identical. r~