Added Berkeley softfloat library
(http://www.jhauser.us/arithmetic/SoftFloat.html) with RISCV specialization and cmake build
This commit is contained in:
		
							
								
								
									
										57
									
								
								softfloat/source/8086/extF80M_isSignalingNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								softfloat/source/8086/extF80M_isSignalingNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| *----------------------------------------------------------------------------*/ | ||||
| bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) | ||||
| { | ||||
|     const struct extFloat80M *aSPtr; | ||||
|     uint64_t uiA0; | ||||
|  | ||||
|     aSPtr = (const struct extFloat80M *) aPtr; | ||||
|     if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; | ||||
|     uiA0 = aSPtr->signif; | ||||
|     return | ||||
|         ! (uiA0 & UINT64_C( 0x4000000000000000 )) | ||||
|             && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										60
									
								
								softfloat/source/8086/f128M_isSignalingNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								softfloat/source/8086/f128M_isSignalingNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "primitives.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| *----------------------------------------------------------------------------*/ | ||||
| bool f128M_isSignalingNaN( const float128_t *aPtr ) | ||||
| { | ||||
|     const uint32_t *aWPtr; | ||||
|     uint32_t uiA96; | ||||
|  | ||||
|     aWPtr = (const uint32_t *) aPtr; | ||||
|     uiA96 = aWPtr[indexWordHi( 4 )]; | ||||
|     if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; | ||||
|     return | ||||
|         ((uiA96 & 0x00007FFF) != 0) | ||||
|             || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] | ||||
|                      | aWPtr[indexWord( 4, 0 )]) | ||||
|                     != 0); | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										56
									
								
								softfloat/source/8086/s_commonNaNToExtF80M.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								softfloat/source/8086/s_commonNaNToExtF80M.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by `aPtr' into an 80-bit extended | ||||
| | floating-point NaN, and stores this NaN at the location pointed to by | ||||
| | `zSPtr'. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_commonNaNToExtF80M( | ||||
|      const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) | ||||
| { | ||||
|  | ||||
|     zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF ); | ||||
|     zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										56
									
								
								softfloat/source/8086/s_commonNaNToExtF80UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								softfloat/source/8086/s_commonNaNToExtF80UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "primitives.h" | ||||
| #include "specialize.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by `aPtr' into an 80-bit extended | ||||
| | floating-point NaN, and returns the bit pattern of this value as an unsigned | ||||
| | integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) | ||||
| { | ||||
|     struct uint128 uiZ; | ||||
|  | ||||
|     uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF; | ||||
|     uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; | ||||
|     return uiZ; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										56
									
								
								softfloat/source/8086/s_commonNaNToF128M.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								softfloat/source/8086/s_commonNaNToF128M.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "primitives.h" | ||||
| #include "specialize.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point | ||||
| | NaN, and stores this NaN at the location pointed to by `zWPtr'.  Argument | ||||
| | `zWPtr' points to an array of four 32-bit elements that concatenate in the | ||||
| | platform's normal endian order to form a 128-bit floating-point value. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) | ||||
| { | ||||
|  | ||||
|     softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr ); | ||||
|     zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										55
									
								
								softfloat/source/8086/s_commonNaNToF128UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								softfloat/source/8086/s_commonNaNToF128UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "primitives.h" | ||||
| #include "specialize.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) | ||||
| { | ||||
|     struct uint128 uiZ; | ||||
|  | ||||
|     uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 ); | ||||
|     uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 ); | ||||
|     return uiZ; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										51
									
								
								softfloat/source/8086/s_commonNaNToF16UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								softfloat/source/8086/s_commonNaNToF16UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of | ||||
