> The original implementation of UMIN/UMAX reductions in JDK-8346174 used > incorrect identity values in the Java implementation and test code. > > Problem: > -------- > UMIN was using MAX_OR_INF (signed maximum value) as the identity: > - Byte.MAX_VALUE (127) instead of max unsigned byte (255) > - Short.MAX_VALUE (32767) instead of max unsigned short (65535) > - Integer.MAX_VALUE instead of max unsigned int (-1) > - Long.MAX_VALUE instead of max unsigned long (-1) > > UMAX was using MIN_OR_INF (signed minimum value) as the identity: > - Byte.MIN_VALUE (-128) instead of 0 > - Short.MIN_VALUE (-32768) instead of 0 > - Integer.MIN_VALUE instead of 0 > - Long.MIN_VALUE instead of 0 > > This caused incorrect result. For example: > UMAX([42,42,...,42]) returned 128 instead of 42 > > Solution: > --------- > Use correct unsigned identity values: > - UMIN: ($type$)-1 (maximum unsigned value) > - UMAX: ($type$)0 (minimum unsigned value) > > Changes: > -------- > - X-Vector.java.template: Fixed identity values in reductionOperations > - gen-template.sh: Fixed identity values for test code generation > - templates/Unit-header.template: Updated copyright year to 2025 > - Regenerated all Vector classes and test files > > Testing: > -------- > All types (byte/short/int/long) now return correct results in both > interpreter mode (-Xint) and compiled mode.
Eric Fang has updated the pull request incrementally with one additional commit since the last revision: Refine the tests for identity values ------------- Changes: - all: https://git.openjdk.org/jdk/pull/28692/files - new: https://git.openjdk.org/jdk/pull/28692/files/d685d3df..b5237a28 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=28692&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=28692&range=02-03 Stats: 8949 lines in 42 files changed: 5473 ins; 2384 del; 1092 mod Patch: https://git.openjdk.org/jdk/pull/28692.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/28692/head:pull/28692 PR: https://git.openjdk.org/jdk/pull/28692
