From: David Gibson Date: Tue, 5 Apr 2011 05:12:11 +0000 (+1000) Subject: Use existing helper function to implement popcntd instruction X-Git-Tag: v0.15.0-rc0~530 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3601ff11732160e42d3174d2821d873cfcd52a59;p=thirdparty%2Fqemu.git Use existing helper function to implement popcntd instruction The recent patches adding partial support for POWER7 cpu emulation included implementing the popcntd instruction. The support for this was open coded, but host-utils.h already included a function implementing an equivalent population count function, which uses a gcc builtin (which can use special host instructions) if available. This patch makes the popcntd implementation use the existing, potentially faster, implementation. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c index b1b883d0a7b..5882becbc96 100644 --- a/target-ppc/op_helper.c +++ b/target-ppc/op_helper.c @@ -528,19 +528,7 @@ target_ulong helper_popcntw (target_ulong val) target_ulong helper_popcntd (target_ulong val) { - val = (val & 0x5555555555555555ULL) + ((val >> 1) & - 0x5555555555555555ULL); - val = (val & 0x3333333333333333ULL) + ((val >> 2) & - 0x3333333333333333ULL); - val = (val & 0x0f0f0f0f0f0f0f0fULL) + ((val >> 4) & - 0x0f0f0f0f0f0f0f0fULL); - val = (val & 0x00ff00ff00ff00ffULL) + ((val >> 8) & - 0x00ff00ff00ff00ffULL); - val = (val & 0x0000ffff0000ffffULL) + ((val >> 16) & - 0x0000ffff0000ffffULL); - val = (val & 0x00000000ffffffffULL) + ((val >> 32) & - 0x00000000ffffffffULL); - return val; + return ctpop64(val); } #else target_ulong helper_popcntb (target_ulong val)