On 05/12/2017 04:38 PM, Philippe Mathieu-Daudé wrote:
> Patch created mechanically using Coccinelle script via:
>
> $ spatch --macro-file scripts/cocci-macro-file.h --in-place \
> --sp-file scripts/coccinelle/tcg_gen_extract.cocci --dir target
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> target/alpha/translate.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/target/alpha/translate.c b/target/alpha/translate.c
> index df5d695344..531af4f5b8 100644
> --- a/target/alpha/translate.c
> +++ b/target/alpha/translate.c
> @@ -747,9 +747,8 @@ static void gen_cvtlq(TCGv vc, TCGv vb)
> /* The arithmetic right shift here, plus the sign-extended mask below
> yields a sign-extended result without an explicit ext32s_i64. */
> tcg_gen_sari_i64(tmp, vb, 32);
> - tcg_gen_shri_i64(vc, vb, 29);
> + tcg_gen_extract_i64(vc, vb, 29, 30);
> tcg_gen_andi_i64(tmp, tmp, (int32_t)0xc0000000);
> - tcg_gen_andi_i64(vc, vc, 0x3fffffff);
> tcg_gen_or_i64(vc, vc, tmp);
While this is accurate, looking at the broader context I think it would be
better to use a deposit operation for this case.
tcg_gen_shri_i64(tmp, vb, 29);
tcg_gen_sari_i64(vc, vb, 32);
tcg_gen_deposit_i64(vc, vc, tmp, 0, 30);
r~