Request for reviews (S): 6987555: JSR 292 unboxing to a boolean value fails on big-endian SPARC

Tom Rodriguez tom.rodriguez at oracle.com
Wed Sep 29 09:22:01 PDT 2010


On Sep 29, 2010, at 9:05 AM, John Rose wrote:

> On Sep 29, 2010, at 6:58 AM, Christian Thalinger wrote:
> 
>>> But changing the shift for boolean to 24 should also work, since
>>> booleans use 1 byte.  I'll try that.
>> 
>> What about this one:
> 
> That works for unboxi but pushes the bug to value conversion.
> 
> The Java runtime assumes that a conversion to boolean performs (x&1).  If you change that to (x&0xFF) you could begin to see illegal boolean values like 2.
> 
> You can assume that a boxed boolean is already normalized to 0 or 1, so 24 is fine, but a value in a register can be anything.
> 
> So for the i2i conversion that creates a boolean, we need to make sure that the assembly code refuses to produce anything other than 0 or 1.  That's why the shift value is 31 currently.

Why aren't the values dependent on which operation is being performed then?

tom

> 
> -- John



More information about the hotspot-compiler-dev mailing list