summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorxueliang.zhong <xueliang.zhong@linaro.org>2019-01-18 16:59:47 -0800
committerandroid-build-merger <android-build-merger@google.com>2019-01-18 16:59:47 -0800
commit01e3a8919bad9bcb29e86158306efd89ba8ee8ee (patch)
treeb3ccb85fb09c10f65858e870a28ae155afcbbde2 /core/java
parent55d0e93a15064a023586046f6bca48462140540d (diff)
parentb67858ba355fe9b84db3fe0e2f1844ea4c009762 (diff)
Merge "Quiet SNaN inputs in Half.toFloat()" am: a879fd8b02 am: fea7e9f20d
am: b67858ba35 Change-Id: I5edd03a8e40d32618ded5f409e72b8e29c75137b
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/util/Half.java4
1 files changed, 4 insertions, 0 deletions
diff --git a/core/java/android/util/Half.java b/core/java/android/util/Half.java
index 5718d994620d..70d049a6e985 100644
--- a/core/java/android/util/Half.java
+++ b/core/java/android/util/Half.java
@@ -162,6 +162,7 @@ public final class Half extends Number implements Comparable<Half> {
private static final int FP32_EXPONENT_MASK = 0xff;
private static final int FP32_SIGNIFICAND_MASK = 0x7fffff;
private static final int FP32_EXPONENT_BIAS = 127;
+ private static final int FP32_QNAN_MASK = 0x400000;
private static final int FP32_DENORMAL_MAGIC = 126 << 23;
private static final float FP32_DENORMAL_FLOAT = Float.intBitsToFloat(FP32_DENORMAL_MAGIC);
@@ -903,6 +904,9 @@ public final class Half extends Number implements Comparable<Half> {
outM = m << 13;
if (e == 0x1f) { // Infinite or NaN
outE = 0xff;
+ if (outM != 0) { // SNaNs are quieted
+ outM |= FP32_QNAN_MASK;
+ }
} else {
outE = e - FP16_EXPONENT_BIAS + FP32_EXPONENT_BIAS;
}