Request for reviews (XS): 6996240: The BitSet.length method sometimes returns an index+1 value less than that of the highest bit set.
vladimir.kozlov at oracle.com
Tue Nov 2 15:31:13 PDT 2010
Yes, I missed at first that it happens in 32 bit mode.
Tom Rodriguez wrote:
> On Nov 2, 2010, at 12:48 PM, Vladimir Kozlov wrote:
>> Thank you, Christian
>> All registers on sparc are 64 bit and all operations are 64 bit.
>> Which instruction produce wrong value? Did you step per instruction in debugger?
> In 32 bit only the g's and o's have their full 64 bit value preserved by the OS. The i's and l's are saved and restored in register window stack space that only has room for their 32 bit values.
>> Christian Thalinger wrote:
>>> 6996240: The BitSet.length method sometimes returns an index+1 value less than that of the highest bit set.
>>> It's a problem with countLeadingZerosL. dst is a iRegI but is used as
>>> temporary for an iRegL OR value.
>>> The fix is to use a second temporary iRegL register for the OR value.
>>> Tested with the failing testcase attached to the CR.
More information about the hotspot-compiler-dev