Module Name: src Committed By: matt Date: Mon Jul 4 08:02:35 UTC 2011
Modified Files: src/lib/libc/arch/arm/softfloat: softfloat.h src/lib/libc/arch/m68k/softfloat: softfloat.h src/lib/libc/arch/mips/softfloat: softfloat.h src/lib/libc/arch/powerpc/softfloat: softfloat.h src/lib/libc/arch/sh3/softfloat: softfloat.h src/lib/libc/arch/sparc64/softfloat: softfloat.h src/lib/libc/softfloat/bits64: softfloat.c Log Message: Add __floatunsidf __floatunsisf __floatunsitf routines. XXX i think they are correct but not sure. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/lib/libc/arch/arm/softfloat/softfloat.h cvs rdiff -u -r1.2 -r1.3 src/lib/libc/arch/m68k/softfloat/softfloat.h cvs rdiff -u -r1.3 -r1.4 src/lib/libc/arch/mips/softfloat/softfloat.h cvs rdiff -u -r1.5 -r1.6 src/lib/libc/arch/powerpc/softfloat/softfloat.h cvs rdiff -u -r1.9 -r1.10 src/lib/libc/arch/sh3/softfloat/softfloat.h cvs rdiff -u -r1.6 -r1.7 src/lib/libc/arch/sparc64/softfloat/softfloat.h cvs rdiff -u -r1.5 -r1.6 src/lib/libc/softfloat/bits64/softfloat.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/arm/softfloat/softfloat.h diff -u src/lib/libc/arch/arm/softfloat/softfloat.h:1.7 src/lib/libc/arch/arm/softfloat/softfloat.h:1.8 --- src/lib/libc/arch/arm/softfloat/softfloat.h:1.7 Tue May 16 20:55:51 2006 +++ src/lib/libc/arch/arm/softfloat/softfloat.h Mon Jul 4 08:02:34 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.7 2006/05/16 20:55:51 mrg Exp $ */ +/* $NetBSD: softfloat.h,v 1.8 2011/07/04 08:02:34 matt Exp $ */ /* This is a derivative work. */ @@ -119,13 +119,17 @@ Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif #ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */ float32 int64_to_float32( long long ); Index: src/lib/libc/arch/m68k/softfloat/softfloat.h diff -u src/lib/libc/arch/m68k/softfloat/softfloat.h:1.2 src/lib/libc/arch/m68k/softfloat/softfloat.h:1.3 --- src/lib/libc/arch/m68k/softfloat/softfloat.h:1.2 Tue May 16 20:55:51 2006 +++ src/lib/libc/arch/m68k/softfloat/softfloat.h Mon Jul 4 08:02:34 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.2 2006/05/16 20:55:51 mrg Exp $ */ +/* $NetBSD: softfloat.h,v 1.3 2011/07/04 08:02:34 matt Exp $ */ /* This is a derivative work. */ @@ -119,13 +119,17 @@ Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif float32 int64_to_float32( long long ); float64 int64_to_float64( long long ); Index: src/lib/libc/arch/mips/softfloat/softfloat.h diff -u src/lib/libc/arch/mips/softfloat/softfloat.h:1.3 src/lib/libc/arch/mips/softfloat/softfloat.h:1.4 --- src/lib/libc/arch/mips/softfloat/softfloat.h:1.3 Mon Jan 17 23:53:04 2011 +++ src/lib/libc/arch/mips/softfloat/softfloat.h Mon Jul 4 08:02:34 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.3 2011/01/17 23:53:04 matt Exp $ */ +/* $NetBSD: softfloat.h,v 1.4 2011/07/04 08:02:34 matt Exp $ */ /* This is a derivative work. */ @@ -121,13 +121,17 @@ Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif #ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */ float32 int64_to_float32( long long ); Index: src/lib/libc/arch/powerpc/softfloat/softfloat.h diff -u src/lib/libc/arch/powerpc/softfloat/softfloat.h:1.5 src/lib/libc/arch/powerpc/softfloat/softfloat.h:1.6 --- src/lib/libc/arch/powerpc/softfloat/softfloat.h:1.5 Tue May 16 20:55:51 2006 +++ src/lib/libc/arch/powerpc/softfloat/softfloat.h Mon Jul 4 08:02:34 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.5 2006/05/16 20:55:51 mrg Exp $ */ +/* $NetBSD: softfloat.h,v 1.6 2011/07/04 08:02:34 matt Exp $ */ /* This is a derivative work. */ @@ -119,13 +119,17 @@ Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif float32 int64_to_float32( long long ); float64 int64_to_float64( long long ); Index: src/lib/libc/arch/sh3/softfloat/softfloat.h diff -u src/lib/libc/arch/sh3/softfloat/softfloat.h:1.9 src/lib/libc/arch/sh3/softfloat/softfloat.h:1.10 --- src/lib/libc/arch/sh3/softfloat/softfloat.h:1.9 Tue May 16 20:55:51 2006 +++ src/lib/libc/arch/sh3/softfloat/softfloat.h Mon Jul 4 08:02:34 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.9 2006/05/16 20:55:51 mrg Exp $ */ +/* $NetBSD: softfloat.h,v 1.10 2011/07/04 08:02:34 matt Exp $ */ /* This is a derivative work. */ @@ -119,13 +119,17 @@ Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif #ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */ float32 int64_to_float32( long long ); Index: src/lib/libc/arch/sparc64/softfloat/softfloat.h diff -u src/lib/libc/arch/sparc64/softfloat/softfloat.h:1.6 src/lib/libc/arch/sparc64/softfloat/softfloat.h:1.7 --- src/lib/libc/arch/sparc64/softfloat/softfloat.h:1.6 Thu Nov 8 15:50:23 2007 +++ src/lib/libc/arch/sparc64/softfloat/softfloat.h Mon Jul 4 08:02:35 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.6 2007/11/08 15:50:23 martin Exp $ */ +/* $NetBSD: softfloat.h,v 1.7 2011/07/04 08:02:35 matt Exp $ */ /* This is a derivative work. */ @@ -121,13 +121,17 @@ Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif float32 int64_to_float32( long long ); float64 int64_to_float64( long long ); Index: src/lib/libc/softfloat/bits64/softfloat.c diff -u src/lib/libc/softfloat/bits64/softfloat.c:1.5 src/lib/libc/softfloat/bits64/softfloat.c:1.6 --- src/lib/libc/softfloat/bits64/softfloat.c:1.5 Thu Nov 8 21:31:04 2007 +++ src/lib/libc/softfloat/bits64/softfloat.c Mon Jul 4 08:02:35 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.c,v 1.5 2007/11/08 21:31:04 martin Exp $ */ +/* $NetBSD: softfloat.c,v 1.6 2011/07/04 08:02:35 matt Exp $ */ /* * This version hacked for use with gcc -msoft-float by bjh21. @@ -46,7 +46,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: softfloat.c,v 1.5 2007/11/08 21:31:04 martin Exp $"); +__RCSID("$NetBSD: softfloat.c,v 1.6 2011/07/04 08:02:35 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #ifdef SOFTFLOAT_FOR_GCC @@ -1128,6 +1128,15 @@ } +float32 uint32_to_float32( uint32 a ) +{ + if ( a == 0 ) return 0; + if ( a & (bits32) 0x80000000 ) + return normalizeRoundAndPackFloat32( 0, 0x9D, a >> 1 ); + return normalizeRoundAndPackFloat32( 0, 0x9C, a ); +} + + /* ------------------------------------------------------------------------------- Returns the result of converting the 32-bit two's complement integer `a' @@ -1151,6 +1160,17 @@ } +float64 uint32_to_float64( uint32 a ) +{ + int8 shiftCount; + bits64 zSig = a; + + if ( a == 0 ) return 0; + shiftCount = countLeadingZeros32( a ) + 21; + return packFloat64( 0, 0x432 - shiftCount, zSig<<shiftCount ); + +} + #ifdef FLOATX80 /* @@ -1177,6 +1197,17 @@ } +floatx80 uint32_to_floatx80( uint32 a ) +{ + int8 shiftCount; + bits64 zSig = a; + + if ( a == 0 ) return packFloatx80( 0, 0, 0 ); + shiftCount = countLeadingZeros32( a ) + 32; + return packFloatx80( 0, 0x403E - shiftCount, zSig<<shiftCount ); + +} + #endif #ifdef FLOAT128 @@ -1204,6 +1235,17 @@ } +float128 uint32_to_float128( uint32 a ) +{ + int8 shiftCount; + bits64 zSig0 = a; + + if ( a == 0 ) return packFloat128( 0, 0, 0, 0 ); + shiftCount = countLeadingZeros32( a ) + 17; + return packFloat128( 0, 0x402E - shiftCount, zSig0<<shiftCount, 0 ); + +} + #endif #ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */