Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Mar 2020 18:50:55 +0000 (UTC)
From:      "Alfredo Dal'Ava Junior" <alfredo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r359342 - head/lib/msun/src
Message-ID:  <202003261850.02QIotTP057576@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: alfredo
Date: Thu Mar 26 18:50:54 2020
New Revision: 359342
URL: https://svnweb.freebsd.org/changeset/base/359342

Log:
  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

Modified:
  head/lib/msun/src/s_nan.c

Modified: head/lib/msun/src/s_nan.c
==============================================================================
--- head/lib/msun/src/s_nan.c	Thu Mar 26 17:59:48 2020	(r359341)
+++ head/lib/msun/src/s_nan.c	Thu Mar 26 18:50:54 2020	(r359342)
@@ -66,14 +66,15 @@ _scan_nan(uint32_t *words, int num_words, const char *
 		;
 
 	/* 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
 	}
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202003261850.02QIotTP057576>