mirror of https://github.com/xemu-project/xemu.git
target-ppc: Altivec 2.07: Vector Population Count Instructions
This patch adds the Vector Population Count instructions introduced in Power ISA Version 2.07: vpopcntb, vpopcnth, vpopcntw and vpopcntd. Signed-off-by: Tom Musta <tommusta@gmail.com> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
f293f04ab5
commit
e13500b3c3
|
@ -277,6 +277,10 @@ DEF_HELPER_2(vclzb, void, avr, avr)
|
|||
DEF_HELPER_2(vclzh, void, avr, avr)
|
||||
DEF_HELPER_2(vclzw, void, avr, avr)
|
||||
DEF_HELPER_2(vclzd, void, avr, avr)
|
||||
DEF_HELPER_2(vpopcntb, void, avr, avr)
|
||||
DEF_HELPER_2(vpopcnth, void, avr, avr)
|
||||
DEF_HELPER_2(vpopcntw, void, avr, avr)
|
||||
DEF_HELPER_2(vpopcntd, void, avr, avr)
|
||||
|
||||
DEF_HELPER_2(xsadddp, void, env, i32)
|
||||
DEF_HELPER_2(xssubdp, void, env, i32)
|
||||
|
|
|
@ -1549,6 +1549,20 @@ VGENERIC_DO(clzd, u64)
|
|||
#undef clzw
|
||||
#undef clzd
|
||||
|
||||
#define popcntb(v) ctpop8(v)
|
||||
#define popcnth(v) ctpop16(v)
|
||||
#define popcntw(v) ctpop32(v)
|
||||
#define popcntd(v) ctpop64(v)
|
||||
|
||||
VGENERIC_DO(popcntb, u8)
|
||||
VGENERIC_DO(popcnth, u16)
|
||||
VGENERIC_DO(popcntw, u32)
|
||||
VGENERIC_DO(popcntd, u64)
|
||||
|
||||
#undef popcntb
|
||||
#undef popcnth
|
||||
#undef popcntw
|
||||
#undef popcntd
|
||||
|
||||
#undef VGENERIC_DO
|
||||
|
||||
|
|
|
@ -7287,6 +7287,19 @@ GEN_VXFORM_NOA(vclzb, 1, 28)
|
|||
GEN_VXFORM_NOA(vclzh, 1, 29)
|
||||
GEN_VXFORM_NOA(vclzw, 1, 30)
|
||||
GEN_VXFORM_NOA(vclzd, 1, 31)
|
||||
GEN_VXFORM_NOA(vpopcntb, 1, 28)
|
||||
GEN_VXFORM_NOA(vpopcnth, 1, 29)
|
||||
GEN_VXFORM_NOA(vpopcntw, 1, 30)
|
||||
GEN_VXFORM_NOA(vpopcntd, 1, 31)
|
||||
GEN_VXFORM_DUAL(vclzb, PPC_NONE, PPC2_ALTIVEC_207, \
|
||||
vpopcntb, PPC_NONE, PPC2_ALTIVEC_207)
|
||||
GEN_VXFORM_DUAL(vclzh, PPC_NONE, PPC2_ALTIVEC_207, \
|
||||
vpopcnth, PPC_NONE, PPC2_ALTIVEC_207)
|
||||
GEN_VXFORM_DUAL(vclzw, PPC_NONE, PPC2_ALTIVEC_207, \
|
||||
vpopcntw, PPC_NONE, PPC2_ALTIVEC_207)
|
||||
GEN_VXFORM_DUAL(vclzd, PPC_NONE, PPC2_ALTIVEC_207, \
|
||||
vpopcntd, PPC_NONE, PPC2_ALTIVEC_207)
|
||||
|
||||
/*** VSX extension ***/
|
||||
|
||||
static inline TCGv_i64 cpu_vsrh(int n)
|
||||
|
@ -10508,10 +10521,11 @@ GEN_VAFORM_PAIRED(vmsumshm, vmsumshs, 20),
|
|||
GEN_VAFORM_PAIRED(vsel, vperm, 21),
|
||||
GEN_VAFORM_PAIRED(vmaddfp, vnmsubfp, 23),
|
||||
|
||||
GEN_VXFORM_207(vclzb, 1, 28),
|
||||
GEN_VXFORM_207(vclzh, 1, 29),
|
||||
GEN_VXFORM_207(vclzw, 1, 30),
|
||||
GEN_VXFORM_207(vclzd, 1, 31),
|
||||
GEN_VXFORM_DUAL(vclzb, vpopcntb, 1, 28, PPC_NONE, PPC2_ALTIVEC_207),
|
||||
GEN_VXFORM_DUAL(vclzh, vpopcnth, 1, 29, PPC_NONE, PPC2_ALTIVEC_207),
|
||||
GEN_VXFORM_DUAL(vclzw, vpopcntw, 1, 30, PPC_NONE, PPC2_ALTIVEC_207),
|
||||
GEN_VXFORM_DUAL(vclzd, vpopcntd, 1, 31, PPC_NONE, PPC2_ALTIVEC_207),
|
||||
|
||||
|
||||
GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
|
||||
GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
|
||||
|
|
Loading…
Reference in New Issue