mirror of https://github.com/xemu-project/xemu.git
target/ppc: Move xxsel to decodetree
Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br> Message-Id: <20220225210936.1749575-30-matheus.ferst@eldorado.org.br> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
28347fe2a7
commit
43d55fc23d
|
@ -148,12 +148,16 @@
|
|||
%xx_xt 0:1 21:5
|
||||
%xx_xb 1:1 11:5
|
||||
%xx_xa 2:1 16:5
|
||||
%xx_xc 3:1 6:5
|
||||
&XX2 xt xb uim:uint8_t
|
||||
@XX2 ...... ..... ... uim:2 ..... ......... .. &XX2 xt=%xx_xt xb=%xx_xb
|
||||
|
||||
&XX3 xt xa xb
|
||||
@XX3 ...... ..... ..... ..... ........ ... &XX3 xt=%xx_xt xa=%xx_xa xb=%xx_xb
|
||||
|
||||
&XX4 xt xa xb xc
|
||||
@XX4 ...... ..... ..... ..... ..... .. .... &XX4 xt=%xx_xt xa=%xx_xa xb=%xx_xb xc=%xx_xc
|
||||
|
||||
&Z22_bf_fra bf fra dm
|
||||
@Z22_bf_fra ...... bf:3 .. fra:5 dm:6 ......... . &Z22_bf_fra
|
||||
|
||||
|
@ -600,6 +604,8 @@ STXVPX 011111 ..... ..... ..... 0111001101 - @X_TSXP
|
|||
XXSPLTIB 111100 ..... 00 ........ 0101101000 . @X_imm8
|
||||
XXSPLTW 111100 ..... ---.. ..... 010100100 . . @XX2
|
||||
|
||||
XXSEL 111100 ..... ..... ..... ..... 11 .... @XX4
|
||||
|
||||
## VSX Vector Load Special Value Instruction
|
||||
|
||||
LXVKQ 111100 ..... 11111 ..... 0101101000 . @X_uim5
|
||||
|
|
|
@ -44,15 +44,15 @@
|
|||
...... ..... .... . ................ \
|
||||
&8RR_D si=%8rr_si xt=%8rr_xt
|
||||
|
||||
# Format XX4
|
||||
&XX4 xt xa xb xc
|
||||
%xx4_xt 0:1 21:5
|
||||
%xx4_xa 2:1 16:5
|
||||
%xx4_xb 1:1 11:5
|
||||
%xx4_xc 3:1 6:5
|
||||
@XX4 ........ ........ ........ ........ \
|
||||
# Format 8RR:XX4
|
||||
%8rr_xx_xt 0:1 21:5
|
||||
%8rr_xx_xa 2:1 16:5
|
||||
%8rr_xx_xb 1:1 11:5
|
||||
%8rr_xx_xc 3:1 6:5
|
||||
&8RR_XX4 xt xa xb xc
|
||||
@8RR_XX4 ........ ........ ........ ........ \
|
||||
...... ..... ..... ..... ..... .. .... \
|
||||
&XX4 xt=%xx4_xt xa=%xx4_xa xb=%xx4_xb xc=%xx4_xc
|
||||
&8RR_XX4 xt=%8rr_xx_xt xa=%8rr_xx_xa xb=%8rr_xx_xb xc=%8rr_xx_xc
|
||||
|
||||
### Fixed-Point Load Instructions
|
||||
|
||||
|
@ -187,10 +187,10 @@ XXSPLTI32DX 000001 01 0000 -- -- ................ \
|
|||
100000 ..... 000 .. ................ @8RR_D_IX
|
||||
|
||||
XXBLENDVD 000001 01 0000 -- ------------------ \
|
||||
100001 ..... ..... ..... ..... 11 .... @XX4
|
||||
100001 ..... ..... ..... ..... 11 .... @8RR_XX4
|
||||
XXBLENDVW 000001 01 0000 -- ------------------ \
|
||||
100001 ..... ..... ..... ..... 10 .... @XX4
|
||||
100001 ..... ..... ..... ..... 10 .... @8RR_XX4
|
||||
XXBLENDVH 000001 01 0000 -- ------------------ \
|
||||
100001 ..... ..... ..... ..... 01 .... @XX4
|
||||
100001 ..... ..... ..... ..... 01 .... @8RR_XX4
|
||||
XXBLENDVB 000001 01 0000 -- ------------------ \
|
||||
100001 ..... ..... ..... ..... 00 .... @XX4
|
||||
100001 ..... ..... ..... ..... 00 .... @8RR_XX4
|
||||
|
|
|
@ -1422,19 +1422,15 @@ static void glue(gen_, name)(DisasContext *ctx) \
|
|||
VSX_XXMRG(xxmrghw, 1)
|
||||
VSX_XXMRG(xxmrglw, 0)
|
||||
|
||||
static void gen_xxsel(DisasContext *ctx)
|
||||
static bool trans_XXSEL(DisasContext *ctx, arg_XX4 *a)
|
||||
{
|
||||
int rt = xT(ctx->opcode);
|
||||
int ra = xA(ctx->opcode);
|
||||
int rb = xB(ctx->opcode);
|
||||
int rc = xC(ctx->opcode);
|
||||
REQUIRE_INSNS_FLAGS2(ctx, VSX);
|
||||
REQUIRE_VSX(ctx);
|
||||
|
||||
if (unlikely(!ctx->vsx_enabled)) {
|
||||
gen_exception(ctx, POWERPC_EXCP_VSXU);
|
||||
return;
|
||||
}
|
||||
tcg_gen_gvec_bitsel(MO_64, vsr_full_offset(rt), vsr_full_offset(rc),
|
||||
vsr_full_offset(rb), vsr_full_offset(ra), 16, 16);
|
||||
tcg_gen_gvec_bitsel(MO_64, vsr_full_offset(a->xt), vsr_full_offset(a->xc),
|
||||
vsr_full_offset(a->xb), vsr_full_offset(a->xa), 16, 16);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_XXSPLTW(DisasContext *ctx, arg_XX2 *a)
|
||||
|
@ -2127,7 +2123,7 @@ static void gen_xxblendv_vec(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
|
|||
tcg_temp_free_vec(tmp);
|
||||
}
|
||||
|
||||
static bool do_xxblendv(DisasContext *ctx, arg_XX4 *a, unsigned vece)
|
||||
static bool do_xxblendv(DisasContext *ctx, arg_8RR_XX4 *a, unsigned vece)
|
||||
{
|
||||
static const TCGOpcode vecop_list[] = {
|
||||
INDEX_op_sari_vec, 0
|
||||
|
|
|
@ -347,47 +347,4 @@ GEN_XX3FORM_DM(xxsldwi, 0x08, 0x00),
|
|||
GEN_XX2FORM_EXT(xxextractuw, 0x0A, 0x0A, PPC2_ISA300),
|
||||
GEN_XX2FORM_EXT(xxinsertw, 0x0A, 0x0B, PPC2_ISA300),
|
||||
|
||||
#define GEN_XXSEL_ROW(opc3) \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x18, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x19, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1A, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1B, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1C, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1D, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1E, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1F, opc3, 0, PPC_NONE, PPC2_VSX), \
|
||||
|
||||
GEN_XXSEL_ROW(0x00)
|
||||
GEN_XXSEL_ROW(0x01)
|
||||
GEN_XXSEL_ROW(0x02)
|
||||
GEN_XXSEL_ROW(0x03)
|
||||
GEN_XXSEL_ROW(0x04)
|
||||
GEN_XXSEL_ROW(0x05)
|
||||
GEN_XXSEL_ROW(0x06)
|
||||
GEN_XXSEL_ROW(0x07)
|
||||
GEN_XXSEL_ROW(0x08)
|
||||
GEN_XXSEL_ROW(0x09)
|
||||
GEN_XXSEL_ROW(0x0A)
|
||||
GEN_XXSEL_ROW(0x0B)
|
||||
GEN_XXSEL_ROW(0x0C)
|
||||
GEN_XXSEL_ROW(0x0D)
|
||||
GEN_XXSEL_ROW(0x0E)
|
||||
GEN_XXSEL_ROW(0x0F)
|
||||
GEN_XXSEL_ROW(0x10)
|
||||
GEN_XXSEL_ROW(0x11)
|
||||
GEN_XXSEL_ROW(0x12)
|
||||
GEN_XXSEL_ROW(0x13)
|
||||
GEN_XXSEL_ROW(0x14)
|
||||
GEN_XXSEL_ROW(0x15)
|
||||
GEN_XXSEL_ROW(0x16)
|
||||
GEN_XXSEL_ROW(0x17)
|
||||
GEN_XXSEL_ROW(0x18)
|
||||
GEN_XXSEL_ROW(0x19)
|
||||
GEN_XXSEL_ROW(0x1A)
|
||||
GEN_XXSEL_ROW(0x1B)
|
||||
GEN_XXSEL_ROW(0x1C)
|
||||
GEN_XXSEL_ROW(0x1D)
|
||||
GEN_XXSEL_ROW(0x1E)
|
||||
GEN_XXSEL_ROW(0x1F)
|
||||
|
||||
GEN_XX3FORM_DM(xxpermdi, 0x08, 0x01),
|
||||
|
|
Loading…
Reference in New Issue