aboutsummaryrefslogtreecommitdiff
path: root/lib/msun
diff options
context:
space:
mode:
authorAlfredo Dal'Ava Junior <alfredo@FreeBSD.org>2020-03-26 18:50:54 +0000
committerAlfredo Dal'Ava Junior <alfredo@FreeBSD.org>2020-03-26 18:50:54 +0000
commitf1343c7f6721b6a6de43813b57aa5e09cb4fd5f5 (patch)
treec8b91e97667657766898b078281a79094ce2ebff /lib/msun
parent68fbe6f0b3e8eff10667f63dae166f3c50e1f59a (diff)
downloadsrc-f1343c7f6721b6a6de43813b57aa5e09cb4fd5f5.tar.gz
src-f1343c7f6721b6a6de43813b57aa5e09cb4fd5f5.zip
msun: swap words order instead of bits order on BIG ENDIAN
The "for" loop on big endian was inverting all the bits instead of just the words Issue reported by TestSuite (msun lib nan_test case) Submitted by: Renato Riolino <renato.riolino@eldorado.org.br> Submitted by: Fernando Valle <fernando.valle@eldorado.org.br> Reviewed by: pfg, alfredo Approved by: jhibbits (mentor) Sponsored by: Eldorado Research Institute (eldorado.org.br) Differential Revision: https://reviews.freebsd.org/D23926
Notes
Notes: svn path=/head/; revision=359342
Diffstat (limited to 'lib/msun')
-rw-r--r--lib/msun/src/s_nan.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/msun/src/s_nan.c b/lib/msun/src/s_nan.c
index 659e98179770..17692445ac52 100644
--- a/lib/msun/src/s_nan.c
+++ b/lib/msun/src/s_nan.c
@@ -66,14 +66,15 @@ _scan_nan(uint32_t *words, int num_words, const char *s)
;
/* Scan backwards, filling in the bits in words[] as we go. */
-#if _BYTE_ORDER == _LITTLE_ENDIAN
for (bitpos = 0; bitpos < 32 * num_words; bitpos += 4) {
-#else
- for (bitpos = 32 * num_words - 4; bitpos >= 0; bitpos -= 4) {
-#endif
if (--si < 0)
break;
+#if _BYTE_ORDER == _LITTLE_ENDIAN
words[bitpos / 32] |= digittoint(s[si]) << (bitpos % 32);
+#else
+ words[num_words - 1 - bitpos / 32] |=
+ digittoint(s[si]) << (bitpos % 32);
+#endif
}
}