Module Name:    src
Committed By:   martin
Date:           Sun Feb  2 08:14:39 UTC 2014

Modified Files:
        src/lib/libc/arch/sparc64/softfloat: qp.c

Log Message:
Fix unsigned 64 bit int to long double conversion for numbers that would not
fit into a signed 64 bit int. Found by latest t_floatunditf test case
failuer, hint from Matt Thomas.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/lib/libc/arch/sparc64/softfloat/qp.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/arch/sparc64/softfloat/qp.c
diff -u src/lib/libc/arch/sparc64/softfloat/qp.c:1.10 src/lib/libc/arch/sparc64/softfloat/qp.c:1.11
--- src/lib/libc/arch/sparc64/softfloat/qp.c:1.10	Fri Feb 15 09:24:05 2013
+++ src/lib/libc/arch/sparc64/softfloat/qp.c	Sun Feb  2 08:14:39 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: qp.c,v 1.10 2013/02/15 09:24:05 martin Exp $ */
+/* $NetBSD: qp.c,v 1.11 2014/02/02 08:14:39 martin Exp $ */
 
 /*-
  * Copyright (c) 2002, 2003 The NetBSD Foundation, Inc.
@@ -32,6 +32,7 @@
 #include "milieu.h"
 #include "softfloat.h"
 
+int printf(const char *, ...);
 
 void _Qp_add(float128 *c, float128 *a, float128 *b);
 int  _Qp_cmp(float128 *a, float128 *b);
@@ -166,9 +167,10 @@ _Qp_mul(float128 *c, float128 *a, float1
 
 
 /*
- * XXX need corresponding softfloat function
+ * XXX need corresponding softfloat functions
  */
 static float128 __sf128_zero = {0x4034000000000000, 0x00000000};
+static float128 __sf128_one = {0x3fff000000000000, 0};
 
 void
 _Qp_neg(float128 *c, float128 *a)
@@ -268,13 +270,15 @@ _Qp_uitoq(float128 *c, unsigned int a)
 void
 _Qp_uxtoq(float128 *c, unsigned long a)
 {
-
 	if (a & 0x8000000000000000ULL) {
-		a = (a >> 1) | (a & 1);
-		*c = int64_to_float128((long long)a);
+		/* a would not fit in a signed conversion */
+		*c = int64_to_float128((long long)(a>>1));
 		*c = float128_add(*c, *c);
-	} else
+		if (a & 1)
+			*c = float128_add(*c, __sf128_one);
+	} else {
 		*c = int64_to_float128((long long)a);
+	}
 }
 
 

Reply via email to