| 
					
				 | 
			
			
				@@ -1796,3 +1796,73 @@ Arithmetic. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 float32 float64_to_float32( struct roundingData *roundData, float64 a ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     flag aSign; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int16 aExp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    bits64 aSig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    bits32 zSig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aSig = extractFloat64Frac( a ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aExp = extractFloat64Exp( a ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aSign = extractFloat64Sign( a ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ( aExp == 0x7FF ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ( aSig ) return commonNaNToFloat32( float64ToCommonNaN( a ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return packFloat32( aSign, 0xFF, 0 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    shift64RightJamming( aSig, 22, &aSig ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    zSig = aSig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ( aExp || zSig ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zSig |= 0x40000000; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aExp -= 0x381; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return roundAndPackFloat32( roundData, aSign, aExp, zSig ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef FLOATX80 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+------------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Returns the result of converting the double-precision floating-point value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`a' to the extended double-precision floating-point format.  The conversion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+is performed according to the IEC/IEEE Standard for Binary Floating-point 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Arithmetic. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+------------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+floatx80 float64_to_floatx80( float64 a ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    flag aSign; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int16 aExp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    bits64 aSig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aSig = extractFloat64Frac( a ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aExp = extractFloat64Exp( a ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aSign = extractFloat64Sign( a ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ( aExp == 0x7FF ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ( aSig ) return commonNaNToFloatx80( float64ToCommonNaN( a ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ( aExp == 0 ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        normalizeFloat64Subnormal( aSig, &aExp, &aSig ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        packFloatx80( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aSign, aExp + 0x3C00, ( aSig | LIT64( 0x0010000000000000 ) )<<11 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+------------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Rounds the double-precision floating-point value `a' to an integer, and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+returns the result as a double-precision floating-point value.  The 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+operation is performed according to the IEC/IEEE Standard for Binary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Floating-point Arithmetic. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+------------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+float64 float64_round_to_int( struct roundingData *roundData, float64 a ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    flag aSign; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int16 aExp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    bits64 lastBitMask, roundBitsMask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int8 roundingMode; 
			 |