7063674 (original) (raw)

Author comments:

7063674: Wrong results from basic comparisons after calls to Long.bitCount(long)
Reviewed-by:

We are scheduling popcnt instructions between compare and branch/conditional
move instructions because AD instructs are not defined to kill flags.

But the Intel Instruction Set Reference says for POPCNT:

Flags Affected
OF, SF, ZF, AF, CF, PF are all cleared. ZF is set if SRC = 0, otherwise ZF is cleared

The fix is to kill the flags in instructs that are using popcnt instructions.

Tested with test case of CR.