Commit 71acc41b authored by Tudor Bosman's avatar Tudor Bosman

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
parent 7fd87e7e
...@@ -25,8 +25,9 @@ ...@@ -25,8 +25,9 @@
namespace { namespace {
int popcount_inst(unsigned int x) { int popcount_inst(unsigned int x) {
asm ("popcntl %0, %0" : "=r" (x) : "0" (x)); int n;
return x; asm ("popcntl %1, %0" : "=r" (n) : "r" (x));
return n;
} }
int popcount_builtin(unsigned int x) { int popcount_builtin(unsigned int x) {
...@@ -34,8 +35,9 @@ int popcount_builtin(unsigned int x) { ...@@ -34,8 +35,9 @@ int popcount_builtin(unsigned int x) {
} }
int popcountll_inst(unsigned long long x) { int popcountll_inst(unsigned long long x) {
asm ("popcntq %0, %0" : "=r" (x) : "0" (x)); unsigned long long n;
return x; asm ("popcntq %1, %0" : "=r" (n) : "r" (x));
return n;
} }
int popcountll_builtin(unsigned long long x) { int popcountll_builtin(unsigned long long x) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment