Request for reviews (S): 6987555: JSR 292 unboxing to a boolean value fails on big-endian SPARC
john.r.rose at oracle.com
Wed Sep 29 09:05:43 PDT 2010
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.
More information about the hotspot-compiler-dev