tcg: Use deposit and extract2 in tcg_gen_shifti_i64

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2019-02-25 10:58:15 -08:00
parent fce1296f13
commit 02616bad6f
1 changed files with 24 additions and 23 deletions

View File

@ -1355,31 +1355,32 @@ static inline void tcg_gen_shifti_i64(TCGv_i64 ret, TCGv_i64 arg1,
tcg_gen_shli_i32(TCGV_HIGH(ret), TCGV_LOW(arg1), c); tcg_gen_shli_i32(TCGV_HIGH(ret), TCGV_LOW(arg1), c);
tcg_gen_movi_i32(TCGV_LOW(ret), 0); tcg_gen_movi_i32(TCGV_LOW(ret), 0);
} }
} else { } else if (right) {
TCGv_i32 t0, t1; if (TCG_TARGET_HAS_extract2_i32) {
tcg_gen_extract2_i32(TCGV_LOW(ret),
t0 = tcg_temp_new_i32(); TCGV_LOW(arg1), TCGV_HIGH(arg1), c);
t1 = tcg_temp_new_i32();
if (right) {
tcg_gen_shli_i32(t0, TCGV_HIGH(arg1), 32 - c);
if (arith) {
tcg_gen_sari_i32(t1, TCGV_HIGH(arg1), c);
} else {
tcg_gen_shri_i32(t1, TCGV_HIGH(arg1), c);
}
tcg_gen_shri_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c);
tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(ret), t0);
tcg_gen_mov_i32(TCGV_HIGH(ret), t1);
} else { } else {
tcg_gen_shri_i32(t0, TCGV_LOW(arg1), 32 - c); tcg_gen_shri_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c);
/* Note: ret can be the same as arg1, so we use t1 */ tcg_gen_deposit_i32(TCGV_LOW(ret), TCGV_LOW(ret),
tcg_gen_shli_i32(t1, TCGV_LOW(arg1), c); TCGV_HIGH(arg1), 32 - c, c);
tcg_gen_shli_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c);
tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), t0);
tcg_gen_mov_i32(TCGV_LOW(ret), t1);
} }
tcg_temp_free_i32(t0); if (arith) {
tcg_temp_free_i32(t1); tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c);
} else {
tcg_gen_shri_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c);
}
} else {
if (TCG_TARGET_HAS_extract2_i32) {
tcg_gen_extract2_i32(TCGV_HIGH(ret),
TCGV_LOW(arg1), TCGV_HIGH(arg1), 32 - c);
} else {
TCGv_i32 t0 = tcg_temp_new_i32();
tcg_gen_shri_i32(t0, TCGV_LOW(arg1), 32 - c);
tcg_gen_deposit_i32(TCGV_HIGH(ret), t0,
TCGV_HIGH(arg1), c, 32 - c);
tcg_temp_free_i32(t0);
}
tcg_gen_shli_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c);
} }
} }