From 71acc41b44cb2f8a20cbf37a17f32a4eb7f7fc25 Mon Sep 17 00:00:00 2001 From: Tudor Bosman Date: Wed, 8 Aug 2012 14:08:03 -0700 Subject: [PATCH] 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 --- folly/Bits.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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) { -- 2.34.1