[9] RFR (XS): loadUB2L_immI8 & loadUS2L_immI16 rules don't match some 8-bit/16-bit masks

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri May 22 15:14:44 UTC 2015


Thanks for looking into the fix, Roland.

On 5/22/15 5:57 PM, Roland Westrelin wrote:
>> http://cr.openjdk.java.net/~vlivanov/8001622/webrev.00
>> https://bugs.openjdk.java.net/browse/JDK-8001622
>>
>> Mask in loadUB2L_immI8 & loadUS2L_immI16 can be relaxed from immI8/immI16 to immI, since zero-extending move is used.
>
> The change on sparc doesn’t look good:
> __ and3($dst$$Register, $mask$$constant, $dst$$Register);
>
> the and instruction cannot encode arbitrary large integer constants.
Good catch. I missed that it is and3.

> Isn’t the root of the problem that we want an unsigned 8 bit integer and not a signed one?
Yes, unsigned 8-bit integer work fine, but it can be generalized to 
arbitrary masks as well.

I experimented with new operand types (immU8, immU16), but it was more 
code for no particular benefit. I can use them on sparc.

Best regards,
Vladimir Ivanov


More information about the hotspot-compiler-dev mailing list