From 27699186ce523c0eda987d1c8417468843bd03ef Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 24 Jul 2007 02:35:09 +0000 Subject: [PATCH] (popcount32): Reduce size of constants, to allow better code generation, and add U to large constants to avoid warnings, in non-GCC case. Suggested by Bruno Haible. --- ChangeLog | 7 +++++++ lib/popcount.h | 10 +++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index c8c539dc47..6c0445071a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-07-23 Ben Pfaff + + * lib/popcount.h (popcount32): Reduce size of constants, to allow + better code generation, and add U to large constants to avoid + warnings, in non-GCC case. + Suggested by Bruno Haible. + 2007-07-23 Ben Pfaff * lib/popcount.h: Use verify_true instead of if...abort. diff --git a/lib/popcount.h b/lib/popcount.h index 6c19de2d62..0ea6ed8374 100644 --- a/lib/popcount.h +++ b/lib/popcount.h @@ -41,11 +41,11 @@ static inline int popcount32 (unsigned int x) { - x = ((x & 0xaaaaaaaa) >> 1) + (x & 0x55555555); - x = ((x & 0xcccccccc) >> 2) + (x & 0x33333333); - x = ((x & 0xf0f0f0f0) >> 4) + (x & 0x0f0f0f0f); - x = ((x & 0xff00ff00) >> 8) + (x & 0x00ff00ff); - return (x >> 16) + (x & 0xff); + x = ((x & 0xaaaaaaaaU) >> 1) + (x & 0x55555555U); + x = ((x & 0xccccccccU) >> 2) + (x & 0x33333333U); + x = (x >> 16) + (x & 0xffff); + x = ((x & 0xf0f0) >> 4) + (x & 0x0f0f); + return (x >> 8) + (x & 0x00ff); } #endif -- 2.30.2