target/ppc: convert xxspltib to vector operations

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
Message-Id: <20190215100058.20015-7-mark.cave-ayland@ilande.co.uk>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Richard Henderson 2019-02-15 10:00:47 +00:00 committed by David Gibson
parent 7b8fe477e1
commit cf95e701fe
1 changed files with 5 additions and 8 deletions

View File

@ -1397,9 +1397,10 @@ static void gen_xxspltw(DisasContext *ctx)
static void gen_xxspltib(DisasContext *ctx)
{
unsigned char uim8 = IMM8(ctx->opcode);
TCGv_i64 vsr;
if (xS(ctx->opcode) < 32) {
uint8_t uim8 = IMM8(ctx->opcode);
int rt = xT(ctx->opcode);
if (rt < 32) {
if (unlikely(!ctx->altivec_enabled)) {
gen_exception(ctx, POWERPC_EXCP_VPU);
return;
@ -1410,11 +1411,7 @@ static void gen_xxspltib(DisasContext *ctx)
return;
}
}
vsr = tcg_temp_new_i64();
tcg_gen_movi_i64(vsr, pattern(uim8));
set_cpu_vsrh(xT(ctx->opcode), vsr);
set_cpu_vsrl(xT(ctx->opcode), vsr);
tcg_temp_free_i64(vsr);
tcg_gen_gvec_dup8i(vsr_full_offset(rt), 16, 16, uim8);
}
static void gen_xxsldwi(DisasContext *ctx)