From: Tudor Bosman Date: Wed, 8 Aug 2012 21:08:03 +0000 (-0700) Subject: Remove 1 instruction from popcount X-Git-Tag: v0.22.0~1222 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=71acc41b44cb2f8a20cbf37a17f32a4eb7f7fc25;p=folly.git Remove 1 instruction from popcount Summary: by removing the unnecessary constraint that the input and output be in the same register (copypasta from https://phabricator.fb.com/D542718) Test Plan: folly/test Reviewed By: soren@fb.com FB internal diff: D543310 --- diff --git a/folly/Bits.cpp b/folly/Bits.cpp index 41c2bc46..1c825d2a 100644 --- a/folly/Bits.cpp +++ b/folly/Bits.cpp @@ -25,8 +25,9 @@ namespace { int popcount_inst(unsigned int x) { - asm ("popcntl %0, %0" : "=r" (x) : "0" (x)); - return x; + int n; + asm ("popcntl %1, %0" : "=r" (n) : "r" (x)); + return n; } int popcount_builtin(unsigned int x) { @@ -34,8 +35,9 @@ int popcount_builtin(unsigned int x) { } int popcountll_inst(unsigned long long x) { - asm ("popcntq %0, %0" : "=r" (x) : "0" (x)); - return x; + unsigned long long n; + asm ("popcntq %1, %0" : "=r" (n) : "r" (x)); + return n; } int popcountll_builtin(unsigned long long x) {