| California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "specialize.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by `aPtr' into a 16-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ) | ||||
| { | ||||
|  | ||||
|     return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										51
									
								
								softfloat/source/8086/s_commonNaNToF32UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								softfloat/source/8086/s_commonNaNToF32UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "specialize.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by `aPtr' into a 32-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ) | ||||
| { | ||||
|  | ||||
|     return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										53
									
								
								softfloat/source/8086/s_commonNaNToF64UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								softfloat/source/8086/s_commonNaNToF64UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "specialize.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by `aPtr' into a 64-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ) | ||||
| { | ||||
|  | ||||
|     return | ||||
|         (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 ) | ||||
|             | aPtr->v64>>12; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										62
									
								
								softfloat/source/8086/s_extF80MToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								softfloat/source/8086/s_extF80MToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the 80-bit extended floating-point value pointed to by `aSPtr' is | ||||
| | a NaN, converts this NaN to the common NaN form, and stores the resulting | ||||
| | common NaN at the location pointed to by `zPtr'.  If the NaN is a signaling | ||||
| | NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_extF80MToCommonNaN( | ||||
|      const struct extFloat80M *aSPtr, struct commonNaN *zPtr ) | ||||
| { | ||||
|  | ||||
|     if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|     } | ||||
|     zPtr->sign = signExtF80UI64( aSPtr->signExp ); | ||||
|     zPtr->v64 = aSPtr->signif<<1; | ||||
|     zPtr->v0  = 0; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										62
									
								
								softfloat/source/8086/s_extF80UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								softfloat/source/8086/s_extF80UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' | ||||
| | has the bit pattern of an 80-bit extended floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by `zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_extF80UIToCommonNaN( | ||||
|      uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) | ||||
| { | ||||
|  | ||||
|     if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|     } | ||||
|     zPtr->sign = uiA64>>15; | ||||
|     zPtr->v64  = uiA0<<1; | ||||
|     zPtr->v0   = 0; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										62
									
								
								softfloat/source/8086/s_f128MToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								softfloat/source/8086/s_f128MToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "primitives.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the 128-bit floating-point value pointed to by `aWPtr' is a NaN, | ||||
| | converts this NaN to the common NaN form, and stores the resulting common | ||||
| | NaN at the location pointed to by `zPtr'.  If the NaN is a signaling NaN, | ||||
| | the invalid exception is raised.  Argument `aWPtr' points to an array of | ||||
| | four 32-bit elements that concatenate in the platform's normal endian order | ||||
| | to form a 128-bit floating-point value. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ) | ||||
| { | ||||
|  | ||||
|     if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|     } | ||||
|     zPtr->sign = aWPtr[indexWordHi( 4 )]>>31; | ||||
|     softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 ); | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										65
									
								
								softfloat/source/8086/s_f128UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								softfloat/source/8086/s_f128UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "primitives.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' | ||||
| | has the bit pattern of a 128-bit floating-point NaN, converts this NaN to | ||||
| | the common NaN form, and stores the resulting common NaN at the location | ||||
| | pointed to by `zPtr'.  If the NaN is a signaling NaN, the invalid exception | ||||
| | is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_f128UIToCommonNaN( | ||||
|      uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) | ||||
| { | ||||
|     struct uint128 NaNSig; | ||||
|  | ||||
|     if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|     } | ||||
|     NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 ); | ||||
|     zPtr->sign = uiA64>>63; | ||||
|     zPtr->v64  = NaNSig.v64; | ||||
|     zPtr->v0   = NaNSig.v0; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										59
									
								
								softfloat/source/8086/s_f16UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								softfloat/source/8086/s_f16UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of | ||||
| California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming `uiA' has the bit pattern of a 16-bit floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by `zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ) | ||||
| { | ||||
|  | ||||
|     if ( softfloat_isSigNaNF16UI( uiA ) ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|     } | ||||
|     zPtr->sign = uiA>>15; | ||||
|     zPtr->v64  = (uint_fast64_t) uiA<<54; | ||||
|     zPtr->v0   = 0; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										59
									
								
								softfloat/source/8086/s_f32UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								softfloat/source/8086/s_f32UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming `uiA' has the bit pattern of a 32-bit floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by `zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ) | ||||
| { | ||||
|  | ||||
|     if ( softfloat_isSigNaNF32UI( uiA ) ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|     } | ||||
|     zPtr->sign = uiA>>31; | ||||
|     zPtr->v64  = (uint_fast64_t) uiA<<41; | ||||
|     zPtr->v0   = 0; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										59
									
								
								softfloat/source/8086/s_f64UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								softfloat/source/8086/s_f64UIToCommonNaN.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming `uiA' has the bit pattern of a 64-bit floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by `zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ) | ||||
| { | ||||
|  | ||||
|     if ( softfloat_isSigNaNF64UI( uiA ) ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|     } | ||||
|     zPtr->sign = uiA>>63; | ||||
|     zPtr->v64  = uiA<<12; | ||||
|     zPtr->v0   = 0; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										107
									
								
								softfloat/source/8086/s_propagateNaNExtF80M.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								softfloat/source/8086/s_propagateNaNExtF80M.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming at least one of the two 80-bit extended floating-point values | ||||
| | pointed to by `aSPtr' and `bSPtr' is a NaN, stores the combined NaN result | ||||
| | at the location pointed to by `zSPtr'.  If either original floating-point | ||||
| | value is a signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_propagateNaNExtF80M( | ||||
|      const struct extFloat80M *aSPtr, | ||||
|      const struct extFloat80M *bSPtr, | ||||
|      struct extFloat80M *zSPtr | ||||
|  ) | ||||
| { | ||||
|     bool isSigNaNA; | ||||
|     const struct extFloat80M *sPtr; | ||||
|     bool isSigNaNB; | ||||
|     uint_fast16_t uiB64; | ||||
|     uint64_t uiB0; | ||||
|     uint_fast16_t uiA64; | ||||
|     uint64_t uiA0; | ||||
|     uint_fast16_t uiMagA64, uiMagB64; | ||||
|  | ||||
|     isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ); | ||||
|     sPtr = aSPtr; | ||||
|     if ( ! bSPtr ) { | ||||
|         if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         goto copy; | ||||
|     } | ||||
|     isSigNaNB = extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr ); | ||||
|     if ( isSigNaNA | isSigNaNB ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         if ( isSigNaNA ) { | ||||
|             uiB64 = bSPtr->signExp; | ||||
|             if ( isSigNaNB ) goto returnLargerUIMag; | ||||
|             uiB0 = bSPtr->signif; | ||||
|             if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto copyB; | ||||
|             goto copy; | ||||
|         } else { | ||||
|             uiA64 = aSPtr->signExp; | ||||
|             uiA0 = aSPtr->signif; | ||||
|             if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto copy; | ||||
|             goto copyB; | ||||
|         } | ||||
|     } | ||||
|     uiB64 = bSPtr->signExp; | ||||
|  returnLargerUIMag: | ||||
|     uiA64 = aSPtr->signExp; | ||||
|     uiMagA64 = uiA64 & 0x7FFF; | ||||
|     uiMagB64 = uiB64 & 0x7FFF; | ||||
|     if ( uiMagA64 < uiMagB64 ) goto copyB; | ||||
|     if ( uiMagB64 < uiMagA64 ) goto copy; | ||||
|     uiA0 = aSPtr->signif; | ||||
|     uiB0 = bSPtr->signif; | ||||
|     if ( uiA0 < uiB0 ) goto copyB; | ||||
|     if ( uiB0 < uiA0 ) goto copy; | ||||
|     if ( uiA64 < uiB64 ) goto copy; | ||||
|  copyB: | ||||
|     sPtr = bSPtr; | ||||
|  copy: | ||||
|     zSPtr->signExp = sPtr->signExp; | ||||
|     zSPtr->signif = sPtr->signif | UINT64_C( 0xC000000000000000 ); | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										106
									
								
								softfloat/source/8086/s_propagateNaNExtF80UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								softfloat/source/8086/s_propagateNaNExtF80UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of | ||||
| California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting the unsigned integer formed from concatenating 'uiA64' and | ||||
| | 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting | ||||
| | the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | ||||
| | 80-bit extended floating-point value, and assuming at least on of these | ||||
| | floating-point values is a NaN, returns the bit pattern of the combined NaN | ||||
| | result.  If either original floating-point value is a signaling NaN, the | ||||
| | invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 | ||||
|  softfloat_propagateNaNExtF80UI( | ||||
|      uint_fast16_t uiA64, | ||||
|      uint_fast64_t uiA0, | ||||
|      uint_fast16_t uiB64, | ||||
|      uint_fast64_t uiB0 | ||||
|  ) | ||||
| { | ||||
|     bool isSigNaNA, isSigNaNB; | ||||
|     uint_fast64_t uiNonsigA0, uiNonsigB0; | ||||
|     uint_fast16_t uiMagA64, uiMagB64; | ||||
|     struct uint128 uiZ; | ||||
|  | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 ); | ||||
|     isSigNaNB = softfloat_isSigNaNExtF80UI( uiB64, uiB0 ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     | Make NaNs non-signaling. | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     uiNonsigA0 = uiA0 | UINT64_C( 0xC000000000000000 ); | ||||
|     uiNonsigB0 = uiB0 | UINT64_C( 0xC000000000000000 ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     if ( isSigNaNA | isSigNaNB ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         if ( isSigNaNA ) { | ||||
|             if ( isSigNaNB ) goto returnLargerMag; | ||||
|             if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto returnB; | ||||
|             goto returnA; | ||||
|         } else { | ||||
|             if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto returnA; | ||||
|             goto returnB; | ||||
|         } | ||||
|     } | ||||
|  returnLargerMag: | ||||
|     uiMagA64 = uiA64 & 0x7FFF; | ||||
|     uiMagB64 = uiB64 & 0x7FFF; | ||||
|     if ( uiMagA64 < uiMagB64 ) goto returnB; | ||||
|     if ( uiMagB64 < uiMagA64 ) goto returnA; | ||||
|     if ( uiA0 < uiB0 ) goto returnB; | ||||
|     if ( uiB0 < uiA0 ) goto returnA; | ||||
|     if ( uiA64 < uiB64 ) goto returnA; | ||||
|  returnB: | ||||
|     uiZ.v64 = uiB64; | ||||
|     uiZ.v0  = uiNonsigB0; | ||||
|     return uiZ; | ||||
|  returnA: | ||||
|     uiZ.v64 = uiA64; | ||||
|     uiZ.v0  = uiNonsigA0; | ||||
|     return uiZ; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										108
									
								
								softfloat/source/8086/s_propagateNaNF128M.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								softfloat/source/8086/s_propagateNaNF128M.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming at least one of the two 128-bit floating-point values pointed to by | ||||
| | `aWPtr' and `bWPtr' is a NaN, stores the combined NaN result at the location | ||||
| | pointed to by `zWPtr'.  If either original floating-point value is a | ||||
| | signaling NaN, the invalid exception is raised.  Each of `aWPtr', `bWPtr', | ||||
| | and `zWPtr' points to an array of four 32-bit elements that concatenate in | ||||
| | the platform's normal endian order to form a 128-bit floating-point value. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_propagateNaNF128M( | ||||
|      const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) | ||||
| { | ||||
|     bool isSigNaNA; | ||||
|     const uint32_t *ptr; | ||||
|     bool isSigNaNB; | ||||
|     uint32_t uiA96, uiB96, wordMagA, wordMagB; | ||||
|  | ||||
|     isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); | ||||
|     ptr = aWPtr; | ||||
|     if ( ! bWPtr ) { | ||||
|         if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         goto copy; | ||||
|     } | ||||
|     isSigNaNB = f128M_isSignalingNaN( (const float128_t *) bWPtr ); | ||||
|     if ( isSigNaNA | isSigNaNB ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         if ( isSigNaNA ) { | ||||
|             if ( isSigNaNB ) goto returnLargerUIMag; | ||||
|             if ( softfloat_isNaNF128M( bWPtr ) ) goto copyB; | ||||
|             goto copy; | ||||
|         } else { | ||||
|             if ( softfloat_isNaNF128M( aWPtr ) ) goto copy; | ||||
|             goto copyB; | ||||
|         } | ||||
|     } | ||||
|  returnLargerUIMag: | ||||
|     uiA96 = aWPtr[indexWordHi( 4 )]; | ||||
|     uiB96 = bWPtr[indexWordHi( 4 )]; | ||||
|     wordMagA = uiA96 & 0x7FFFFFFF; | ||||
|     wordMagB = uiB96 & 0x7FFFFFFF; | ||||
|     if ( wordMagA < wordMagB ) goto copyB; | ||||
|     if ( wordMagB < wordMagA ) goto copy; | ||||
|     wordMagA = aWPtr[indexWord( 4, 2 )]; | ||||
|     wordMagB = bWPtr[indexWord( 4, 2 )]; | ||||
|     if ( wordMagA < wordMagB ) goto copyB; | ||||
|     if ( wordMagB < wordMagA ) goto copy; | ||||
|     wordMagA = aWPtr[indexWord( 4, 1 )]; | ||||
|     wordMagB = bWPtr[indexWord( 4, 1 )]; | ||||
|     if ( wordMagA < wordMagB ) goto copyB; | ||||
|     if ( wordMagB < wordMagA ) goto copy; | ||||
|     wordMagA = aWPtr[indexWord( 4, 0 )]; | ||||
|     wordMagB = bWPtr[indexWord( 4, 0 )]; | ||||
|     if ( wordMagA < wordMagB ) goto copyB; | ||||
|     if ( wordMagB < wordMagA ) goto copy; | ||||
|     if ( uiA96 < uiB96 ) goto copy; | ||||
|  copyB: | ||||
|     ptr = bWPtr; | ||||
|  copy: | ||||
|     zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000; | ||||
|     zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )]; | ||||
|     zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )]; | ||||
|     zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )]; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										105
									
								
								softfloat/source/8086/s_propagateNaNF128UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								softfloat/source/8086/s_propagateNaNF128UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of | ||||
| California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting the unsigned integer formed from concatenating 'uiA64' and | ||||
| | 'uiA0' as a 128-bit floating-point value, and likewise interpreting the | ||||
| | unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | ||||
| | 128-bit floating-point value, and assuming at least on of these floating- | ||||
| | point values is a NaN, returns the bit pattern of the combined NaN result. | ||||
| | If either original floating-point value is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 | ||||
|  softfloat_propagateNaNF128UI( | ||||
|      uint_fast64_t uiA64, | ||||
|      uint_fast64_t uiA0, | ||||
|      uint_fast64_t uiB64, | ||||
|      uint_fast64_t uiB0 | ||||
|  ) | ||||
| { | ||||
|     bool isSigNaNA, isSigNaNB; | ||||
|     uint_fast64_t uiNonsigA64, uiNonsigB64, uiMagA64, uiMagB64; | ||||
|     struct uint128 uiZ; | ||||
|  | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); | ||||
|     isSigNaNB = softfloat_isSigNaNF128UI( uiB64, uiB0 ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     | Make NaNs non-signaling. | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     uiNonsigA64 = uiA64 | UINT64_C( 0x0000800000000000 ); | ||||
|     uiNonsigB64 = uiB64 | UINT64_C( 0x0000800000000000 ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     if ( isSigNaNA | isSigNaNB ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         if ( isSigNaNA ) { | ||||
|             if ( isSigNaNB ) goto returnLargerMag; | ||||
|             if ( isNaNF128UI( uiB64, uiB0 ) ) goto returnB; | ||||
|             goto returnA; | ||||
|         } else { | ||||
|             if ( isNaNF128UI( uiA64, uiA0 ) ) goto returnA; | ||||
|             goto returnB; | ||||
|         } | ||||
|     } | ||||
|  returnLargerMag: | ||||
|     uiMagA64 = uiA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); | ||||
|     uiMagB64 = uiB64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); | ||||
|     if ( uiMagA64 < uiMagB64 ) goto returnB; | ||||
|     if ( uiMagB64 < uiMagA64 ) goto returnA; | ||||
|     if ( uiA0 < uiB0 ) goto returnB; | ||||
|     if ( uiB0 < uiA0 ) goto returnA; | ||||
|     if ( uiNonsigA64 < uiNonsigB64 ) goto returnA; | ||||
|  returnB: | ||||
|     uiZ.v64 = uiNonsigB64; | ||||
|     uiZ.v0  = uiB0; | ||||
|     return uiZ; | ||||
|  returnA: | ||||
|     uiZ.v64 = uiNonsigA64; | ||||
|     uiZ.v0  = uiA0; | ||||
|     return uiZ; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										84
									
								
								softfloat/source/8086/s_propagateNaNF16UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								softfloat/source/8086/s_propagateNaNF16UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the | ||||
| University of California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- | ||||
| | point values, at least one of which is a NaN, returns the bit pattern of | ||||
| | the combined NaN result.  If either 'uiA' or 'uiB' has the pattern of a | ||||
| | signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast16_t | ||||
|  softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ) | ||||
| { | ||||
|     bool isSigNaNA, isSigNaNB; | ||||
|     uint_fast16_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; | ||||
|  | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     isSigNaNA = softfloat_isSigNaNF16UI( uiA ); | ||||
|     isSigNaNB = softfloat_isSigNaNF16UI( uiB ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     | Make NaNs non-signaling. | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     uiNonsigA = uiA | 0x0200; | ||||
|     uiNonsigB = uiB | 0x0200; | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     if ( isSigNaNA | isSigNaNB ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         if ( isSigNaNA ) { | ||||
|             if ( isSigNaNB ) goto returnLargerMag; | ||||
|             return isNaNF16UI( uiB ) ? uiNonsigB : uiNonsigA; | ||||
|         } else { | ||||
|             return isNaNF16UI( uiA ) ? uiNonsigA : uiNonsigB; | ||||
|         } | ||||
|     } | ||||
|  returnLargerMag: | ||||
|     uiMagA = uiA & 0x7FFF; | ||||
|     uiMagB = uiB & 0x7FFF; | ||||
|     if ( uiMagA < uiMagB ) return uiNonsigB; | ||||
|     if ( uiMagB < uiMagA ) return uiNonsigA; | ||||
|     return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										84
									
								
								softfloat/source/8086/s_propagateNaNF32UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								softfloat/source/8086/s_propagateNaNF32UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of | ||||
| California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- | ||||
| | point values, at least one of which is a NaN, returns the bit pattern of | ||||
| | the combined NaN result.  If either 'uiA' or 'uiB' has the pattern of a | ||||
| | signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast32_t | ||||
|  softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ) | ||||
| { | ||||
|     bool isSigNaNA, isSigNaNB; | ||||
|     uint_fast32_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; | ||||
|  | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     isSigNaNA = softfloat_isSigNaNF32UI( uiA ); | ||||
|     isSigNaNB = softfloat_isSigNaNF32UI( uiB ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     | Make NaNs non-signaling. | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     uiNonsigA = uiA | 0x00400000; | ||||
|     uiNonsigB = uiB | 0x00400000; | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     if ( isSigNaNA | isSigNaNB ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         if ( isSigNaNA ) { | ||||
|             if ( isSigNaNB ) goto returnLargerMag; | ||||
|             return isNaNF32UI( uiB ) ? uiNonsigB : uiNonsigA; | ||||
|         } else { | ||||
|             return isNaNF32UI( uiA ) ? uiNonsigA : uiNonsigB; | ||||
|         } | ||||
|     } | ||||
|  returnLargerMag: | ||||
|     uiMagA = uiA & 0x7FFFFFFF; | ||||
|     uiMagB = uiB & 0x7FFFFFFF; | ||||
|     if ( uiMagA < uiMagB ) return uiNonsigB; | ||||
|     if ( uiMagB < uiMagA ) return uiNonsigA; | ||||
|     return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										84
									
								
								softfloat/source/8086/s_propagateNaNF64UI.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								softfloat/source/8086/s_propagateNaNF64UI.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of | ||||
| California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "platform.h" | ||||
| #include "internals.h" | ||||
| #include "specialize.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- | ||||
| | point values, at least one of which is a NaN, returns the bit pattern of | ||||
| | the combined NaN result.  If either 'uiA' or 'uiB' has the pattern of a | ||||
| | signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast64_t | ||||
|  softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ) | ||||
| { | ||||
|     bool isSigNaNA, isSigNaNB; | ||||
|     uint_fast64_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; | ||||
|  | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     isSigNaNA = softfloat_isSigNaNF64UI( uiA ); | ||||
|     isSigNaNB = softfloat_isSigNaNF64UI( uiB ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     | Make NaNs non-signaling. | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     uiNonsigA = uiA | UINT64_C( 0x0008000000000000 ); | ||||
|     uiNonsigB = uiB | UINT64_C( 0x0008000000000000 ); | ||||
|     /*------------------------------------------------------------------------ | ||||
|     *------------------------------------------------------------------------*/ | ||||
|     if ( isSigNaNA | isSigNaNB ) { | ||||
|         softfloat_raiseFlags( softfloat_flag_invalid ); | ||||
|         if ( isSigNaNA ) { | ||||
|             if ( isSigNaNB ) goto returnLargerMag; | ||||
|             return isNaNF64UI( uiB ) ? uiNonsigB : uiNonsigA; | ||||
|         } else { | ||||
|             return isNaNF64UI( uiA ) ? uiNonsigA : uiNonsigB; | ||||
|         } | ||||
|     } | ||||
|  returnLargerMag: | ||||
|     uiMagA = uiA & UINT64_C( 0x7FFFFFFFFFFFFFFF ); | ||||
|     uiMagB = uiB & UINT64_C( 0x7FFFFFFFFFFFFFFF ); | ||||
|     if ( uiMagA < uiMagB ) return uiNonsigB; | ||||
|     if ( uiMagB < uiMagA ) return uiNonsigA; | ||||
|     return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										52
									
								
								softfloat/source/8086/softfloat_raiseFlags.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								softfloat/source/8086/softfloat_raiseFlags.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #include "platform.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Raises the exceptions specified by `flags'.  Floating-point traps can be | ||||
| | defined here if desired.  It is currently not possible for such a trap | ||||
| | to substitute a result value.  If traps are not implemented, this routine | ||||
| | should be simply `softfloat_exceptionFlags |= flags;'. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void softfloat_raiseFlags( uint_fast8_t flags ) | ||||
| { | ||||
|  | ||||
|     softfloat_exceptionFlags |= flags; | ||||
|  | ||||
| } | ||||
|  | ||||
							
								
								
									
										376
									
								
								softfloat/source/8086/specialize.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										376
									
								
								softfloat/source/8086/specialize.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,376 @@ | ||||
|  | ||||
| /*============================================================================ | ||||
|  | ||||
| This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic | ||||
| Package, Release 3e, by John R. Hauser. | ||||
|  | ||||
| Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the | ||||
| University of California.  All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
|  1. Redistributions of source code must retain the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer. | ||||
|  | ||||
|  2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|     this list of conditions, and the following disclaimer in the documentation | ||||
|     and/or other materials provided with the distribution. | ||||
|  | ||||
|  3. Neither the name of the University nor the names of its contributors may | ||||
|     be used to endorse or promote products derived from this software without | ||||
|     specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY | ||||
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE | ||||
| DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY | ||||
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| =============================================================================*/ | ||||
|  | ||||
| #ifndef specialize_h | ||||
| #define specialize_h 1 | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include "primitiveTypes.h" | ||||
| #include "softfloat.h" | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Default value for 'softfloat_detectTininess'. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define init_detectTininess softfloat_tininess_afterRounding | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The values to return on conversions to 32-bit integer formats that raise an | ||||
| | invalid exception. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define ui32_fromPosOverflow 0xFFFFFFFF | ||||
| #define ui32_fromNegOverflow 0xFFFFFFFF | ||||
| #define ui32_fromNaN         0xFFFFFFFF | ||||
| #define i32_fromPosOverflow  (-0x7FFFFFFF - 1) | ||||
| #define i32_fromNegOverflow  (-0x7FFFFFFF - 1) | ||||
| #define i32_fromNaN          (-0x7FFFFFFF - 1) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The values to return on conversions to 64-bit integer formats that raise an | ||||
| | invalid exception. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) | ||||
| #define ui64_fromNegOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) | ||||
| #define ui64_fromNaN         UINT64_C( 0xFFFFFFFFFFFFFFFF ) | ||||
| #define i64_fromPosOverflow  (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) | ||||
| #define i64_fromNegOverflow  (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) | ||||
| #define i64_fromNaN          (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | "Common NaN" structure, used to transfer NaN representations from one format | ||||
| | to another. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct commonNaN { | ||||
|     bool sign; | ||||
| #ifdef LITTLEENDIAN | ||||
|     uint64_t v0, v64; | ||||
| #else | ||||
|     uint64_t v64, v0; | ||||
| #endif | ||||
| }; | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The bit pattern for a default generated 16-bit floating-point NaN. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define defaultNaNF16UI 0xFE00 | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a | ||||
| | 16-bit floating-point signaling NaN. | ||||
| | Note:  This macro evaluates its argument more than once. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF)) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by 'zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- | ||||
| | point values, at least one of which is a NaN, returns the bit pattern of | ||||
| | the combined NaN result.  If either 'uiA' or 'uiB' has the pattern of a | ||||
| | signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast16_t | ||||
|  softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The bit pattern for a default generated 32-bit floating-point NaN. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define defaultNaNF32UI 0xFFC00000 | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a | ||||
| | 32-bit floating-point signaling NaN. | ||||
| | Note:  This macro evaluates its argument more than once. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF)) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by 'zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- | ||||
| | point values, at least one of which is a NaN, returns the bit pattern of | ||||
| | the combined NaN result.  If either 'uiA' or 'uiB' has the pattern of a | ||||
| | signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast32_t | ||||
|  softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The bit pattern for a default generated 64-bit floating-point NaN. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 ) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a | ||||
| | 64-bit floating-point signaling NaN. | ||||
| | Note:  This macro evaluates its argument more than once. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF ))) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by 'zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- | ||||
| | point values, at least one of which is a NaN, returns the bit pattern of | ||||
| | the combined NaN result.  If either 'uiA' or 'uiB' has the pattern of a | ||||
| | signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| uint_fast64_t | ||||
|  softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The bit pattern for a default generated 80-bit extended floating-point NaN. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define defaultNaNExtF80UI64 0xFFFF | ||||
| #define defaultNaNExtF80UI0  UINT64_C( 0xC000000000000000 ) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Returns true when the 80-bit unsigned integer formed from concatenating | ||||
| | 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended | ||||
| | floating-point signaling NaN. | ||||
| | Note:  This macro evaluates its arguments more than once. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF ))) | ||||
|  | ||||
| #ifdef SOFTFLOAT_FAST_INT64 | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is | ||||
| | defined. | ||||
| *----------------------------------------------------------------------------*/ | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' | ||||
| | has the bit pattern of an 80-bit extended floating-point NaN, converts | ||||
| | this NaN to the common NaN form, and stores the resulting common NaN at the | ||||
| | location pointed to by 'zPtr'.  If the NaN is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_extF80UIToCommonNaN( | ||||
|      uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by 'aPtr' into an 80-bit extended | ||||
| | floating-point NaN, and returns the bit pattern of this value as an unsigned | ||||
| | integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting the unsigned integer formed from concatenating 'uiA64' and | ||||
| | 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting | ||||
| | the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | ||||
| | 80-bit extended floating-point value, and assuming at least on of these | ||||
| | floating-point values is a NaN, returns the bit pattern of the combined NaN | ||||
| | result.  If either original floating-point value is a signaling NaN, the | ||||
| | invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 | ||||
|  softfloat_propagateNaNExtF80UI( | ||||
|      uint_fast16_t uiA64, | ||||
|      uint_fast64_t uiA0, | ||||
|      uint_fast16_t uiB64, | ||||
|      uint_fast64_t uiB0 | ||||
|  ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The bit pattern for a default generated 128-bit floating-point NaN. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define defaultNaNF128UI64 UINT64_C( 0xFFFF800000000000 ) | ||||
| #define defaultNaNF128UI0  UINT64_C( 0 ) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Returns true when the 128-bit unsigned integer formed from concatenating | ||||
| | 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating- | ||||
| | point signaling NaN. | ||||
| | Note:  This macro evaluates its arguments more than once. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF )))) | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' | ||||
| | has the bit pattern of a 128-bit floating-point NaN, converts this NaN to | ||||
| | the common NaN form, and stores the resulting common NaN at the location | ||||
| | pointed to by 'zPtr'.  If the NaN is a signaling NaN, the invalid exception | ||||
| | is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_f128UIToCommonNaN( | ||||
|      uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point | ||||
| | NaN, and returns the bit pattern of this value as an unsigned integer. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Interpreting the unsigned integer formed from concatenating 'uiA64' and | ||||
| | 'uiA0' as a 128-bit floating-point value, and likewise interpreting the | ||||
| | unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | ||||
| | 128-bit floating-point value, and assuming at least on of these floating- | ||||
| | point values is a NaN, returns the bit pattern of the combined NaN result. | ||||
| | If either original floating-point value is a signaling NaN, the invalid | ||||
| | exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| struct uint128 | ||||
|  softfloat_propagateNaNF128UI( | ||||
|      uint_fast64_t uiA64, | ||||
|      uint_fast64_t uiA0, | ||||
|      uint_fast64_t uiB64, | ||||
|      uint_fast64_t uiB0 | ||||
|  ); | ||||
|  | ||||
| #else | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not | ||||
| | defined. | ||||
| *----------------------------------------------------------------------------*/ | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is | ||||
| | a NaN, converts this NaN to the common NaN form, and stores the resulting | ||||
| | common NaN at the location pointed to by 'zPtr'.  If the NaN is a signaling | ||||
| | NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_extF80MToCommonNaN( | ||||
|      const struct extFloat80M *aSPtr, struct commonNaN *zPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by 'aPtr' into an 80-bit extended | ||||
| | floating-point NaN, and stores this NaN at the location pointed to by | ||||
| | 'zSPtr'. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_commonNaNToExtF80M( | ||||
|      const struct commonNaN *aPtr, struct extFloat80M *zSPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming at least one of the two 80-bit extended floating-point values | ||||
| | pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result | ||||
| | at the location pointed to by 'zSPtr'.  If either original floating-point | ||||
| | value is a signaling NaN, the invalid exception is raised. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_propagateNaNExtF80M( | ||||
|      const struct extFloat80M *aSPtr, | ||||
|      const struct extFloat80M *bSPtr, | ||||
|      struct extFloat80M *zSPtr | ||||
|  ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | The bit pattern for a default generated 128-bit floating-point NaN. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| #define defaultNaNF128UI96 0xFFFF8000 | ||||
| #define defaultNaNF128UI64 0 | ||||
| #define defaultNaNF128UI32 0 | ||||
| #define defaultNaNF128UI0  0 | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, | ||||
| | converts this NaN to the common NaN form, and stores the resulting common | ||||
| | NaN at the location pointed to by 'zPtr'.  If the NaN is a signaling NaN, | ||||
| | the invalid exception is raised.  Argument 'aWPtr' points to an array of | ||||
| | four 32-bit elements that concatenate in the platform's normal endian order | ||||
| | to form a 128-bit floating-point value. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point | ||||
| | NaN, and stores this NaN at the location pointed to by 'zWPtr'.  Argument | ||||
| | 'zWPtr' points to an array of four 32-bit elements that concatenate in the | ||||
| | platform's normal endian order to form a 128-bit floating-point value. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ); | ||||
|  | ||||
| /*---------------------------------------------------------------------------- | ||||
| | Assuming at least one of the two 128-bit floating-point values pointed to by | ||||
| | 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location | ||||
| | pointed to by 'zWPtr'.  If either original floating-point value is a | ||||
| | signaling NaN, the invalid exception is raised.  Each of 'aWPtr', 'bWPtr', | ||||
| | and 'zWPtr' points to an array of four 32-bit elements that concatenate in | ||||
| | the platform's normal endian order to form a 128-bit floating-point value. | ||||
| *----------------------------------------------------------------------------*/ | ||||
| void | ||||
|  softfloat_propagateNaNF128M( | ||||
|      const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
|  | ||||
		Reference in New Issue
	
	Block a user