diff options
author | Stephen Hines <srhines@google.com> | 2021-02-18 23:50:56 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-02-18 23:50:56 +0000 |
commit | 015fd0f2a06d43d5274e6d9a9675f7d575df0316 (patch) | |
tree | bf795792c727b7d3d47af92580a2ac7157e72cd1 | |
parent | 9a78dff918d9ff9c13af0e9d271c60f85b2e1ebc (diff) | |
parent | 39516316e3ebca9e30fe9c4c6194a7c2c120d47b (diff) | |
download | FP16-android12-qpr1-d-release.tar.gz |
Fix undefined behavior (UB) from calling builtin_clz(0) am: c2b391b076 am: a738f586f1 am: 39516316e3android-vts-12.1_r2android-mainline-12.0.0_r4android-mainline-12.0.0_r36android-cts-12.1_r2android-12.1.0_r26android-12.1.0_r25android-12.1.0_r24android-12.1.0_r23android-12.1.0_r18android-12.1.0_r17android-12.1.0_r16android-12.1.0_r15android-12.1.0_r14android-12.1.0_r13android-12.1.0_r12android-12.0.0_r32android-12.0.0_r29android-12.0.0_r28android-12.0.0_r27android-12.0.0_r26android-12.0.0_r21android-12.0.0_r20android-12.0.0_r19android-12.0.0_r18android-12.0.0_r16android12L-devandroid12L-d2-s8-releaseandroid12L-d2-s7-releaseandroid12L-d2-s6-releaseandroid12L-d2-s5-releaseandroid12L-d2-s4-releaseandroid12L-d2-s3-releaseandroid12L-d2-s2-releaseandroid12L-d2-s1-releaseandroid12L-d2-releaseandroid12-qpr1-releaseandroid12-qpr1-d-s3-releaseandroid12-qpr1-d-s2-releaseandroid12-qpr1-d-s1-releaseandroid12-qpr1-d-releaseandroid12-devandroid12--mainline-release
Original change: https://android-review.googlesource.com/c/platform/external/FP16/+/1592859
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I2bc65e43ffe3fb920c36d421565df7f6b01d572c
-rw-r--r-- | include/fp16/fp16.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/fp16/fp16.h b/include/fp16/fp16.h index 2b61fff..a283d67 100644 --- a/include/fp16/fp16.h +++ b/include/fp16/fp16.h @@ -64,7 +64,7 @@ static inline uint32_t fp16_ieee_to_fp32_bits(uint16_t h) { _BitScanReverse(&nonsign_bsr, (unsigned long) nonsign); uint32_t renorm_shift = (uint32_t) nonsign_bsr ^ 31; #else - uint32_t renorm_shift = __builtin_clz(nonsign); + uint32_t renorm_shift = nonsign ? __builtin_clz(nonsign) : 32; #endif renorm_shift = renorm_shift > 5 ? renorm_shift - 5 : 0; /* @@ -293,7 +293,7 @@ static inline uint32_t fp16_alt_to_fp32_bits(uint16_t h) { _BitScanReverse(&nonsign_bsr, (unsigned long) nonsign); uint32_t renorm_shift = (uint32_t) nonsign_bsr ^ 31; #else - uint32_t renorm_shift = __builtin_clz(nonsign); + uint32_t renorm_shift = nonsign ? __builtin_clz(nonsign) : 32; #endif renorm_shift = renorm_shift > 5 ? renorm_shift - 5 : 0; /* |