[jdk16] RFR: 8260585: AArch64: Wrong code generated for shifting right and accumulating four unsigned short integers [v3]

Ningsheng Jian ningsheng.jian at arm.com
Tue Feb 2 10:53:34 UTC 2021


Hi,

On 2/1/21 10:35 PM, dongbo (E) wrote:
> 
> On 2021/2/1 20:32, Andrew Haley wrote:
>> On 2/1/21 8:11 AM, dongbo (E) wrote:
>>> The tests passed with the newest version and still can catch the typo.
>>> Also tested a few of injected errors, the tests failed as expected.
>> One oddity has come up.
>>
>> I'm running compiler/c2/TestShiftRightAndAccumulate
>> and the generated code I see for 
>> compiler.c2.TestShiftRightAndAccumulate::test_shorts
>>
>> No vector instructions here. As far as I can see vectors are never used
>> for jshort, just for jchar. All very strange, and probably not your 
>> fault,
>> but since I'm looking I had to mention it.
>>
>> The other weird thing is that {u,s}sra is never generated with the .8B 
>> form.
> 
> I guess the `usra` is not generated for `byte` and `short` because:
> ```
> src/hotspot/share/opto/vectornode.cpp, line 182:
>    case Op_URShiftI:
>      switch (bt) {
>      case T_BOOLEAN:return Op_URShiftVB;
>      case T_CHAR:   return Op_URShiftVS;
>      case T_BYTE:
>      case T_SHORT:  return 0; // Vector logical right shift for signed 
> short
>                               // values produces incorrect Java result for
>                               // negative data because java code should 
> convert
>                               // a short value into int value with sign
>                               // extension before a shift.
>      case T_INT:    return Op_URShiftVI;
>      default:       ShouldNotReachHere(); return 0;
>      }
> ```
> 

They can be used in vector api. E.g.

var vba = ByteVector.fromArray(ByteVector.SPECIES_PREFERRED, ba, i);
vba.add(vba.lanewise(VectorOperators.LSHR, 3)).intoArray(ba, i);

Thanks,
Ningsheng



More information about the hotspot-compiler-dev mailing list