From 7ed93cf40ed4fa1ad545dcb1a33b0d4fdabfa277 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Tue, 14 Oct 2025 16:04:27 +0000 Subject: [PATCH] 8369312: Refactor Float.toHexString() to avoid use of regex Reviewed-by: rgiulietti --- src/java.base/share/classes/java/lang/Float.java | 8 +++++--- .../share/classes/jdk/incubator/vector/Float16.java | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/java.base/share/classes/java/lang/Float.java b/src/java.base/share/classes/java/lang/Float.java index ac5ab9ba055..db694571567 100644 --- a/src/java.base/share/classes/java/lang/Float.java +++ b/src/java.base/share/classes/java/lang/Float.java @@ -420,10 +420,12 @@ public final class Float extends Number // replace subnormal double exponent with subnormal float // exponent String s = Double.toHexString(Math.scalb((double)f, - /* -1022+126 */ - Double.MIN_EXPONENT- + // -1022 + 126 + Double.MIN_EXPONENT - Float.MIN_EXPONENT)); - return s.replaceFirst("p-1022$", "p-126"); + // The char sequence "-1022" can only appear in the + // representation of the exponent, not in the (hex) significand. + return s.replace("-1022", "-126"); } else // double string will be the same as float string return Double.toHexString(f); diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Float16.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Float16.java index fe2a6bf5580..335cbef2331 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Float16.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Float16.java @@ -295,10 +295,12 @@ public final class Float16 // replace subnormal double exponent with subnormal Float16 // exponent String s = Double.toHexString(Math.scalb((double)f, - /* -1022+14 */ - Double.MIN_EXPONENT- + // -1022 + 14 + Double.MIN_EXPONENT - MIN_EXPONENT)); - return s.replaceFirst("p-1022$", "p-14"); + // The char sequence "-1022" can only appear in the + // representation of the exponent, not in the (hex) significand. + return s.replace("-1022", "-14"); } else {// double string will be the same as Float16 string return Double.toHexString(f); }