diff options
author | Alfredo Dal'Ava Junior <alfredo@FreeBSD.org> | 2020-03-26 18:50:54 +0000 |
---|---|---|
committer | Alfredo Dal'Ava Junior <alfredo@FreeBSD.org> | 2020-03-26 18:50:54 +0000 |
commit | f1343c7f6721b6a6de43813b57aa5e09cb4fd5f5 (patch) | |
tree | c8b91e97667657766898b078281a79094ce2ebff /lib/msun | |
parent | 68fbe6f0b3e8eff10667f63dae166f3c50e1f59a (diff) | |
download | src-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.c | 9 |
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 } } |