diff options
author | Aart Bik <ajcbik@google.com> | 2016-01-15 14:35:12 -0800 |
---|---|---|
committer | Aart Bik <ajcbik@google.com> | 2016-01-20 20:14:00 -0800 |
commit | 3f67e692860d281858485d48a4f1f81b907f1444 (patch) | |
tree | a14d3bdc1416dc3db74983d34a408a8b48cbce9c /disassembler/disassembler_x86.cc | |
parent | 6aadaef35ea52506db61e463910c2520b702ca5e (diff) |
Implemented BitCount as an intrinsic. With unit test.
Rationale:
Recognizing this important operation as an intrinsic has
various advantages:
(1) having the no-side-effects/no-throw allows for
much more GVN/LICM/BCE.
(2) Some architectures, like x86_64, provide direct
support for this operation.
Performance improvements on X86_64:
CheckersEvalBench (32-bit bitboard): 27,210KNS -> 36,798KNS = + 35%
ReversiEvalBench (64-bit bitboard): 52,562KNS -> 89,086KNS = + 69%
Change-Id: I65d549b0469b7909b12c6611cdc34a8640a5751f
Diffstat (limited to 'disassembler/disassembler_x86.cc')
-rw-r--r-- | disassembler/disassembler_x86.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc index d4bef0fe7b..1f74c93045 100644 --- a/disassembler/disassembler_x86.cc +++ b/disassembler/disassembler_x86.cc @@ -938,6 +938,11 @@ DISASSEMBLER_ENTRY(cmp, has_modrm = true; load = true; break; + case 0xB8: + opcode1 = "popcnt"; + has_modrm = true; + load = true; + break; case 0xBE: opcode1 = "movsxb"; has_modrm = true; |