target/ppc: move vs[lr][a][bhwd] to decodetree
Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br> Message-Id: <20220225210936.1749575-20-matheus.ferst@eldorado.org.br> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
f622ebe7a5
commit
0f05200782
@ -467,6 +467,23 @@ VINSWVRX 000100 ..... ..... ..... 00110001111 @VX
|
||||
VSLDBI 000100 ..... ..... ..... 00 ... 010110 @VN
|
||||
VSRDBI 000100 ..... ..... ..... 01 ... 010110 @VN
|
||||
|
||||
## Vector Integer Shift Instruction
|
||||
|
||||
VSLB 000100 ..... ..... ..... 00100000100 @VX
|
||||
VSLH 000100 ..... ..... ..... 00101000100 @VX
|
||||
VSLW 000100 ..... ..... ..... 00110000100 @VX
|
||||
VSLD 000100 ..... ..... ..... 10111000100 @VX
|
||||
|
||||
VSRB 000100 ..... ..... ..... 01000000100 @VX
|
||||
VSRH 000100 ..... ..... ..... 01001000100 @VX
|
||||
VSRW 000100 ..... ..... ..... 01010000100 @VX
|
||||
VSRD 000100 ..... ..... ..... 11011000100 @VX
|
||||
|
||||
VSRAB 000100 ..... ..... ..... 01100000100 @VX
|
||||
VSRAH 000100 ..... ..... ..... 01101000100 @VX
|
||||
VSRAW 000100 ..... ..... ..... 01110000100 @VX
|
||||
VSRAD 000100 ..... ..... ..... 01111000100 @VX
|
||||
|
||||
## Vector Integer Arithmetic Instructions
|
||||
|
||||
VEXTSB2W 000100 ..... 10000 ..... 11000000010 @VX_tb
|
||||
|
@ -799,21 +799,7 @@ static void trans_vclzd(DisasContext *ctx)
|
||||
}
|
||||
|
||||
GEN_VXFORM_V(vmuluwm, MO_32, tcg_gen_gvec_mul, 4, 2);
|
||||
GEN_VXFORM_V(vslb, MO_8, tcg_gen_gvec_shlv, 2, 4);
|
||||
GEN_VXFORM_V(vslh, MO_16, tcg_gen_gvec_shlv, 2, 5);
|
||||
GEN_VXFORM_V(vslw, MO_32, tcg_gen_gvec_shlv, 2, 6);
|
||||
GEN_VXFORM(vrlwnm, 2, 6);
|
||||
GEN_VXFORM_DUAL(vslw, PPC_ALTIVEC, PPC_NONE, \
|
||||
vrlwnm, PPC_NONE, PPC2_ISA300)
|
||||
GEN_VXFORM_V(vsld, MO_64, tcg_gen_gvec_shlv, 2, 23);
|
||||
GEN_VXFORM_V(vsrb, MO_8, tcg_gen_gvec_shrv, 2, 8);
|
||||
GEN_VXFORM_V(vsrh, MO_16, tcg_gen_gvec_shrv, 2, 9);
|
||||
GEN_VXFORM_V(vsrw, MO_32, tcg_gen_gvec_shrv, 2, 10);
|
||||
GEN_VXFORM_V(vsrd, MO_64, tcg_gen_gvec_shrv, 2, 27);
|
||||
GEN_VXFORM_V(vsrab, MO_8, tcg_gen_gvec_sarv, 2, 12);
|
||||
GEN_VXFORM_V(vsrah, MO_16, tcg_gen_gvec_sarv, 2, 13);
|
||||
GEN_VXFORM_V(vsraw, MO_32, tcg_gen_gvec_sarv, 2, 14);
|
||||
GEN_VXFORM_V(vsrad, MO_64, tcg_gen_gvec_sarv, 2, 15);
|
||||
GEN_VXFORM(vsrv, 2, 28);
|
||||
GEN_VXFORM(vslv, 2, 29);
|
||||
GEN_VXFORM(vslo, 6, 16);
|
||||
@ -821,6 +807,33 @@ GEN_VXFORM(vsro, 6, 17);
|
||||
GEN_VXFORM(vaddcuw, 0, 6);
|
||||
GEN_VXFORM(vsubcuw, 0, 22);
|
||||
|
||||
static bool do_vector_gvec3_VX(DisasContext *ctx, arg_VX *a, int vece,
|
||||
void (*gen_gvec)(unsigned, uint32_t, uint32_t,
|
||||
uint32_t, uint32_t, uint32_t))
|
||||
{
|
||||
REQUIRE_VECTOR(ctx);
|
||||
|
||||
gen_gvec(vece, avr_full_offset(a->vrt), avr_full_offset(a->vra),
|
||||
avr_full_offset(a->vrb), 16, 16);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
TRANS_FLAGS(ALTIVEC, VSLB, do_vector_gvec3_VX, MO_8, tcg_gen_gvec_shlv);
|
||||
TRANS_FLAGS(ALTIVEC, VSLH, do_vector_gvec3_VX, MO_16, tcg_gen_gvec_shlv);
|
||||
TRANS_FLAGS(ALTIVEC, VSLW, do_vector_gvec3_VX, MO_32, tcg_gen_gvec_shlv);
|
||||
TRANS_FLAGS2(ALTIVEC_207, VSLD, do_vector_gvec3_VX, MO_64, tcg_gen_gvec_shlv);
|
||||
|
||||
TRANS_FLAGS(ALTIVEC, VSRB, do_vector_gvec3_VX, MO_8, tcg_gen_gvec_shrv);
|
||||
TRANS_FLAGS(ALTIVEC, VSRH, do_vector_gvec3_VX, MO_16, tcg_gen_gvec_shrv);
|
||||
TRANS_FLAGS(ALTIVEC, VSRW, do_vector_gvec3_VX, MO_32, tcg_gen_gvec_shrv);
|
||||
TRANS_FLAGS2(ALTIVEC_207, VSRD, do_vector_gvec3_VX, MO_64, tcg_gen_gvec_shrv);
|
||||
|
||||
TRANS_FLAGS(ALTIVEC, VSRAB, do_vector_gvec3_VX, MO_8, tcg_gen_gvec_sarv);
|
||||
TRANS_FLAGS(ALTIVEC, VSRAH, do_vector_gvec3_VX, MO_16, tcg_gen_gvec_sarv);
|
||||
TRANS_FLAGS(ALTIVEC, VSRAW, do_vector_gvec3_VX, MO_32, tcg_gen_gvec_sarv);
|
||||
TRANS_FLAGS2(ALTIVEC_207, VSRAD, do_vector_gvec3_VX, MO_64, tcg_gen_gvec_sarv);
|
||||
|
||||
#define GEN_VXFORM_SAT(NAME, VECE, NORM, SAT, OPC2, OPC3) \
|
||||
static void glue(glue(gen_, NAME), _vec)(unsigned vece, TCGv_vec t, \
|
||||
TCGv_vec sat, TCGv_vec a, \
|
||||
|
@ -102,18 +102,7 @@ GEN_VXFORM_300(vextubrx, 6, 28),
|
||||
GEN_VXFORM_300(vextuhrx, 6, 29),
|
||||
GEN_VXFORM_DUAL(vmrgew, vextuwrx, 6, 30, PPC_NONE, PPC2_ALTIVEC_207),
|
||||
GEN_VXFORM_207(vmuluwm, 4, 2),
|
||||
GEN_VXFORM(vslb, 2, 4),
|
||||
GEN_VXFORM(vslh, 2, 5),
|
||||
GEN_VXFORM_DUAL(vslw, vrlwnm, 2, 6, PPC_ALTIVEC, PPC_NONE),
|
||||
GEN_VXFORM_207(vsld, 2, 23),
|
||||
GEN_VXFORM(vsrb, 2, 8),
|
||||
GEN_VXFORM(vsrh, 2, 9),
|
||||
GEN_VXFORM(vsrw, 2, 10),
|
||||
GEN_VXFORM_207(vsrd, 2, 27),
|
||||
GEN_VXFORM(vsrab, 2, 12),
|
||||
GEN_VXFORM(vsrah, 2, 13),
|
||||
GEN_VXFORM(vsraw, 2, 14),
|
||||
GEN_VXFORM_207(vsrad, 2, 15),
|
||||
GEN_VXFORM_300(vrlwnm, 2, 6),
|
||||
GEN_VXFORM_300(vsrv, 2, 28),
|
||||
GEN_VXFORM_300(vslv, 2, 29),
|
||||
GEN_VXFORM(vslo, 6, 16),
|
||||
|
Loading…
x
Reference in New Issue
Block a user