Hi All,

As per the discussion on panama-dev mailing list[1], patch adds the support 
following new vector operators.


     . SATURATING_UADD   : Saturating unsigned addition.
     . SATURATING_ADD    :  Saturating signed addition. 
     . SATURATING_USUB   : Saturating unsigned subtraction.
     . SATURATING_SUB    : Saturating signed subtraction.
     . UMAX              : Unsigned max
     . UMIN              : Unsigned min.
     

New vector operators are applicable to only integral types since their values 
wraparound in over/underflowing scenarios after setting appropriate status 
flags. For floating point types, as per IEEE 754 specs there are multiple 
schemes to handler underflow, one of them is gradual underflow which 
transitions the value to subnormal range. Similarly, overflow implicitly 
saturates the floating-point value to an Infinite value.

As the name suggests, these are saturating operations, i.e. the result of the 
computation is strictly capped by lower and upper bounds of the result type and 
is not wrapped around in underflowing or overflowing scenarios.

Summary of changes:
- Java side implementation of new vector operators.
- Add new scalar saturating APIs for each of the above saturating vector 
operator in corresponding primitive box classes, fallback implementation of 
vector operators is based over it.
- C2 compiler IR and inline expander changes.
- Optimized x86 backend implementation for new vector operators and their 
predicated counterparts.
- Extends existing VectorAPI Jtreg test suite to cover new operations.

Kindly review and share your feedback.

Best Regards,
PS: Intrinsification and auto-vectorization of new core-lib API will be 
addressed separately in a follow-up patch.

[1] https://mail.openjdk.org/pipermail/panama-dev/2024-May/020408.html

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

Commit messages:
 - Removed redundant comment
 - 8338021: Support saturating vector operators in VectorAPI

Changes: https://git.openjdk.org/jdk/pull/20507/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20507&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8338021
  Stats: 9013 lines in 67 files changed: 8923 ins; 28 del; 62 mod
  Patch: https://git.openjdk.org/jdk/pull/20507.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/20507/head:pull/20507

PR: https://git.openjdk.org/jdk/pull/20507

Reply via email to