On Tue, 19 Apr 2022 08:41:50 GMT, Jie Fu <ji...@openjdk.org> wrote:

> Hi all,
> 
> The Current Vector API doc for `LSHR` is
> 
> Produce a>>>(n&(ESIZE*8-1)). Integral only.
> 
> 
> This is misleading which may lead to bugs for Java developers.
> This is because for negative byte/short elements, the results computed by 
> `LSHR` will be different from that of `>>>`.
> For more details, please see 
> https://github.com/openjdk/jdk/pull/8276#issue-1206391831 .
> 
> After the patch, the doc for `LSHR` is
> 
> Produce zero-extended right shift of a by (n&(ESIZE*8-1)) bits. Integral only.
> 
> 
> Thanks.
> Best regards,
> Jie

I need to think a little more about this. The specification is not accurate and 
likely requires a CSR.

My initial thoughts are I would prefer the operation to retain reference to the 
succinct definition using the logical right shift operator but we add 
additional specification explaining the cases for `byte` and `short`, namely 
that the result is widened to an `int` as if by `(a & ((1 << ESIZE) - 1))` and 
the result narrowed. That's commonly (at least for the widening part) how `>>>` 
is used with `byte` and `short`, and i think would be clearer to be explicit in 
that regard.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8291

Reply via email to