target/ppc: Move VSX logical instructions to decodetree.
Moving the following instructions to decodetree specification : xxl{and, andc, or, orc, nor, xor, nand, eqv} : XX3-form The changes were verified by validating that the tcg ops generated by those instructions remain the same, which were captured with the '-d in_asm,op' flag. Signed-off-by: Chinmay Rath <rathc@linux.ibm.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
638f6d553a
commit
c1167a9257
@ -1138,6 +1138,17 @@ XXMFACC 011111 ... -- 00000 ----- 0010110001 - @X_a
|
||||
XXMTACC 011111 ... -- 00001 ----- 0010110001 - @X_a
|
||||
XXSETACCZ 011111 ... -- 00011 ----- 0010110001 - @X_a
|
||||
|
||||
## VSX Vector Logical instructions
|
||||
|
||||
XXLAND 111100 ..... ..... ..... 10000010 ... @XX3
|
||||
XXLANDC 111100 ..... ..... ..... 10001010 ... @XX3
|
||||
XXLOR 111100 ..... ..... ..... 10010010 ... @XX3
|
||||
XXLXOR 111100 ..... ..... ..... 10011010 ... @XX3
|
||||
XXLNOR 111100 ..... ..... ..... 10100010 ... @XX3
|
||||
XXLEQV 111100 ..... ..... ..... 10111010 ... @XX3
|
||||
XXLNAND 111100 ..... ..... ..... 10110010 ... @XX3
|
||||
XXLORC 111100 ..... ..... ..... 10101010 ... @XX3
|
||||
|
||||
## VSX GER instruction
|
||||
|
||||
XVI4GER8 111011 ... -- ..... ..... 00100011 ..- @XX3_at xa=%xx_xa
|
||||
|
@ -1573,26 +1573,24 @@ static void gen_xxbrw(DisasContext *ctx)
|
||||
set_cpu_vsr(xT(ctx->opcode), xtl, false);
|
||||
}
|
||||
|
||||
#define VSX_LOGICAL(name, vece, tcg_op) \
|
||||
static void glue(gen_, name)(DisasContext *ctx) \
|
||||
{ \
|
||||
if (unlikely(!ctx->vsx_enabled)) { \
|
||||
gen_exception(ctx, POWERPC_EXCP_VSXU); \
|
||||
return; \
|
||||
} \
|
||||
tcg_op(vece, vsr_full_offset(xT(ctx->opcode)), \
|
||||
vsr_full_offset(xA(ctx->opcode)), \
|
||||
vsr_full_offset(xB(ctx->opcode)), 16, 16); \
|
||||
}
|
||||
static bool do_logical_op(DisasContext *ctx, arg_XX3 *a, unsigned vece,
|
||||
void (*helper)(unsigned, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t))
|
||||
{
|
||||
REQUIRE_VSX(ctx);
|
||||
helper(vece, vsr_full_offset(a->xt),
|
||||
vsr_full_offset(a->xa),
|
||||
vsr_full_offset(a->xb), 16, 16);
|
||||
return true;
|
||||
}
|
||||
|
||||
VSX_LOGICAL(xxland, MO_64, tcg_gen_gvec_and)
|
||||
VSX_LOGICAL(xxlandc, MO_64, tcg_gen_gvec_andc)
|
||||
VSX_LOGICAL(xxlor, MO_64, tcg_gen_gvec_or)
|
||||
VSX_LOGICAL(xxlxor, MO_64, tcg_gen_gvec_xor)
|
||||
VSX_LOGICAL(xxlnor, MO_64, tcg_gen_gvec_nor)
|
||||
VSX_LOGICAL(xxleqv, MO_64, tcg_gen_gvec_eqv)
|
||||
VSX_LOGICAL(xxlnand, MO_64, tcg_gen_gvec_nand)
|
||||
VSX_LOGICAL(xxlorc, MO_64, tcg_gen_gvec_orc)
|
||||
TRANS_FLAGS2(VSX, XXLAND, do_logical_op, MO_64, tcg_gen_gvec_and);
|
||||
TRANS_FLAGS2(VSX, XXLANDC, do_logical_op, MO_64, tcg_gen_gvec_andc);
|
||||
TRANS_FLAGS2(VSX, XXLOR, do_logical_op, MO_64, tcg_gen_gvec_or);
|
||||
TRANS_FLAGS2(VSX, XXLXOR, do_logical_op, MO_64, tcg_gen_gvec_xor);
|
||||
TRANS_FLAGS2(VSX, XXLNOR, do_logical_op, MO_64, tcg_gen_gvec_nor);
|
||||
TRANS_FLAGS2(VSX207, XXLEQV, do_logical_op, MO_64, tcg_gen_gvec_eqv);
|
||||
TRANS_FLAGS2(VSX207, XXLNAND, do_logical_op, MO_64, tcg_gen_gvec_nand);
|
||||
TRANS_FLAGS2(VSX207, XXLORC, do_logical_op, MO_64, tcg_gen_gvec_orc);
|
||||
|
||||
#define VSX_XXMRG(name, high) \
|
||||
static void glue(gen_, name)(DisasContext *ctx) \
|
||||
@ -2899,4 +2897,3 @@ TRANS64(PMXVF64GERNN, do_ger, gen_helper_XVF64GERNN)
|
||||
#undef GEN_XX2IFORM
|
||||
#undef GEN_XX3_RC_FORM
|
||||
#undef GEN_XX3FORM_DM
|
||||
#undef VSX_LOGICAL
|
||||
|
@ -263,17 +263,6 @@ GEN_XX2FORM_EO(xvcvhpsp, 0x16, 0x1D, 0x18, PPC2_ISA300),
|
||||
GEN_XX2FORM_EO(xvcvsphp, 0x16, 0x1D, 0x19, PPC2_ISA300),
|
||||
GEN_XX2FORM_EO(xxbrq, 0x16, 0x1D, 0x1F, PPC2_ISA300),
|
||||
|
||||
#define VSX_LOGICAL(name, opc2, opc3, fl2) \
|
||||
GEN_XX3FORM(name, opc2, opc3, fl2)
|
||||
|
||||
VSX_LOGICAL(xxland, 0x8, 0x10, PPC2_VSX),
|
||||
VSX_LOGICAL(xxlandc, 0x8, 0x11, PPC2_VSX),
|
||||
VSX_LOGICAL(xxlor, 0x8, 0x12, PPC2_VSX),
|
||||
VSX_LOGICAL(xxlxor, 0x8, 0x13, PPC2_VSX),
|
||||
VSX_LOGICAL(xxlnor, 0x8, 0x14, PPC2_VSX),
|
||||
VSX_LOGICAL(xxleqv, 0x8, 0x17, PPC2_VSX207),
|
||||
VSX_LOGICAL(xxlnand, 0x8, 0x16, PPC2_VSX207),
|
||||
VSX_LOGICAL(xxlorc, 0x8, 0x15, PPC2_VSX207),
|
||||
GEN_XX3FORM(xxmrghw, 0x08, 0x02, PPC2_VSX),
|
||||
GEN_XX3FORM(xxmrglw, 0x08, 0x06, PPC2_VSX),
|
||||
GEN_XX3FORM_DM(xxsldwi, 0x08, 0x00),
|
||||
|
Loading…
Reference in New Issue
Block a user