target/arm: Use tcg_gen_rotri_i32 for gen_swap_half

Rotate is the more compact and obvious way to swap 16-bit
elements of a 32-bit word.

Backports commit adefba76e8bf10dfb342094d2f5debfeedb1a74d from qemu
This commit is contained in:
Richard Henderson 2019-11-18 20:27:09 -05:00 committed by Lioncash
parent 751ab7b24b
commit 4a1cc16eef
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -457,11 +457,7 @@ static TCGv_i64 gen_muls_i64_i32(DisasContext *s, TCGv_i32 a, TCGv_i32 b)
static void gen_swap_half(DisasContext *s, TCGv_i32 var) static void gen_swap_half(DisasContext *s, TCGv_i32 var)
{ {
TCGContext *tcg_ctx = s->uc->tcg_ctx; TCGContext *tcg_ctx = s->uc->tcg_ctx;
TCGv_i32 tmp = tcg_temp_new_i32(tcg_ctx); tcg_gen_rotri_i32(tcg_ctx, var, var, 16);
tcg_gen_shri_i32(tcg_ctx, tmp, var, 16);
tcg_gen_shli_i32(tcg_ctx, var, var, 16);
tcg_gen_or_i32(tcg_ctx, var, var, tmp);
tcg_temp_free_i32(tcg_ctx, tmp);
} }
/* Dual 16-bit add. Result placed in t0 and t1 is marked as dead. /* Dual 16-bit add. Result placed in t0 and t1 is marked as dead.