Request for reviews (M): 8001183: incorrect results of char vectors right shift operaiton

Dean Long dean.long at
Mon Oct 22 17:57:07 PDT 2012

On 10/22/2012 04:13 PM, Vladimir Kozlov wrote:
> In java when small integer values are loaded they are converted to Int 
> with sign extension for byte and short or with zero extension for 
> boolean and char. Any following arithmetic operation may produce 
> result which will not fit into value of the original type. Because of 
> that right shift vector operations produce incorrect result when they 
> operate on not just loaded data.
> Generate right shift vector operations only if the preceding operation 
> is load.
> To get correct result of boolean and char vectors arithmetic right 
> shift operation we should use unsigned right shift operation.
> Disable unsigned right shift for vectors with signed elements (byte, 
> short) in shared code since they are not valid on all platforms.
I suppose a port could choose to implement these if it really wanted to 
by widening to int32 in
temporary vectors first, then narrowing again afterwards, but that's a 
lot of temporary vectors,
so it's probably not worth it.  But I'm curious: if we wanted to support 
it, then would it be possible to
enable or disable it for each CPU using a predicate that checks the 
element type?


> Added new regression tests prepared by Dean Long and me.
> Thanks,
> Vladimir

More information about the hotspot-compiler-dev mailing list