Request for reviews (S): 7063674: Wrong results from basic comparisons after calls to Long.bitCount(long)

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Jun 11 16:14:51 PDT 2012


I looked around and ReverseBytes instructions (which use shifts in addition to 
bswap) also missing KILL cr.

Thanks,
Vladimir

Christian Thalinger wrote:
> http://cr.openjdk.java.net/~twisti/7063674
> 
> 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. 
> 
> src/cpu/x86/vm/x86_32.ad
> src/cpu/x86/vm/x86_64.ad
> 


More information about the hotspot-compiler-dev mailing list