diff --git a/.gitignore b/.gitignore index 19dbba458..bd3235578 100644 --- a/.gitignore +++ b/.gitignore @@ -20,18 +20,15 @@ __pycache__/ /**/obj_dir* /**/gmon* -#External repos -addins/riscv-arch-test/Makefile.include -addins/riscv-tests/target -addins/TestFloat-3e/build/Linux-x86_64-GCC/* - # Tests tests/riscof/config32.ini tests/riscof/config32e.ini tests/riscof/config64.ini tests/riscof/riscof_work/ tests/wally-riscv-arch-test/riscv-test-suite/*/I/*/** -tests/fp/vectors/*.tv +tests/fp/vectors/**/*.tv +tests/fp/vectors/**/sed* +tests/fp/testfloat/* tests/fp/combined_IF_vectors/IF_vectors/*.tv tests/custom/*/*/ tests/custom/*/*/*.memfile diff --git a/.gitmodules b/.gitmodules index 1dc9e38aa..b066104f7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -34,3 +34,10 @@ [submodule "addins/riscvISACOV"] path = addins/riscvISACOV url = https://github.com/riscv-verification/riscvISACOV.git +[submodule "addins/berkeley-softfloat-3"] + path = addins/berkeley-softfloat-3 + url = https://github.com/ucb-bar/berkeley-softfloat-3.git +[submodule "addins/berkeley-testfloat-3"] + path = addins/berkeley-testfloat-3 + url = https://github.com/ucb-bar/berkeley-testfloat-3 + ignore = untracked diff --git a/addins/SoftFloat-3e/COPYING.txt b/addins/SoftFloat-3e/COPYING.txt deleted file mode 100644 index 9c05d49ca..000000000 --- a/addins/SoftFloat-3e/COPYING.txt +++ /dev/null @@ -1,37 +0,0 @@ - -License for Berkeley SoftFloat Release 3e - -John R. Hauser -2018 January 20 - -The following applies to the whole of SoftFloat Release 3e as well as to -each source file individually. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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. - diff --git a/addins/SoftFloat-3e/README.html b/addins/SoftFloat-3e/README.html deleted file mode 100644 index 7989e0c26..000000000 --- a/addins/SoftFloat-3e/README.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - -Berkeley SoftFloat Package Overview - - - - -

Package Overview for Berkeley SoftFloat Release 3e

- -

-John R. Hauser
-2018 January 20
-

- -

-Berkeley SoftFloat is a software implementation of binary floating-point that -conforms to the IEEE Standard for Floating-Point Arithmetic. -SoftFloat is distributed in the form of C source code. -Building the SoftFloat sources generates a library file (typically -softfloat.a or libsoftfloat.a) containing the -floating-point subroutines. -

- -

-The SoftFloat package is documented in the following files in the -doc subdirectory: -

- - - - - - - - - - - - - -
SoftFloat.htmlDocumentation for using the SoftFloat functions.
SoftFloat-source.htmlDocumentation for building SoftFloat.
SoftFloat-history.html   History of the major changes to SoftFloat.
-
-Other files in the package comprise the source code for SoftFloat. -

- - - diff --git a/addins/SoftFloat-3e/README.txt b/addins/SoftFloat-3e/README.txt deleted file mode 100644 index f819baa5c..000000000 --- a/addins/SoftFloat-3e/README.txt +++ /dev/null @@ -1,21 +0,0 @@ - -Package Overview for Berkeley SoftFloat Release 3e - -John R. Hauser -2018 January 20 - -Berkeley SoftFloat is a software implementation of binary floating-point -that conforms to the IEEE Standard for Floating-Point Arithmetic. SoftFloat -is distributed in the form of C source code. Building the SoftFloat sources -generates a library file (typically "softfloat.a" or "libsoftfloat.a") -containing the floating-point subroutines. - -The SoftFloat package is documented in the following files in the "doc" -subdirectory: - - SoftFloat.html Documentation for using the SoftFloat functions. - SoftFloat-source.html Documentation for building SoftFloat. - SoftFloat-history.html History of the major changes to SoftFloat. - -Other files in the package comprise the source code for SoftFloat. - diff --git a/addins/SoftFloat-3e/build/Linux-386-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-386-GCC/Makefile deleted file mode 100644 index 418160051..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-GCC/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086 - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-386-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-386-GCC/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-GCC/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile deleted file mode 100644 index 1cf6f5e1a..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile deleted file mode 100644 index 2565fe56c..000000000 --- a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile +++ /dev/null @@ -1,323 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= ARM-VFPv2 - -SOFTFLOAT_OPTS ?= -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile deleted file mode 100644 index 570337825..000000000 --- a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile +++ /dev/null @@ -1,390 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration -DSOFTFLOAT_FAST_INT64 \ - $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_eq128$(OBJ) \ - s_le128$(OBJ) \ - s_lt128$(OBJ) \ - s_shortShiftLeft128$(OBJ) \ - s_shortShiftRight128$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJam64Extra$(OBJ) \ - s_shortShiftRightJam128$(OBJ) \ - s_shortShiftRightJam128Extra$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJam64Extra$(OBJ) \ - s_shiftRightJam128$(OBJ) \ - s_shiftRightJam128Extra$(OBJ) \ - s_shiftRightJam256M$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_add128$(OBJ) \ - s_add256M$(OBJ) \ - s_sub128$(OBJ) \ - s_sub256M$(OBJ) \ - s_mul64ByShifted32To128$(OBJ) \ - s_mul64To128$(OBJ) \ - s_mul128By32$(OBJ) \ - s_mul128To256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80UIToCommonNaN$(OBJ) \ - s_commonNaNToExtF80UI$(OBJ) \ - s_propagateNaNExtF80UI$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128UIToCommonNaN$(OBJ) \ - s_commonNaNToF128UI$(OBJ) \ - s_propagateNaNF128UI$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_normSubnormalExtF80Sig$(OBJ) \ - s_roundPackToExtF80$(OBJ) \ - s_normRoundPackToExtF80$(OBJ) \ - s_addMagsExtF80$(OBJ) \ - s_subMagsExtF80$(OBJ) \ - s_normSubnormalF128Sig$(OBJ) \ - s_roundPackToF128$(OBJ) \ - s_normRoundPackToF128$(OBJ) \ - s_addMagsF128$(OBJ) \ - s_subMagsF128$(OBJ) \ - s_mulAddF128$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80_to_ui32$(OBJ) \ - extF80_to_ui64$(OBJ) \ - extF80_to_i32$(OBJ) \ - extF80_to_i64$(OBJ) \ - extF80_to_ui32_r_minMag$(OBJ) \ - extF80_to_ui64_r_minMag$(OBJ) \ - extF80_to_i32_r_minMag$(OBJ) \ - extF80_to_i64_r_minMag$(OBJ) \ - extF80_to_f16$(OBJ) \ - extF80_to_f32$(OBJ) \ - extF80_to_f64$(OBJ) \ - extF80_to_f128$(OBJ) \ - extF80_roundToInt$(OBJ) \ - extF80_add$(OBJ) \ - extF80_sub$(OBJ) \ - extF80_mul$(OBJ) \ - extF80_div$(OBJ) \ - extF80_rem$(OBJ) \ - extF80_sqrt$(OBJ) \ - extF80_eq$(OBJ) \ - extF80_le$(OBJ) \ - extF80_lt$(OBJ) \ - extF80_eq_signaling$(OBJ) \ - extF80_le_quiet$(OBJ) \ - extF80_lt_quiet$(OBJ) \ - extF80_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128_to_ui32$(OBJ) \ - f128_to_ui64$(OBJ) \ - f128_to_i32$(OBJ) \ - f128_to_i64$(OBJ) \ - f128_to_ui32_r_minMag$(OBJ) \ - f128_to_ui64_r_minMag$(OBJ) \ - f128_to_i32_r_minMag$(OBJ) \ - f128_to_i64_r_minMag$(OBJ) \ - f128_to_f16$(OBJ) \ - f128_to_f32$(OBJ) \ - f128_to_extF80$(OBJ) \ - f128_to_f64$(OBJ) \ - f128_roundToInt$(OBJ) \ - f128_add$(OBJ) \ - f128_sub$(OBJ) \ - f128_mul$(OBJ) \ - f128_mulAdd$(OBJ) \ - f128_div$(OBJ) \ - f128_rem$(OBJ) \ - f128_sqrt$(OBJ) \ - f128_eq$(OBJ) \ - f128_le$(OBJ) \ - f128_lt$(OBJ) \ - f128_eq_signaling$(OBJ) \ - f128_le_quiet$(OBJ) \ - f128_lt_quiet$(OBJ) \ - f128_isSignalingNaN$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h deleted file mode 100644 index 2fccb6c09..000000000 --- a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h +++ /dev/null @@ -1,54 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#define SOFTFLOAT_INTRINSIC_INT128 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Win32-MinGW/Makefile b/addins/SoftFloat-3e/build/Win32-MinGW/Makefile deleted file mode 100644 index 418160051..000000000 --- a/addins/SoftFloat-3e/build/Win32-MinGW/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086 - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Win32-MinGW/platform.h b/addins/SoftFloat-3e/build/Win32-MinGW/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Win32-MinGW/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile b/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile deleted file mode 100644 index 1cf6f5e1a..000000000 --- a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h b/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Win64-MinGW-w64/Makefile b/addins/SoftFloat-3e/build/Win64-MinGW-w64/Makefile deleted file mode 100644 index 05bbf5bb5..000000000 --- a/addins/SoftFloat-3e/build/Win64-MinGW-w64/Makefile +++ /dev/null @@ -1,390 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - x86_64-w64-mingw32-gcc -c -Werror-implicit-function-declaration \ - -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -MAKELIB = x86_64-w64-mingw32-ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_eq128$(OBJ) \ - s_le128$(OBJ) \ - s_lt128$(OBJ) \ - s_shortShiftLeft128$(OBJ) \ - s_shortShiftRight128$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJam64Extra$(OBJ) \ - s_shortShiftRightJam128$(OBJ) \ - s_shortShiftRightJam128Extra$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJam64Extra$(OBJ) \ - s_shiftRightJam128$(OBJ) \ - s_shiftRightJam128Extra$(OBJ) \ - s_shiftRightJam256M$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_add128$(OBJ) \ - s_add256M$(OBJ) \ - s_sub128$(OBJ) \ - s_sub256M$(OBJ) \ - s_mul64ByShifted32To128$(OBJ) \ - s_mul64To128$(OBJ) \ - s_mul128By32$(OBJ) \ - s_mul128To256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80UIToCommonNaN$(OBJ) \ - s_commonNaNToExtF80UI$(OBJ) \ - s_propagateNaNExtF80UI$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128UIToCommonNaN$(OBJ) \ - s_commonNaNToF128UI$(OBJ) \ - s_propagateNaNF128UI$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_normSubnormalExtF80Sig$(OBJ) \ - s_roundPackToExtF80$(OBJ) \ - s_normRoundPackToExtF80$(OBJ) \ - s_addMagsExtF80$(OBJ) \ - s_subMagsExtF80$(OBJ) \ - s_normSubnormalF128Sig$(OBJ) \ - s_roundPackToF128$(OBJ) \ - s_normRoundPackToF128$(OBJ) \ - s_addMagsF128$(OBJ) \ - s_subMagsF128$(OBJ) \ - s_mulAddF128$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80_to_ui32$(OBJ) \ - extF80_to_ui64$(OBJ) \ - extF80_to_i32$(OBJ) \ - extF80_to_i64$(OBJ) \ - extF80_to_ui32_r_minMag$(OBJ) \ - extF80_to_ui64_r_minMag$(OBJ) \ - extF80_to_i32_r_minMag$(OBJ) \ - extF80_to_i64_r_minMag$(OBJ) \ - extF80_to_f16$(OBJ) \ - extF80_to_f32$(OBJ) \ - extF80_to_f64$(OBJ) \ - extF80_to_f128$(OBJ) \ - extF80_roundToInt$(OBJ) \ - extF80_add$(OBJ) \ - extF80_sub$(OBJ) \ - extF80_mul$(OBJ) \ - extF80_div$(OBJ) \ - extF80_rem$(OBJ) \ - extF80_sqrt$(OBJ) \ - extF80_eq$(OBJ) \ - extF80_le$(OBJ) \ - extF80_lt$(OBJ) \ - extF80_eq_signaling$(OBJ) \ - extF80_le_quiet$(OBJ) \ - extF80_lt_quiet$(OBJ) \ - extF80_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128_to_ui32$(OBJ) \ - f128_to_ui64$(OBJ) \ - f128_to_i32$(OBJ) \ - f128_to_i64$(OBJ) \ - f128_to_ui32_r_minMag$(OBJ) \ - f128_to_ui64_r_minMag$(OBJ) \ - f128_to_i32_r_minMag$(OBJ) \ - f128_to_i64_r_minMag$(OBJ) \ - f128_to_f16$(OBJ) \ - f128_to_f32$(OBJ) \ - f128_to_extF80$(OBJ) \ - f128_to_f64$(OBJ) \ - f128_roundToInt$(OBJ) \ - f128_add$(OBJ) \ - f128_sub$(OBJ) \ - f128_mul$(OBJ) \ - f128_mulAdd$(OBJ) \ - f128_div$(OBJ) \ - f128_rem$(OBJ) \ - f128_sqrt$(OBJ) \ - f128_eq$(OBJ) \ - f128_le$(OBJ) \ - f128_lt$(OBJ) \ - f128_eq_signaling$(OBJ) \ - f128_le_quiet$(OBJ) \ - f128_lt_quiet$(OBJ) \ - f128_isSignalingNaN$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Win64-MinGW-w64/platform.h b/addins/SoftFloat-3e/build/Win64-MinGW-w64/platform.h deleted file mode 100644 index 2fccb6c09..000000000 --- a/addins/SoftFloat-3e/build/Win64-MinGW-w64/platform.h +++ /dev/null @@ -1,54 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#define SOFTFLOAT_INTRINSIC_INT128 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/template-FAST_INT64/Makefile b/addins/SoftFloat-3e/build/template-FAST_INT64/Makefile deleted file mode 100644 index c5005e6e3..000000000 --- a/addins/SoftFloat-3e/build/template-FAST_INT64/Makefile +++ /dev/null @@ -1,391 +0,0 @@ - -#============================================================================= -# -# This Makefile template is part of the SoftFloat IEEE Floating-Point -# Arithmetic Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -# Edit lines marked with `==>'. See "SoftFloat-source.html". - -==> SOURCE_DIR ?= ../../source -==> SPECIALIZE_TYPE ?= 8086 - -==> SOFTFLOAT_OPTS ?= \ -==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -==> -DSOFTFLOAT_FAST_DIV64TO32 - -==> DELETE = rm -f -==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -==> COMPILE_C = \ -==> cc -c -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -==> MAKELIB = ar crs $@ - -==> OBJ = .o -==> LIB = .a - -==> OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_eq128$(OBJ) \ - s_le128$(OBJ) \ - s_lt128$(OBJ) \ - s_shortShiftLeft128$(OBJ) \ - s_shortShiftRight128$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJam64Extra$(OBJ) \ - s_shortShiftRightJam128$(OBJ) \ - s_shortShiftRightJam128Extra$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJam64Extra$(OBJ) \ - s_shiftRightJam128$(OBJ) \ - s_shiftRightJam128Extra$(OBJ) \ - s_shiftRightJam256M$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_add128$(OBJ) \ - s_add256M$(OBJ) \ - s_sub128$(OBJ) \ - s_sub256M$(OBJ) \ - s_mul64ByShifted32To128$(OBJ) \ - s_mul64To128$(OBJ) \ - s_mul128By32$(OBJ) \ - s_mul128To256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80UIToCommonNaN$(OBJ) \ - s_commonNaNToExtF80UI$(OBJ) \ - s_propagateNaNExtF80UI$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128UIToCommonNaN$(OBJ) \ - s_commonNaNToF128UI$(OBJ) \ - s_propagateNaNF128UI$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_normSubnormalExtF80Sig$(OBJ) \ - s_roundPackToExtF80$(OBJ) \ - s_normRoundPackToExtF80$(OBJ) \ - s_addMagsExtF80$(OBJ) \ - s_subMagsExtF80$(OBJ) \ - s_normSubnormalF128Sig$(OBJ) \ - s_roundPackToF128$(OBJ) \ - s_normRoundPackToF128$(OBJ) \ - s_addMagsF128$(OBJ) \ - s_subMagsF128$(OBJ) \ - s_mulAddF128$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80_to_ui32$(OBJ) \ - extF80_to_ui64$(OBJ) \ - extF80_to_i32$(OBJ) \ - extF80_to_i64$(OBJ) \ - extF80_to_ui32_r_minMag$(OBJ) \ - extF80_to_ui64_r_minMag$(OBJ) \ - extF80_to_i32_r_minMag$(OBJ) \ - extF80_to_i64_r_minMag$(OBJ) \ - extF80_to_f16$(OBJ) \ - extF80_to_f32$(OBJ) \ - extF80_to_f64$(OBJ) \ - extF80_to_f128$(OBJ) \ - extF80_roundToInt$(OBJ) \ - extF80_add$(OBJ) \ - extF80_sub$(OBJ) \ - extF80_mul$(OBJ) \ - extF80_div$(OBJ) \ - extF80_rem$(OBJ) \ - extF80_sqrt$(OBJ) \ - extF80_eq$(OBJ) \ - extF80_le$(OBJ) \ - extF80_lt$(OBJ) \ - extF80_eq_signaling$(OBJ) \ - extF80_le_quiet$(OBJ) \ - extF80_lt_quiet$(OBJ) \ - extF80_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128_to_ui32$(OBJ) \ - f128_to_ui64$(OBJ) \ - f128_to_i32$(OBJ) \ - f128_to_i64$(OBJ) \ - f128_to_ui32_r_minMag$(OBJ) \ - f128_to_ui64_r_minMag$(OBJ) \ - f128_to_i32_r_minMag$(OBJ) \ - f128_to_i64_r_minMag$(OBJ) \ - f128_to_f16$(OBJ) \ - f128_to_f32$(OBJ) \ - f128_to_extF80$(OBJ) \ - f128_to_f64$(OBJ) \ - f128_roundToInt$(OBJ) \ - f128_add$(OBJ) \ - f128_sub$(OBJ) \ - f128_mul$(OBJ) \ - f128_mulAdd$(OBJ) \ - f128_div$(OBJ) \ - f128_rem$(OBJ) \ - f128_sqrt$(OBJ) \ - f128_eq$(OBJ) \ - f128_le$(OBJ) \ - f128_lt$(OBJ) \ - f128_eq_signaling$(OBJ) \ - f128_le_quiet$(OBJ) \ - f128_lt_quiet$(OBJ) \ - f128_isSignalingNaN$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/template-FAST_INT64/platform.h b/addins/SoftFloat-3e/build/template-FAST_INT64/platform.h deleted file mode 100644 index b63e2a720..000000000 --- a/addins/SoftFloat-3e/build/template-FAST_INT64/platform.h +++ /dev/null @@ -1,50 +0,0 @@ - -/*============================================================================ - -This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -// Edit lines marked with `==>'. See "SoftFloat-source.html". - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define INLINE inline - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define THREAD_LOCAL _Thread_local - diff --git a/addins/SoftFloat-3e/build/template-not-FAST_INT64/Makefile b/addins/SoftFloat-3e/build/template-not-FAST_INT64/Makefile deleted file mode 100644 index 49fddfd02..000000000 --- a/addins/SoftFloat-3e/build/template-not-FAST_INT64/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile template is part of the SoftFloat IEEE Floating-Point -# Arithmetic Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -# Edit lines marked with `==>'. See "SoftFloat-source.html". - -==> SOURCE_DIR ?= ../../source -==> SPECIALIZE_TYPE ?= 8086 - -==> SOFTFLOAT_OPTS ?= \ -==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -==> -DSOFTFLOAT_FAST_DIV64TO32 - -==> DELETE = rm -f -==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -==> COMPILE_C = cc -c $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -==> MAKELIB = ar crs $@ - -==> OBJ = .o -==> LIB = .a - -==> OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/template-not-FAST_INT64/platform.h b/addins/SoftFloat-3e/build/template-not-FAST_INT64/platform.h deleted file mode 100644 index b63e2a720..000000000 --- a/addins/SoftFloat-3e/build/template-not-FAST_INT64/platform.h +++ /dev/null @@ -1,50 +0,0 @@ - -/*============================================================================ - -This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -// Edit lines marked with `==>'. See "SoftFloat-source.html". - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define INLINE inline - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define THREAD_LOCAL _Thread_local - diff --git a/addins/SoftFloat-3e/doc/SoftFloat-history.html b/addins/SoftFloat-3e/doc/SoftFloat-history.html deleted file mode 100644 index daa48ca3b..000000000 --- a/addins/SoftFloat-3e/doc/SoftFloat-history.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - -Berkeley SoftFloat History - - - - -

History of Berkeley SoftFloat, to Release 3e

- -

-John R. Hauser
-2018 January 20
-

- - -

Release 3e (2018 January)

- - - - -

Release 3d (2017 August)

- - - - -

Release 3c (2017 February)

- - - - -

Release 3b (2016 July)

- - - - -

Release 3a (2015 October)

- - - - -

Release 3 (2015 February)

- - - - -

Release 2c (2015 January)

- - - - -

Release 2b (2002 May)

- - - - -

Release 2a (1998 December)

- - - - -

Release 2 (1997 June)

- - - - -

Release 1a (1996 July)

- - - - -

Release 1 (1996 July)

- - - - - - diff --git a/addins/SoftFloat-3e/doc/SoftFloat-source.html b/addins/SoftFloat-3e/doc/SoftFloat-source.html deleted file mode 100644 index d4b85f7b0..000000000 --- a/addins/SoftFloat-3e/doc/SoftFloat-source.html +++ /dev/null @@ -1,686 +0,0 @@ - - - - -Berkeley SoftFloat Source Documentation - - - - -

Berkeley SoftFloat Release 3e: Source Documentation

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. SoftFloat Package Directory Structure
5. Issues for Porting SoftFloat to a New Target
5.1. Standard Headers <stdbool.h> and - <stdint.h>
5.2. Specializing Floating-Point Behavior
5.3. Macros for Build Options
5.4. Adapting a Template Target Directory
5.5. Target-Specific Optimization of Primitive Functions
6. Testing SoftFloat
7. Providing SoftFloat as a Common Library for Applications
8. Contact Information
-
- - -

1. Introduction

- -

-This document gives information needed for compiling and/or porting Berkeley -SoftFloat, a library of C functions implementing binary floating-point -conforming to the IEEE Standard for Floating-Point Arithmetic. -For basic documentation about SoftFloat refer to -SoftFloat.html. -

- -

-The source code for SoftFloat is intended to be relatively machine-independent -and should be compilable with any ISO-Standard C compiler that also supports -64-bit integers. -SoftFloat has been successfully compiled with the GNU C Compiler -(gcc) for several platforms. -

- -

-Release 3 of SoftFloat was a complete rewrite relative to -Release 2 or earlier. -Changes to the interface of SoftFloat functions are documented in -SoftFloat.html. -The current version of SoftFloat is Release 3e. -

- - -

2. Limitations

- -

-SoftFloat assumes the computer has an addressable byte size of either 8 or -16 bits. -(Nearly all computers in use today have 8-bit bytes.) -

- -

-SoftFloat is written in C and is designed to work with other C code. -The C compiler used must conform at a minimum to the 1989 ANSI standard for the -C language (same as the 1990 ISO standard) and must in addition support basic -arithmetic on 64-bit integers. -Earlier releases of SoftFloat included implementations of 32-bit -single-precision and 64-bit double-precision floating-point that -did not require 64-bit integers, but this option is not supported -starting with Release 3. -Since 1999, ISO standards for C have mandated compiler support for -64-bit integers. -A compiler conforming to the 1999 C Standard or later is recommended but not -strictly required. -

- -

-C Standard header files <stdbool.h> and -<stdint.h> are required for defining standard Boolean and -integer types. -If these headers are not supplied with the C compiler, minimal substitutes must -be provided. -SoftFloat’s dependence on these headers is detailed later in -section 5.1, Standard Headers <stdbool.h> -and <stdint.h>. -

- - -

3. Acknowledgments and License

- -

-The SoftFloat package was written by me, John R. Hauser. -Release 3 of SoftFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of SoftFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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. -

- - -

4. SoftFloat Package Directory Structure

- -

-Because SoftFloat is targeted to multiple platforms, its source code is -slightly scattered between target-specific and target-independent directories -and files. -The supplied directory structure is as follows: -

-
-doc
-source
-    include
-    8086
-    8086-SSE
-    ARM-VFPv2
-    ARM-VFPv2-defaultNaN
-build
-    template-FAST_INT64
-    template-not-FAST_INT64
-    Linux-386-GCC
-    Linux-386-SSE2-GCC
-    Linux-x86_64-GCC
-    Linux-ARM-VFPv2-GCC
-    Win32-MinGW
-    Win32-SSE2-MinGW
-    Win64-MinGW-w64
-
-
-The majority of the SoftFloat sources are provided in the source -directory. -The include subdirectory contains several header files -(unsurprisingly), while the other subdirectories of source contain -source files that specialize the floating-point behavior to match particular -processor families: -
-
-
8086
-
-Intel’s older, 8087-derived floating-point, extended to all supported -floating-point types -
-
8086-SSE
-
-Intel’s x86 processors with Streaming SIMD Extensions (SSE) and later -compatible extensions, having 8087 behavior for 80-bit -double-extended-precision (extFloat80_t) and SSE behavior for -other floating-point types -
-
ARM-VFPv2
-
-ARM’s VFPv2 or later floating-point, with NaN payload propagation -
-
ARM-VFPv2-defaultNaN
-
-ARM’s VFPv2 or later floating-point, with the “default NaN” -option -
-
-
-If other specializations are attempted, these would be expected to be other -subdirectories of source alongside the ones listed above. -Specialization is covered later, in section 5.2, Specializing -Floating-Point Behavior. -

- -

-The build directory is intended to contain a subdirectory for each -target platform for which a build of the SoftFloat library may be created. -For each build target, the target’s subdirectory is where all derived -object files and the completed SoftFloat library (typically -softfloat.a or libsoftfloat.a) are created. -The two template subdirectories are not actual build targets but -contain sample files for creating new target directories. -(The meaning of FAST_INT64 will be explained later.) -

- -

-Ignoring the template directories, the supplied target directories -are intended to follow a naming system of -<execution-environment>-<compiler>. -For the example targets, -<execution-environment> is -Linux-386, Linux-386-SSE2, -Linux-x86_64, -Linux-ARM-VFPv2, Win32, -Win32-SSE2, or Win64, and -<compiler> is GCC, -MinGW, or MinGW-w64. -

- -

-All of the supplied target directories are merely examples that may or may not -be correct for compiling on any particular system. -Despite requests, there are currently no plans to include and maintain in the -SoftFloat package the build files needed for a great many users’ -compilation environments, which can span a huge range of operating systems, -compilers, and other tools. -

- -

-As supplied, each target directory contains two files: -

-
-Makefile
-platform.h
-
-
-The provided Makefile is written for GNU make. -A build of SoftFloat for the specific target is begun by executing the -make command with the target directory as the current directory. -A completely different build tool can be used if an appropriate -Makefile equivalent is created. -

- -

-The platform.h header file exists to provide a location for -additional C declarations specific to the build target. -Every C source file of SoftFloat contains a #include for -platform.h. -In many cases, the contents of platform.h can be as simple as one -or two lines of code. -At the other extreme, to get maximal performance from SoftFloat, it may be -desirable to include in header platform.h (directly or via -#include) declarations for numerous target-specific optimizations. -Such possibilities are discussed in the next section, Issues for Porting -SoftFloat to a New Target. -If the target’s compiler or library has bugs or other shortcomings, -workarounds for these issues may also be possible with target-specific -declarations in platform.h, avoiding the need to modify the main -SoftFloat sources. -

- - -

5. Issues for Porting SoftFloat to a New Target

- -

5.1. Standard Headers <stdbool.h> and <stdint.h>

- -

-The SoftFloat sources make use of standard headers -<stdbool.h> and <stdint.h>, which have -been part of the ISO C Standard Library since 1999. -With any recent compiler, these standard headers are likely to be supported, -even if the compiler does not claim complete conformance to the latest ISO C -Standard. -For older or nonstandard compilers, substitutes for -<stdbool.h> and <stdint.h> may need to be -created. -SoftFloat depends on these names from <stdbool.h>: -

-
-bool
-true
-false
-
-
-and on these names from <stdint.h>: -
-
-uint16_t
-uint32_t
-uint64_t
-int32_t
-int64_t
-UINT64_C
-INT64_C
-uint_least8_t
-uint_fast8_t
-uint_fast16_t
-uint_fast32_t
-uint_fast64_t
-int_fast8_t
-int_fast16_t
-int_fast32_t
-int_fast64_t
-
-
-

- - -

5.2. Specializing Floating-Point Behavior

- -

-The IEEE Floating-Point Standard allows for some flexibility in a conforming -implementation, particularly concerning NaNs. -The SoftFloat source directory is supplied with some -specialization subdirectories containing possible definitions for this -implementation-specific behavior. -For example, the 8086 and 8086-SSE -subdirectories have source files that specialize SoftFloat’s behavior to -match that of Intel’s x86 line of processors. -The files in a specialization subdirectory must determine: -

-

- -

-As provided, the build process for a target expects to involve exactly -one specialization directory that defines all of these -implementation-specific details for the target. -A specialization directory such as 8086 is expected to contain a -header file called specialize.h, together with whatever other -source files are needed to complete the specialization. -

- -

-A new build target may use an existing specialization, such as the ones -provided by the 8086 and 8086-SSE -subdirectories. -If a build target needs a new specialization, different from any existing ones, -it is recommended that a new specialization directory be created for this -purpose. -The specialize.h header file from any of the provided -specialization subdirectories can be used as a model for what definitions are -needed. -

- - -

5.3. Macros for Build Options

- -

-The SoftFloat source files adapt the floating-point implementation according to -several C preprocessor macros: -

-
-
LITTLEENDIAN -
-Must be defined for little-endian machines; must not be defined for big-endian -machines. -
INLINE -
-Specifies the sequence of tokens used to indicate that a C function should be -inlined. -If macro INLINE_LEVEL is defined with a value of 1 or higher, this -macro must be defined; otherwise, this macro is ignored and need not be -defined. -For compilers that conform to the C Standard’s rules for inline -functions, this macro can be defined as the single keyword inline. -For other compilers that follow a convention pre-dating the standardization of -inline, this macro may need to be defined to extern -inline. -
THREAD_LOCAL -
-Can be defined to a sequence of tokens that, when appearing at the start of a -variable declaration, indicates to the C compiler that the variable is -per-thread, meaning that each execution thread gets its own separate -instance of the variable. -This macro is used in header softfloat.h in the declarations of -variables softfloat_roundingMode, -softfloat_detectTininess, extF80_roundingPrecision, -and softfloat_exceptionFlags. -If macro THREAD_LOCAL is left undefined, these variables will -default to being ordinary global variables. -Depending on the compiler, possible valid definitions of this macro include -_Thread_local and __thread. -
-
-
SOFTFLOAT_ROUND_ODD -
-Can be defined to enable support for optional rounding mode -softfloat_round_odd. -
-
-
INLINE_LEVEL -
-Can be defined to an integer to determine the degree of inlining requested of -the compiler. -Larger numbers request that more inlining be done. -If this macro is not defined or is defined to a value less than 1 -(zero or negative), no inlining is requested. -The maximum effective value is no higher than 5. -Defining this macro to a value greater than 5 is the same as defining it -to 5. -
SOFTFLOAT_FAST_INT64 -
-Can be defined to indicate that the build target’s implementation of -64-bit arithmetic is efficient. -For newer 64-bit processors, this macro should usually be defined. -For very small microprocessors whose buses and registers are 8-bit -or 16-bit in size, this macro should usually not be defined. -Whether this macro should be defined for a 32-bit processor may -depend on the target machine and the applications that will use SoftFloat. -
SOFTFLOAT_FAST_DIV32TO16 -
-Can be defined to indicate that the target’s division operator -in C (written as /) is reasonably efficient for -dividing a 32-bit unsigned integer by a 16-bit -unsigned integer. -Setting this macro may affect the performance of function f16_div. -
SOFTFLOAT_FAST_DIV64TO32 -
-Can be defined to indicate that the target’s division operator -in C (written as /) is reasonably efficient for -dividing a 64-bit unsigned integer by a 32-bit -unsigned integer. -Setting this macro may affect the performance of division, remainder, and -square root operations other than f16_div. -
-
-

- -

-Following the usual custom for C, for most of these macros (all -except INLINE, THREAD_LOCAL, and -INLINE_LEVEL), the content of any definition is irrelevant; -what matters is a macro’s effect on #ifdef directives. -

- -

-It is recommended that any definitions of macros LITTLEENDIAN, -INLINE, and THREAD_LOCAL be made in a build -target’s platform.h header file, because these macros are -expected to be determined inflexibly by the target machine and compiler. -The other five macros select options and control optimization, and thus might -be better located in the target’s Makefile (or its equivalent). -

- - -

5.4. Adapting a Template Target Directory

- -

-In the build directory, two template subdirectories -provide models for new target directories. -Two different templates exist because different functions are needed in the -SoftFloat library depending on whether macro SOFTFLOAT_FAST_INT64 -is defined. -If macro SOFTFLOAT_FAST_INT64 will be defined, -template-FAST_INT64 is the template to use; -otherwise, template-not-FAST_INT64 is the appropriate -template. -A new target directory can be created by copying the correct template directory -and editing the files inside. -To avoid confusion, it would be wise to refrain from editing the files within a -template directory directly. -

- - -

5.5. Target-Specific Optimization of Primitive Functions

- -

-Header file primitives.h (in directory -source/include) declares macros and functions for numerous -underlying arithmetic operations upon which many of SoftFloat’s -floating-point functions are ultimately built. -The SoftFloat sources include implementations of all of these functions/macros, -written as standard C code, so a complete and correct SoftFloat library can be -created using only the supplied code for all functions. -However, for many targets, SoftFloat’s performance can be improved by -substituting target-specific implementations of some of the functions/macros -declared in primitives.h. -

- -

-For example, primitives.h declares a function called -softfloat_countLeadingZeros32 that takes an unsigned -32-bit integer as an argument and returns the number of the -integer’s most-significant bits that are zeros. -While the SoftFloat sources include an implementation of this function written -in standard C, many processors can perform this same function -directly in only one or two machine instructions. -An alternative, target-specific implementation that maps to those instructions -is likely to be more efficient than the generic C code from the SoftFloat -package. -

- -

-A build target can replace the supplied version of any function or macro of -primitives.h by defining a macro with the same name in the -target’s platform.h header file. -For this purpose, it may be helpful for platform.h to -#include header file primitiveTypes.h, which defines -types used for arguments and results of functions declared in -primitives.h. -When a desired replacement implementation is a function, not a macro, it is -sufficient for platform.h to include the line -

-
-#define <function-name> <function-name>
-
-
-where <function-name> is the name of the -function. -This technically defines <function-name> -as a macro, but one that resolves to the same name, which may then be a -function. -(A preprocessor that conforms to the C Standard is required to limit recursive -macro expansion from being applied more than once.) -

- -

-The supplied header file opts-GCC.h (in directory -source/include) provides an example of target-specific -optimization for the GCC compiler. -Each GCC target example in the build directory has -

-#include "opts-GCC.h" -
-in its platform.h header file. -Before opts-GCC.h is included, the following macros must be -defined (or not) to control which features are invoked: -
-
-
SOFTFLOAT_BUILTIN_CLZ
-
-If defined, SoftFloat’s internal -‘countLeadingZeros’ functions use intrinsics -__builtin_clz and __builtin_clzll. -
-
SOFTFLOAT_INTRINSIC_INT128
-
-If defined, SoftFloat makes use of GCC’s nonstandard 128-bit -integer type __int128. -
-
-
-On some machines, these improvements are observed to increase the speeds of -f64_mul and f128_mul by around 20 to 25%, although -other functions receive less dramatic boosts, or none at all. -Results can vary greatly across different platforms. -

- - -

6. Testing SoftFloat

- -

-SoftFloat can be tested using the testsoftfloat program by the -same author. -This program is part of the Berkeley TestFloat package available at the Web -page -http://www.jhauser.us/arithmetic/TestFloat.html. -The TestFloat package also has a program called timesoftfloat that -measures the speed of SoftFloat’s floating-point functions. -

- - -

7. Providing SoftFloat as a Common Library for Applications

- -

-Header file softfloat.h defines the SoftFloat interface as seen by -clients. -If the SoftFloat library will be made a common library for programs on a -system, the supplied softfloat.h has a couple of deficiencies for -this purpose: -

-In the situation that new programs may regularly #include header -file softfloat.h, it is recommended that a custom, self-contained -version of this header file be created that eliminates these issues. -

- - -

8. Contact Information

- -

-At the time of this writing, the most up-to-date information about SoftFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- - - - diff --git a/addins/SoftFloat-3e/doc/SoftFloat.html b/addins/SoftFloat-3e/doc/SoftFloat.html deleted file mode 100644 index bb41770ec..000000000 --- a/addins/SoftFloat-3e/doc/SoftFloat.html +++ /dev/null @@ -1,1527 +0,0 @@ - - - - -Berkeley SoftFloat Library Interface - - - - -

Berkeley SoftFloat Release 3e: Library Interface

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. Types and Functions
4.1. Boolean and Integer Types
4.2. Floating-Point Types
4.3. Supported Floating-Point Functions
4.4. Non-canonical Representations in extFloat80_t
4.5. Conventions for Passing Arguments and Results
5. Reserved Names
6. Mode Variables
6.1. Rounding Mode
6.2. Underflow Detection
6.3. Rounding Precision for the 80-Bit Extended Format
7. Exceptions and Exception Flags
8. Function Details
8.1. Conversions from Integer to Floating-Point
8.2. Conversions from Floating-Point to Integer
8.3. Conversions Among Floating-Point Types
8.4. Basic Arithmetic Functions
8.5. Fused Multiply-Add Functions
8.6. Remainder Functions
8.7. Round-to-Integer Functions
8.8. Comparison Functions
8.9. Signaling NaN Test Functions
8.10. Raise-Exception Function
9. Changes from SoftFloat Release 2
9.1. Name Changes
9.2. Changes to Function Arguments
9.3. Added Capabilities
9.4. Better Compatibility with the C Language
9.5. New Organization as a Library
9.6. Optimization Gains (and Losses)
10. Future Directions
11. Contact Information
-
- - -

1. Introduction

- -

-Berkeley SoftFloat is a software implementation of binary floating-point that -conforms to the IEEE Standard for Floating-Point Arithmetic. -The current release supports five binary formats: 16-bit -half-precision, 32-bit single-precision, 64-bit -double-precision, 80-bit double-extended-precision, and -128-bit quadruple-precision. -The following functions are supported for each format: -

-All operations required by the original 1985 version of the IEEE Floating-Point -Standard are implemented, except for conversions to and from decimal. -

- -

-This document gives information about the types defined and the routines -implemented by SoftFloat. -It does not attempt to define or explain the IEEE Floating-Point Standard. -Information about the standard is available elsewhere. -

- -

-The current version of SoftFloat is Release 3e. -This release modifies the behavior of the rarely used odd rounding mode -(round to odd, also known as jamming), and also adds some new -specialization and optimization examples for those compiling SoftFloat. -

- -

-The previous Release 3d fixed bugs that were found in the square -root functions for the 64-bit, 80-bit, and -128-bit floating-point formats. -(Thanks to Alexei Sibidanov at the University of Victoria for reporting an -incorrect result.) -The bugs affected all prior Release-3 versions of SoftFloat -through 3c. -The flaw in the 64-bit floating-point square root function was of -very minor impact, causing a 1-ulp error (1 unit in -the last place) a few times out of a billion. -The bugs in the 80-bit and 128-bit square root -functions were more serious. -Although incorrect results again occurred only a few times out of a billion, -when they did occur a large portion of the less-significant bits could be -wrong. -

- -

-Among earlier releases, 3b was notable for adding support for the -16-bit half-precision format. -For more about the evolution of SoftFloat releases, see -SoftFloat-history.html. -

- -

-The functional interface of SoftFloat Release 3 and later differs -in many details from the releases that came before. -For specifics of these differences, see section 9 below, -Changes from SoftFloat Release 2. -

- - -

2. Limitations

- -

-SoftFloat assumes the computer has an addressable byte size of 8 or -16 bits. -(Nearly all computers in use today have 8-bit bytes.) -

- -

-SoftFloat is written in C and is designed to work with other C code. -The C compiler used must conform at a minimum to the 1989 ANSI standard for the -C language (same as the 1990 ISO standard) and must in addition support basic -arithmetic on 64-bit integers. -Earlier releases of SoftFloat included implementations of 32-bit -single-precision and 64-bit double-precision floating-point that -did not require 64-bit integers, but this option is not supported -starting with Release 3. -Since 1999, ISO standards for C have mandated compiler support for -64-bit integers. -A compiler conforming to the 1999 C Standard or later is recommended but not -strictly required. -

- -

-Most operations not required by the original 1985 version of the IEEE -Floating-Point Standard but added in the 2008 version are not yet supported in -SoftFloat Release 3e. -

- - -

3. Acknowledgments and License

- -

-The SoftFloat package was written by me, John R. Hauser. -Release 3 of SoftFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of SoftFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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. -

- - -

4. Types and Functions

- -

-The types and functions of SoftFloat are declared in header file -softfloat.h. -

- -

4.1. Boolean and Integer Types

- -

-Header file softfloat.h depends on standard headers -<stdbool.h> and <stdint.h> to define type -bool and several integer types. -These standard headers have been part of the ISO C Standard Library since 1999. -With any recent compiler, they are likely to be supported, even if the compiler -does not claim complete conformance to the latest ISO C Standard. -For older or nonstandard compilers, a port of SoftFloat may have substitutes -for these headers. -Header softfloat.h depends only on the name bool from -<stdbool.h> and on these type names from -<stdint.h>: -

-
-uint16_t
-uint32_t
-uint64_t
-int32_t
-int64_t
-uint_fast8_t
-uint_fast32_t
-uint_fast64_t
-int_fast32_t
-int_fast64_t
-
-
-

- - -

4.2. Floating-Point Types

- -

-The softfloat.h header defines five floating-point types: -

- - - - - - - - - - - - - - - - - - - - - -
float16_t16-bit half-precision binary format
float32_t32-bit single-precision binary format
float64_t64-bit double-precision binary format
extFloat80_t   80-bit double-extended-precision binary format (old Intel or -Motorola format)
float128_t128-bit quadruple-precision binary format
-
-The non-extended types are each exactly the size specified: -16 bits for float16_t, 32 bits for -float32_t, 64 bits for float64_t, and -128 bits for float128_t. -Aside from these size requirements, the definitions of all these types may -differ for different ports of SoftFloat to specific systems. -A given port of SoftFloat may or may not define some of the floating-point -types as aliases for the C standard types float, -double, and long double. -

- -

-Header file softfloat.h also defines a structure, -struct extFloat80M, for the representation of -80-bit double-extended-precision floating-point values in memory. -This structure is the same size as type extFloat80_t and contains -at least these two fields (not necessarily in this order): -

-
-uint16_t signExp;
-uint64_t signif;
-
-
-Field signExp contains the sign and exponent of the floating-point -value, with the sign in the most significant bit (bit 15) and the -encoded exponent in the other 15 bits. -Field signif is the complete 64-bit significand of -the floating-point value. -(In the usual encoding for 80-bit extended floating-point, the -leading 1 bit of normalized numbers is not implicit but is stored -in the most significant bit of the significand.) -

- -

4.3. Supported Floating-Point Functions

- -

-SoftFloat implements these arithmetic operations for its floating-point types: -

-

- -

-The following operations required by the 2008 IEEE Floating-Point Standard are -not supported in SoftFloat Release 3e: -

-

- -

4.4. Non-canonical Representations in extFloat80_t

- -

-Because the 80-bit double-extended-precision format, -extFloat80_t, stores an explicit leading significand bit, many -finite floating-point numbers are encodable in this type in multiple equivalent -forms. -Of these multiple encodings, there is always a unique one with the least -encoded exponent value, and this encoding is considered the canonical -representation of the floating-point number. -Any other equivalent representations (having a higher encoded exponent value) -are non-canonical. -For a value in the subnormal range (including zero), the canonical -representation always has an encoded exponent of zero and a leading significand -bit of 0. -For finite values outside the subnormal range, the canonical representation -always has an encoded exponent that is nonzero and a leading significand bit -of 1. -

- -

-For an infinity or NaN, the leading significand bit is similarly expected to -be 1. -An infinity or NaN with a leading significand bit of 0 is again -considered non-canonical. -Hence, altogether, to be canonical, a value of type extFloat80_t -must have a leading significand bit of 1, unless the value is -subnormal or zero, in which case the leading significand bit and the encoded -exponent must both be zero. -

- -

-SoftFloat’s functions are not guaranteed to operate as expected when -inputs of type extFloat80_t are non-canonical. -Assuming all of a function’s extFloat80_t inputs (if any) -are canonical, function outputs of type extFloat80_t will always -be canonical. -

- -

4.5. Conventions for Passing Arguments and Results

- -

-Values that are at most 64 bits in size (i.e., not the -80-bit or 128-bit floating-point formats) are in all -cases passed as function arguments by value. -Likewise, when an output of a function is no more than 64 bits, it -is always returned directly as the function result. -Thus, for example, the SoftFloat function for adding two 64-bit -floating-point values has this simple signature: -

-float64_t f64_add( float64_t, float64_t ); -
-

- -

-The story is more complex when function inputs and outputs are -80-bit and 128-bit floating-point. -For these types, SoftFloat always provides a function that passes these larger -values into or out of the function indirectly, via pointers. -For example, for adding two 128-bit floating-point values, -SoftFloat supplies this function: -

-void f128M_add( const float128_t *, const float128_t *, float128_t * ); -
-The first two arguments point to the values to be added, and the last argument -points to the location where the sum will be stored. -The M in the name f128M_add is mnemonic for the fact -that the 128-bit inputs and outputs are “in memory”, -pointed to by pointer arguments. -

- -

-All ports of SoftFloat implement these pass-by-pointer functions for -types extFloat80_t and float128_t. -At the same time, SoftFloat ports may also implement alternate versions of -these same functions that pass extFloat80_t and -float128_t by value, like the smaller formats. -Thus, besides the function with name f128M_add shown above, a -SoftFloat port may also supply an equivalent function with this signature: -

-float128_t f128_add( float128_t, float128_t ); -
-

- -

-As a general rule, on computers where the machine word size is -32 bits or smaller, only the pass-by-pointer versions of functions -(e.g., f128M_add) are provided for types extFloat80_t -and float128_t, because passing such large types directly can have -significant extra cost. -On computers where the word size is 64 bits or larger, both -function versions (f128M_add and f128_add) are -provided, because the cost of passing by value is then more reasonable. -Applications that must be portable accross both classes of computers must use -the pointer-based functions, as these are always implemented. -However, if it is known that SoftFloat includes the by-value functions for all -platforms of interest, programmers can use whichever version they prefer. -

- - -

5. Reserved Names

- -

-In addition to the variables and functions documented here, SoftFloat defines -some symbol names for its own private use. -These private names always begin with the prefix -‘softfloat_’. -When a program includes header softfloat.h or links with the -SoftFloat library, all names with prefix ‘softfloat_’ -are reserved for possible use by SoftFloat. -Applications that use SoftFloat should not define their own names with this -prefix, and should reference only such names as are documented. -

- - -

6. Mode Variables

- -

-The following global variables control rounding mode, underflow detection, and -the 80-bit extended format’s rounding precision: -

-softfloat_roundingMode
-softfloat_detectTininess
-extF80_roundingPrecision -
-These mode variables are covered in the next several subsections. -For some SoftFloat ports, these variables may be per-thread (declared -thread_local), meaning that different execution threads have their -own separate copies of the variables. -

- -

6.1. Rounding Mode

- -

-All five rounding modes defined by the 2008 IEEE Floating-Point Standard are -implemented for all operations that require rounding. -Some ports of SoftFloat may also implement the round-to-odd mode. -

- -

-The rounding mode is selected by the global variable -

-uint_fast8_t softfloat_roundingMode; -
-This variable may be set to one of the values -
- - - - - - - - - - - - - - - - - - - - - - - - - -
softfloat_round_near_evenround to nearest, with ties to even
softfloat_round_near_maxMag  round to nearest, with ties to maximum magnitude (away from zero)
softfloat_round_minMaground to minimum magnitude (toward zero)
softfloat_round_minround to minimum (down)
softfloat_round_maxround to maximum (up)
softfloat_round_oddround to odd (jamming), if supported by the SoftFloat port
-
-Variable softfloat_roundingMode is initialized to -softfloat_round_near_even. -

- -

-When softfloat_round_odd is the rounding mode for a function that -rounds to an integer value (either conversion to an integer format or a -‘roundToInt’ function), if the input is not already an -integer, the rounded result is the closest odd integer. -For other operations, this rounding mode acts as though the floating-point -result is first rounded to minimum magnitude, the same as -softfloat_round_minMag, and then, if the result is inexact, the -least-significant bit of the result is set to 1. -Rounding to odd is also known as jamming. -

- -

6.2. Underflow Detection

- -

-In the terminology of the IEEE Standard, SoftFloat can detect tininess for -underflow either before or after rounding. -The choice is made by the global variable -

-uint_fast8_t softfloat_detectTininess; -
-which can be set to either -
-softfloat_tininess_beforeRounding
-softfloat_tininess_afterRounding -
-Detecting tininess after rounding is usually better because it results in fewer -spurious underflow signals. -The other option is provided for compatibility with some systems. -Like most systems (and as required by the newer 2008 IEEE Standard), SoftFloat -always detects loss of accuracy for underflow as an inexact result. -

- -

6.3. Rounding Precision for the 80-Bit Extended Format

- -

-For extFloat80_t only, the rounding precision of the basic -arithmetic operations is controlled by the global variable -

-uint_fast8_t extF80_roundingPrecision; -
-The operations affected are: -
-extF80_add
-extF80_sub
-extF80_mul
-extF80_div
-extF80_sqrt -
-When extF80_roundingPrecision is set to its default value of 80, -these operations are rounded to the full precision of the 80-bit -double-extended-precision format, like occurs for other formats. -Setting extF80_roundingPrecision to 32 or to 64 causes the -operations listed to be rounded to 32-bit precision (equivalent to -float32_t) or to 64-bit precision (equivalent to -float64_t), respectively. -When rounding to reduced precision, additional bits in the result significand -beyond the rounding point are set to zero. -The consequences of setting extF80_roundingPrecision to a value -other than 32, 64, or 80 is not specified. -Operations other than the ones listed above are not affected by -extF80_roundingPrecision. -

- - -

7. Exceptions and Exception Flags

- -

-All five exception flags required by the IEEE Floating-Point Standard are -implemented. -Each flag is stored as a separate bit in the global variable -

-uint_fast8_t softfloat_exceptionFlags; -
-The positions of the exception flag bits within this variable are determined by -the bit masks -
-softfloat_flag_inexact
-softfloat_flag_underflow
-softfloat_flag_overflow
-softfloat_flag_infinite
-softfloat_flag_invalid -
-Variable softfloat_exceptionFlags is initialized to all zeros, -meaning no exceptions. -

- -

-For some SoftFloat ports, softfloat_exceptionFlags may be -per-thread (declared thread_local), meaning that different -execution threads have their own separate instances of it. -

- -

-An individual exception flag can be cleared with the statement -

-softfloat_exceptionFlags &= ~softfloat_flag_<exception>; -
-where <exception> is the appropriate name. -To raise a floating-point exception, function softfloat_raiseFlags -should normally be used. -

- -

-When SoftFloat detects an exception other than inexact, it calls -softfloat_raiseFlags. -The default version of this function simply raises the corresponding exception -flags. -Particular ports of SoftFloat may support alternate behavior, such as exception -traps, by modifying the default softfloat_raiseFlags. -A program may also supply its own softfloat_raiseFlags function to -override the one from the SoftFloat library. -

- -

-Because inexact results occur frequently under most circumstances (and thus are -hardly exceptional), SoftFloat does not ordinarily call -softfloat_raiseFlags for inexact exceptions. -It does always raise the inexact exception flag as required. -

- - -

8. Function Details

- -

-In this section, <float> appears in function names as -a substitute for one of these abbreviations: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
f16indicates float16_t, passed by value
f32indicates float32_t, passed by value
f64indicates float64_t, passed by value
extF80M   indicates extFloat80_t, passed indirectly via pointers
extF80indicates extFloat80_t, passed by value
f128Mindicates float128_t, passed indirectly via pointers
f128indicates float128_t, passed by value
-
-The circumstances under which values of floating-point types -extFloat80_t and float128_t may be passed either by -value or indirectly via pointers was discussed earlier in -section 4.5, Conventions for Passing Arguments and Results. -

- -

8.1. Conversions from Integer to Floating-Point

- -

-All conversions from a 32-bit or 64-bit integer, -signed or unsigned, to a floating-point format are supported. -Functions performing these conversions have these names: -

-ui32_to_<float>
-ui64_to_<float>
-i32_to_<float>
-i64_to_<float> -
-Conversions from 32-bit integers to 64-bit -double-precision and larger formats are always exact, and likewise conversions -from 64-bit integers to 80-bit -double-extended-precision and 128-bit quadruple-precision are also -always exact. -

- -

-Each conversion function takes one input of the appropriate type and generates -one output. -The following illustrates the signatures of these functions in cases when the -floating-point result is passed either by value or via pointers: -

-
-float64_t i32_to_f64( int32_t a );
-
-
-void i32_to_f128M( int32_t a, float128_t *destPtr );
-
-
-

- -

8.2. Conversions from Floating-Point to Integer

- -

-Conversions from a floating-point format to a 32-bit or -64-bit integer, signed or unsigned, are supported with these -functions: -

-<float>_to_ui32
-<float>_to_ui64
-<float>_to_i32
-<float>_to_i64 -
-The functions have signatures as follows, depending on whether the -floating-point input is passed by value or via pointers: -
-
-int_fast32_t f64_to_i32( float64_t a, uint_fast8_t roundingMode, bool exact );
-
-
-int_fast32_t
- f128M_to_i32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact );
-
-
-

- -

-The roundingMode argument specifies the rounding mode for -the conversion. -The variable that usually indicates rounding mode, -softfloat_roundingMode, is ignored. -Argument exact determines whether the inexact -exception flag is raised if the conversion is not exact. -If exact is true, the inexact flag may -be raised; -otherwise, it will not be, even if the conversion is inexact. -

- -

-A conversion from floating-point to integer format raises the invalid -exception if the source value cannot be rounded to a representable integer of -the desired size (32 or 64 bits). -In such circumstances, the integer result returned is determined by the -particular port of SoftFloat, although typically this value will be either the -maximum or minimum value of the integer format. -The functions that convert to integer types never raise the floating-point -overflow exception. -

- -

-Because languages such as C require that conversions to integers -be rounded toward zero, the following functions are provided for improved speed -and convenience: -

-<float>_to_ui32_r_minMag
-<float>_to_ui64_r_minMag
-<float>_to_i32_r_minMag
-<float>_to_i64_r_minMag -
-These functions round only toward zero (to minimum magnitude). -The signatures for these functions are the same as above without the redundant -roundingMode argument: -
-
-int_fast32_t f64_to_i32_r_minMag( float64_t a, bool exact );
-
-
-int_fast32_t f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact );
-
-
-

- -

8.3. Conversions Among Floating-Point Types

- -

-Conversions between floating-point formats are done by functions with these -names: -

-<float>_to_<float> -
-All combinations of source and result type are supported where the source and -result are different formats. -There are four different styles of signature for these functions, depending on -whether the input and the output floating-point values are passed by value or -via pointers: -
-
-float32_t f64_to_f32( float64_t a );
-
-
-float32_t f128M_to_f32( const float128_t *aPtr );
-
-
-void f32_to_f128M( float32_t a, float128_t *destPtr );
-
-
-void extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *destPtr );
-
-
-

- -

-Conversions from a smaller to a larger floating-point format are always exact -and so require no rounding. -

- -

8.4. Basic Arithmetic Functions

- -

-The following basic arithmetic functions are provided: -

-<float>_add
-<float>_sub
-<float>_mul
-<float>_div
-<float>_sqrt -
-Each floating-point operation takes two operands, except for sqrt -(square root) which takes only one. -The operands and result are all of the same floating-point format. -Signatures for these functions take the following forms: -
-
-float64_t f64_add( float64_t a, float64_t b );
-
-
-void
- f128M_add(
-     const float128_t *aPtr, const float128_t *bPtr, float128_t *destPtr );
-
-
-float64_t f64_sqrt( float64_t a );
-
-
-void f128M_sqrt( const float128_t *aPtr, float128_t *destPtr );
-
-
-When floating-point values are passed indirectly through pointers, arguments -aPtr and bPtr point to the input -operands, and the last argument, destPtr, points to the -location where the result is stored. -

- -

-Rounding of the 80-bit double-extended-precision -(extFloat80_t) functions is affected by variable -extF80_roundingPrecision, as explained earlier in -section 6.3, -Rounding Precision for the 80-Bit Extended Format. -

- -

8.5. Fused Multiply-Add Functions

- -

-The 2008 version of the IEEE Floating-Point Standard defines a fused -multiply-add operation that does a combined multiplication and addition -with only a single rounding. -SoftFloat implements fused multiply-add with functions -

-<float>_mulAdd -
-Unlike other operations, fused multiple-add is not supported for the -80-bit double-extended-precision format, -extFloat80_t. -

- -

-Depending on whether floating-point values are passed by value or via pointers, -the fused multiply-add functions have signatures of these forms: -

-
-float64_t f64_mulAdd( float64_t a, float64_t b, float64_t c );
-
-
-void
- f128M_mulAdd(
-     const float128_t *aPtr,
-     const float128_t *bPtr,
-     const float128_t *cPtr,
-     float128_t *destPtr
- );
-
-
-The functions compute -(a × b) - + c -with a single rounding. -When floating-point values are passed indirectly through pointers, arguments -aPtr, bPtr, and -cPtr point to operands a, -b, and c respectively, and -destPtr points to the location where the result is stored. -

- -

-If one of the multiplication operands a and -b is infinite and the other is zero, these functions raise -the invalid exception even if operand c is a quiet NaN. -

- -

8.6. Remainder Functions

- -

-For each format, SoftFloat implements the remainder operation defined by the -IEEE Floating-Point Standard. -The remainder functions have names -

-<float>_rem -
-Each remainder operation takes two floating-point operands of the same format -and returns a result in the same format. -Depending on whether floating-point values are passed by value or via pointers, -the remainder functions have signatures of these forms: -
-
-float64_t f64_rem( float64_t a, float64_t b );
-
-
-void
- f128M_rem(
-     const float128_t *aPtr, const float128_t *bPtr, float128_t *destPtr );
-
-
-When floating-point values are passed indirectly through pointers, arguments -aPtr and bPtr point to operands -a and b respectively, and -destPtr points to the location where the result is stored. -

- -

-The IEEE Standard remainder operation computes the value -a - − n × b, -where n is the integer closest to -a ÷ b. -If a ÷ b is exactly -halfway between two integers, n is the even integer closest to -a ÷ b. -The IEEE Standard’s remainder operation is always exact and so requires -no rounding. -

- -

-Depending on the relative magnitudes of the operands, the remainder -functions can take considerably longer to execute than the other SoftFloat -functions. -This is an inherent characteristic of the remainder operation itself and is not -a flaw in the SoftFloat implementation. -

- -

8.7. Round-to-Integer Functions

- -

-For each format, SoftFloat implements the round-to-integer operation specified -by the IEEE Floating-Point Standard. -These functions are named -

-<float>_roundToInt -
-Each round-to-integer operation takes a single floating-point operand. -This operand is rounded to an integer according to a specified rounding mode, -and the resulting integer value is returned in the same floating-point format. -(Note that the result is not an integer type.) -

- -

-The signatures of the round-to-integer functions are similar to those for -conversions to an integer type: -

-
-float64_t f64_roundToInt( float64_t a, uint_fast8_t roundingMode, bool exact );
-
-
-void
- f128M_roundToInt(
-     const float128_t *aPtr,
-     uint_fast8_t roundingMode,
-     bool exact,
-     float128_t *destPtr
- );
-
-
-When floating-point values are passed indirectly through pointers, -aPtr points to the input operand and -destPtr points to the location where the result is stored. -

- -

-The roundingMode argument specifies the rounding mode to -apply. -The variable that usually indicates rounding mode, -softfloat_roundingMode, is ignored. -Argument exact determines whether the inexact -exception flag is raised if the conversion is not exact. -If exact is true, the inexact flag may -be raised; -otherwise, it will not be, even if the conversion is inexact. -

- -

8.8. Comparison Functions

- -

-For each format, the following floating-point comparison functions are -provided: -

-<float>_eq
-<float>_le
-<float>_lt -
-Each comparison takes two operands of the same type and returns a Boolean. -The abbreviation eq stands for “equal” (=); -le stands for “less than or equal” (≤); -and lt stands for “less than” (<). -Depending on whether the floating-point operands are passed by value or via -pointers, the comparison functions have signatures of these forms: -
-
-bool f64_eq( float64_t a, float64_t b );
-
-
-bool f128M_eq( const float128_t *aPtr, const float128_t *bPtr );
-
-
-

- -

-The usual greater-than (>), greater-than-or-equal (≥), and not-equal -(≠) comparisons are easily obtained from the functions provided. -The not-equal function is just the logical complement of the equal function. -The greater-than-or-equal function is identical to the less-than-or-equal -function with the arguments in reverse order, and likewise the greater-than -function is identical to the less-than function with the arguments reversed. -

- -

-The IEEE Floating-Point Standard specifies that the less-than-or-equal and -less-than comparisons by default raise the invalid exception if either -operand is any kind of NaN. -Equality comparisons, on the other hand, are defined by default to raise the -invalid exception only for signaling NaNs, not quiet NaNs. -For completeness, SoftFloat provides these complementary functions: -

-<float>_eq_signaling
-<float>_le_quiet
-<float>_lt_quiet -
-The signaling equality comparisons are identical to the default -equality comparisons except that the invalid exception is raised for any -NaN input, not just for signaling NaNs. -Similarly, the quiet comparison functions are identical to their -default counterparts except that the invalid exception is not raised for -quiet NaNs. -

- -

8.9. Signaling NaN Test Functions

- -

-Functions for testing whether a floating-point value is a signaling NaN are -provided with these names: -

-<float>_isSignalingNaN -
-The functions take one floating-point operand and return a Boolean indicating -whether the operand is a signaling NaN. -Accordingly, the functions have the forms -
-
-bool f64_isSignalingNaN( float64_t a );
-
-
-bool f128M_isSignalingNaN( const float128_t *aPtr );
-
-
-

- -

8.10. Raise-Exception Function

- -

-SoftFloat provides a single function for raising floating-point exceptions: -

-
-void softfloat_raiseFlags( uint_fast8_t exceptions );
-
-
-The exceptions argument is a mask indicating the set of -exceptions to raise. -(See earlier section 7, Exceptions and Exception Flags.) -In addition to setting the specified exception flags in variable -softfloat_exceptionFlags, the softfloat_raiseFlags -function may cause a trap or abort appropriate for the current system. -

- - -

9. Changes from SoftFloat Release 2

- -

-Apart from a change in the legal use license, Release 3 of -SoftFloat introduced numerous technical differences compared to earlier -releases. -

- -

9.1. Name Changes

- -

-The most obvious and pervasive difference compared to Release 2 -is that the names of most functions and variables have changed, even when the -behavior has not. -First, the floating-point types, the mode variables, the exception flags -variable, the function to raise exceptions, and various associated constants -have been renamed as follows: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
old name, Release 2:new name, Release 3:
float32float32_t
float64float64_t
floatx80extFloat80_t
float128float128_t
float_rounding_modesoftfloat_roundingMode
float_round_nearest_evensoftfloat_round_near_even
float_round_to_zerosoftfloat_round_minMag
float_round_downsoftfloat_round_min
float_round_upsoftfloat_round_max
float_detect_tininesssoftfloat_detectTininess
float_tininess_before_rounding    softfloat_tininess_beforeRounding
float_tininess_after_roundingsoftfloat_tininess_afterRounding
floatx80_rounding_precisionextF80_roundingPrecision
float_exception_flagssoftfloat_exceptionFlags
float_flag_inexactsoftfloat_flag_inexact
float_flag_underflowsoftfloat_flag_underflow
float_flag_overflowsoftfloat_flag_overflow
float_flag_divbyzerosoftfloat_flag_infinite
float_flag_invalidsoftfloat_flag_invalid
float_raisesoftfloat_raiseFlags
-
-

- -

-Furthermore, Release 3 adopted the following new abbreviations for -function names: -

- - - - - - - - - - - -
used in names in Release 2:    used in names in Release 3:
int32 i32
int64 i64
float32 f32
float64 f64
floatx80 extF80
float128 f128
-
-Thus, for example, the function to add two 32-bit floating-point -numbers, previously called float32_add in Release 2, -is now f32_add. -Lastly, there have been a few other changes to function names: -
- - - - - - - - - - - - - - - - - - - - - -
used in names in Release 2:   used in names in Release 3:   relevant functions:
_round_to_zero_r_minMagconversions from floating-point to integer (section 8.2)
round_to_introundToIntround-to-integer functions (section 8.7)
is_signaling_nan    isSignalingNaNsignaling NaN test functions (section 8.9)
-
-

- -

9.2. Changes to Function Arguments

- -

-Besides simple name changes, some operations were given a different interface -in Release 3 than they had in Release 2: -

-

- -

9.3. Added Capabilities

- -

-With Release 3, some new features have been added that were not -present in Release 2: -

-

- -

9.4. Better Compatibility with the C Language

- -

-Release 3 of SoftFloat was written to conform better to the ISO C -Standard’s rules for portability. -For example, older releases of SoftFloat employed type conversions in ways -that, while commonly practiced, are not fully defined by the C Standard. -Such problematic type conversions have generally been replaced by the use of -unions, the behavior around which is more strictly regulated these days. -

- -

9.5. New Organization as a Library

- -

-Starting with Release 3, SoftFloat now builds as a library. -Previously, SoftFloat compiled into a single, monolithic object file containing -all the SoftFloat functions, with the consequence that a program linking with -SoftFloat would get every SoftFloat function in its binary file even if only a -few functions were actually used. -With SoftFloat in the form of a library, a program that is linked by a standard -linker will include only those functions of SoftFloat that it needs and no -others. -

- -

9.6. Optimization Gains (and Losses)

- -

-Individual SoftFloat functions have been variously improved in -Release 3 compared to earlier releases. -In particular, better, faster algorithms have been deployed for the operations -of division, square root, and remainder. -For functions operating on the larger 80-bit and -128-bit formats, extFloat80_t and -float128_t, code size has also generally been reduced. -

- -

-However, because Release 2 compiled all of SoftFloat together as a -single object file, compilers could make optimizations across function calls -when one SoftFloat function calls another. -Now that the functions of SoftFloat are compiled separately and only afterward -linked together into a program, there is not usually the same opportunity to -optimize across function calls. -Some loss of speed has been observed due to this change. -

- - -

10. Future Directions

- -

-The following improvements are anticipated for future releases of SoftFloat: -

-

- - -

11. Contact Information

- -

-At the time of this writing, the most up-to-date information about SoftFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- - - - diff --git a/addins/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -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 -#include -#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)); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include -#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); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c deleted file mode 100644 index 3405b3ba4..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c deleted file mode 100644 index cb7424f43..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c deleted file mode 100644 index e7ea80258..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c deleted file mode 100644 index 7a9423bea..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c deleted file mode 100644 index d4e458a94..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c deleted file mode 100644 index ed6c2268f..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c deleted file mode 100644 index 1182be3c9..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c deleted file mode 100644 index 00baf35f8..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c deleted file mode 100644 index ab6311ef2..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c deleted file mode 100644 index 55ec25b58..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#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 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c deleted file mode 100644 index f838f02aa..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c deleted file mode 100644 index c1e242d23..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c deleted file mode 100644 index b21ba6603..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c deleted file mode 100644 index 6529d2ee5..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c deleted file mode 100644 index ea1d57a78..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -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 -#include -#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 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c deleted file mode 100644 index cc3f0f42c..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c deleted file mode 100644 index aa903bf80..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c +++ /dev/null @@ -1,76 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - - ptr = aWPtr; - isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); - if ( - isSigNaNA - || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto copy; - } - if ( ! softfloat_isNaNF128M( aWPtr ) ) 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 )]; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c deleted file mode 100644 index 1c1c2f4a0..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c +++ /dev/null @@ -1,81 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - struct uint128 uiZ; - - isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); - if ( isSigNaNA || softfloat_isSigNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto returnNonsigA; - } - if ( isNaNF128UI( uiA64, uiA0 ) ) { - returnNonsigA: - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - } else { - uiZ.v64 = uiB64; - uiZ.v0 = uiB0; - } - uiZ.v64 |= UINT64_C( 0x0000800000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c deleted file mode 100644 index 4e87ff41f..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - - isSigNaNA = softfloat_isSigNaNF16UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) return uiA | 0x0200; - } - return (isNaNF16UI( uiA ) ? uiA : uiB) | 0x0200; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c deleted file mode 100644 index e1a875525..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - - isSigNaNA = softfloat_isSigNaNF32UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) return uiA | 0x00400000; - } - return (isNaNF32UI( uiA ) ? uiA : uiB) | 0x00400000; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c deleted file mode 100644 index 1af349f3e..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - - isSigNaNA = softfloat_isSigNaNF64UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) return uiA | UINT64_C( 0x0008000000000000 ); - } - return (isNaNF64UI( uiA ) ? uiA : uiB) | UINT64_C( 0x0008000000000000 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c deleted file mode 100644 index 3115306be..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -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; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/specialize.h b/addins/SoftFloat-3e/source/8086-SSE/specialize.h deleted file mode 100644 index 5fe119a1e..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/specialize.h +++ /dev/null @@ -1,376 +0,0 @@ - -/*============================================================================ - -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 -#include -#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 - diff --git a/addins/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -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 -#include -#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)); - -} - diff --git a/addins/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include -#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); - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c deleted file mode 100644 index 3405b3ba4..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c deleted file mode 100644 index cb7424f43..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF128M.c deleted file mode 100644 index e7ea80258..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c deleted file mode 100644 index 7a9423bea..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c deleted file mode 100644 index d4e458a94..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c deleted file mode 100644 index ed6c2268f..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c deleted file mode 100644 index 1182be3c9..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c deleted file mode 100644 index 00baf35f8..000000000 --- a/addins/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c deleted file mode 100644 index ab6311ef2..000000000 --- a/addins/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c deleted file mode 100644 index 55ec25b58..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#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 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c deleted file mode 100644 index f838f02aa..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c deleted file mode 100644 index c1e242d23..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c deleted file mode 100644 index b21ba6603..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c deleted file mode 100644 index 6529d2ee5..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c deleted file mode 100644 index ea1d57a78..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -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 -#include -#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 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c deleted file mode 100644 index cc3f0f42c..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF128M.c deleted file mode 100644 index 06554fbfe..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128M.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -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 -#include -#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 )]; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c deleted file mode 100644 index 46b9f5f2c..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c deleted file mode 100644 index 89cc0fe97..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c deleted file mode 100644 index aeb6024ac..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c deleted file mode 100644 index dabad4024..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -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 -#include -#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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/8086/softfloat_raiseFlags.c deleted file mode 100644 index 3115306be..000000000 --- a/addins/SoftFloat-3e/source/8086/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -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; - -} - diff --git a/addins/SoftFloat-3e/source/8086/specialize.h b/addins/SoftFloat-3e/source/8086/specialize.h deleted file mode 100644 index 5fe119a1e..000000000 --- a/addins/SoftFloat-3e/source/8086/specialize.h +++ /dev/null @@ -1,376 +0,0 @@ - -/*============================================================================ - -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 -#include -#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 - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -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 -#include -#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)); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include -#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); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c deleted file mode 100644 index 54a50dc35..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -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, 2017 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_types.h" - -#define softfloat_commonNaNToExtF80M softfloat_commonNaNToExtF80M -#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 = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c deleted file mode 100644 index 5b698f664..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -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, 2017 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 "primitiveTypes.h" - -#define softfloat_commonNaNToExtF80UI softfloat_commonNaNToExtF80UI -#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 = defaultNaNExtF80UI64; - uiZ.v0 = defaultNaNExtF80UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c deleted file mode 100644 index b22baa816..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.h" -#include "primitiveTypes.h" - -#define softfloat_commonNaNToF128M softfloat_commonNaNToF128M -#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 ) -{ - - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c deleted file mode 100644 index 70f0cf1c6..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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, 2017 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 "primitiveTypes.h" - -#define softfloat_commonNaNToF128UI softfloat_commonNaNToF128UI -#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.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c deleted file mode 100644 index 1c6510c7e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.h" -#include "primitiveTypes.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 - ) -{ - uint_fast16_t ui64; - uint_fast64_t ui0; - - ui64 = aSPtr->signExp; - ui0 = aSPtr->signif; - if ( - softfloat_isSigNaNExtF80UI( ui64, ui0 ) - || (bSPtr - && (ui64 = bSPtr->signExp, - ui0 = bSPtr->signif, - softfloat_isSigNaNExtF80UI( ui64, ui0 ))) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zSPtr->signExp = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c deleted file mode 100644 index e1bb1555a..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.h" -#include "primitiveTypes.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 - ) -{ - struct uint128 uiZ; - - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - uiZ.v64 = defaultNaNExtF80UI64; - uiZ.v0 = defaultNaNExtF80UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c deleted file mode 100644 index 9bddee955..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c +++ /dev/null @@ -1,68 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.h" -#include "primitiveTypes.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 ) -{ - - if ( - f128M_isSignalingNaN( (const float128_t *) aWPtr ); - || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c deleted file mode 100644 index 57fddd158..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.h" -#include "primitiveTypes.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 - ) -{ - struct uint128 uiZ; - - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c deleted file mode 100644 index 0b08e0039..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.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 ) -{ - - if ( softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return defaultNaNF16UI; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c deleted file mode 100644 index cab740358..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.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 ) -{ - - if ( softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return defaultNaNF32UI; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c deleted file mode 100644 index 83b91d3a9..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include "platform.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 ) -{ - - if ( softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return defaultNaNF64UI; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c deleted file mode 100644 index 61046da3c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -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, 2017 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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h deleted file mode 100644 index 2c481a259..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h +++ /dev/null @@ -1,407 +0,0 @@ - -/*============================================================================ - -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, 2017, 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 -#include -#include "primitiveTypes.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Default value for 'softfloat_detectTininess'. -*----------------------------------------------------------------------------*/ -#define init_detectTininess softfloat_tininess_beforeRounding - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 32-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui32_fromPosOverflow 0xFFFFFFFF -#define ui32_fromNegOverflow 0 -#define ui32_fromNaN 0 -#define i32_fromPosOverflow 0x7FFFFFFF -#define i32_fromNegOverflow (-0x7FFFFFFF - 1) -#define i32_fromNaN 0 - -/*---------------------------------------------------------------------------- -| 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 0 -#define ui64_fromNaN 0 -#define i64_fromPosOverflow INT64_C( 0x7FFFFFFFFFFFFFFF ) -#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNaN 0 - -/*---------------------------------------------------------------------------- -| "Common NaN" structure, used to transfer NaN representations from one format -| to another. -*----------------------------------------------------------------------------*/ -struct commonNaN { char _unused; }; - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 16-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF16UI 0x7E00 - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#define softfloat_f16UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & 0x0200) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#define softfloat_commonNaNToF16UI( aPtr ) ((uint_fast16_t) defaultNaNF16UI) - -/*---------------------------------------------------------------------------- -| 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 0x7FC00000 - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#define softfloat_f32UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & 0x00400000) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#define softfloat_commonNaNToF32UI( aPtr ) ((uint_fast32_t) defaultNaNF32UI) - -/*---------------------------------------------------------------------------- -| 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( 0x7FF8000000000000 ) - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#define softfloat_f64UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & UINT64_C( 0x0008000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#define softfloat_commonNaNToF64UI( aPtr ) ((uint_fast64_t) defaultNaNF64UI) - -/*---------------------------------------------------------------------------- -| 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 0x7FFF -#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. -*----------------------------------------------------------------------------*/ -#define softfloat_extF80UIToCommonNaN( uiA64, uiA0, zPtr ) if ( ! ((uiA0) & UINT64_C( 0x4000000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToExtF80UI -INLINE -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - uiZ.v64 = defaultNaNExtF80UI64; - uiZ.v0 = defaultNaNExtF80UI0; - return uiZ; -} -#else -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ); -#endif - -/*---------------------------------------------------------------------------- -| 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( 0x7FFF800000000000 ) -#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. -*----------------------------------------------------------------------------*/ -#define softfloat_f128UIToCommonNaN( uiA64, uiA0, zPtr ) if ( ! ((uiA64) & UINT64_C( 0x0000800000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToF128UI -INLINE -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - return uiZ; -} -#else -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * ); -#endif - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#define softfloat_extF80MToCommonNaN( aSPtr, zPtr ) if ( ! ((aSPtr)->signif & UINT64_C( 0x4000000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| 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'. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToExtF80M -INLINE -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) -{ - zSPtr->signExp = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; -} -#else -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ); -#endif - -/*---------------------------------------------------------------------------- -| 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 0x7FFF8000 -#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. -*----------------------------------------------------------------------------*/ -#define softfloat_f128MToCommonNaN( aWPtr, zPtr ) if ( ! ((aWPtr)[indexWordHi( 4 )] & UINT64_C( 0x0000800000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| 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. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToF128M -INLINE -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) -{ - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; -} -#else -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ); -#endif - -/*---------------------------------------------------------------------------- -| 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 - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -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 -#include -#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)); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include -#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); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c deleted file mode 100644 index 543400bc1..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c deleted file mode 100644 index 6cf1d1191..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c deleted file mode 100644 index 4e8ede07f..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c deleted file mode 100644 index f938c3f2d..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c deleted file mode 100644 index 6cd4fc192..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c deleted file mode 100644 index 7b38167f0..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c deleted file mode 100644 index 14847029d..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c deleted file mode 100644 index 82216cf41..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c deleted file mode 100644 index 2559fb6d2..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c deleted file mode 100644 index 322d25ab1..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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 ); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c deleted file mode 100644 index 843c187a7..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c deleted file mode 100644 index f5fe58770..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c deleted file mode 100644 index 58726a357..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c deleted file mode 100644 index 03761e433..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c deleted file mode 100644 index f10ed0b62..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,86 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#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 - ) -{ - const struct extFloat80M *sPtr; - bool isSigNaNA; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - sPtr = aSPtr; - isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ); - if ( - isSigNaNA - || (bSPtr - && extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto copyNonsig; - goto copyNonsigB; - } - uiZ64 = sPtr->signExp; - uiZ0 = sPtr->signif; - if ( isNaNExtF80UI( uiZ64, uiZ0 ) ) goto returnNonsig; - copyNonsigB: - sPtr = bSPtr; - copyNonsig: - uiZ64 = sPtr->signExp; - uiZ0 = sPtr->signif; - returnNonsig: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0 | UINT64_C( 0xC000000000000000 ); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c deleted file mode 100644 index bd23c2473..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#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; - struct uint128 uiZ; - - isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 ); - if ( isSigNaNA || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto returnNonsigA; - goto returnNonsigB; - } - if ( isNaNExtF80UI( uiA64, uiA0 ) ) { - returnNonsigA: - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - } else { - returnNonsigB: - uiZ.v64 = uiB64; - uiZ.v0 = uiB0; - } - uiZ.v0 | UINT64_C( 0xC000000000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c deleted file mode 100644 index 23e766a19..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c +++ /dev/null @@ -1,77 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#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 ) -{ - const uint32_t *ptr; - bool isSigNaNA; - - ptr = aWPtr; - isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); - if ( - isSigNaNA - || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( ! isSigNaNA ) ptr = bWPtr; - goto copyNonsig; - } - if ( ! softfloat_isNaNF128M( aWPtr ) ) ptr = bWPtr; - copyNonsig: - 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 )]; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c deleted file mode 100644 index b8882d77c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#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; - struct uint128 uiZ; - - isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); - if ( isSigNaNA || softfloat_isSigNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto returnNonsigA; - goto returnNonsigB; - } - if ( isNaNF128UI( uiA64, uiA0 ) ) { - returnNonsigA: - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - } else { - returnNonsigB: - uiZ.v64 = uiB64; - uiZ.v0 = uiB0; - } - uiZ.v64 |= UINT64_C( 0x0000800000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c deleted file mode 100644 index e33332874..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#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; - - isSigNaNA = softfloat_isSigNaNF16UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return (isSigNaNA ? uiA : uiB) | 0x0200; - } - return isNaNF16UI( uiA ) ? uiA : uiB; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c deleted file mode 100644 index c7508ae7c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#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; - - isSigNaNA = softfloat_isSigNaNF32UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return (isSigNaNA ? uiA : uiB) | 0x00400000; - } - return isNaNF32UI( uiA ) ? uiA : uiB; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c deleted file mode 100644 index 8c6776381..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#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; - - isSigNaNA = softfloat_isSigNaNF64UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return (isSigNaNA ? uiA : uiB) | UINT64_C( 0x0008000000000000 ); - } - return isNaNF64UI( uiA ) ? uiA : uiB; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c deleted file mode 100644 index 61046da3c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -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, 2017 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; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/specialize.h b/addins/SoftFloat-3e/source/ARM-VFPv2/specialize.h deleted file mode 100644 index 5321f33bc..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/specialize.h +++ /dev/null @@ -1,376 +0,0 @@ - -/*============================================================================ - -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, 2017, 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 -#include -#include "primitiveTypes.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Default value for 'softfloat_detectTininess'. -*----------------------------------------------------------------------------*/ -#define init_detectTininess softfloat_tininess_beforeRounding - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 32-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui32_fromPosOverflow 0xFFFFFFFF -#define ui32_fromNegOverflow 0 -#define ui32_fromNaN 0 -#define i32_fromPosOverflow 0x7FFFFFFF -#define i32_fromNegOverflow (-0x7FFFFFFF - 1) -#define i32_fromNaN 0 - -/*---------------------------------------------------------------------------- -| 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 0 -#define ui64_fromNaN 0 -#define i64_fromPosOverflow INT64_C( 0x7FFFFFFFFFFFFFFF ) -#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNaN 0 - -/*---------------------------------------------------------------------------- -| "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 0x7E00 - -/*---------------------------------------------------------------------------- -| 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 0x7FC00000 - -/*---------------------------------------------------------------------------- -| 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( 0x7FF8000000000000 ) - -/*---------------------------------------------------------------------------- -| 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 0x7FFF -#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( 0x7FFF800000000000 ) -#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 0x7FFF8000 -#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 - diff --git a/addins/SoftFloat-3e/source/extF80M_add.c b/addins/SoftFloat-3e/source/extF80M_add.c deleted file mode 100644 index 02e415fcc..000000000 --- a/addins/SoftFloat-3e/source/extF80M_add.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - signA = signExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsExtF80 : softfloat_subMagsExtF80; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - softfloat_addExtF80M( - (const struct extFloat80M *) aPtr, - (const struct extFloat80M *) bPtr, - (struct extFloat80M *) zPtr, - false - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_div.c b/addins/SoftFloat-3e/source/extF80M_div.c deleted file mode 100644 index 4d543ce9e..000000000 --- a/addins/SoftFloat-3e/source/extF80M_div.c +++ /dev/null @@ -1,194 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_div( *aPtr, *bPtr ); - -} - -#else - -void - extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64; - int32_t expA; - uint_fast16_t uiB64; - int32_t expB; - bool signZ; - uint64_t sigA, x64; - int32_t expZ; - int shiftDist; - uint32_t y[3], recip32, sigB[3]; - int ix; - uint32_t q, qs[2]; - uint_fast16_t uiZ64; - uint64_t uiZ0; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - expB = expExtF80UI64( uiB64 ); - signZ = signExtF80UI64( uiA64 ) ^ signExtF80UI64( uiB64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - if ( expA == 0x7FFF ) { - if ( expB == 0x7FFF ) goto invalid; - goto infinity; - } - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigA = aSPtr->signif; - x64 = bSPtr->signif; - if ( ! expB ) expB = 1; - if ( ! (x64 & UINT64_C( 0x8000000000000000 )) ) { - if ( ! x64 ) { - if ( ! sigA ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - expB += softfloat_normExtF80SigM( &x64 ); - } - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - expA += softfloat_normExtF80SigM( &sigA ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFF; - shiftDist = 29; - if ( sigA < x64 ) { - --expZ; - shiftDist = 30; - } - softfloat_shortShiftLeft64To96M( sigA, shiftDist, y ); - recip32 = softfloat_approxRecip32_1( x64>>32 ); - sigB[indexWord( 3, 0 )] = (uint32_t) x64<<30; - x64 >>= 2; - sigB[indexWord( 3, 2 )] = x64>>32; - sigB[indexWord( 3, 1 )] = x64; - ix = 2; - for (;;) { - x64 = (uint64_t) y[indexWordHi( 3 )] * recip32; - q = (x64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - softfloat_remStep96MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 3 )] & 0x80000000 ) { - --q; - softfloat_add96M( y, sigB, y ); - } - qs[ix] = q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 0x3FFFFF) < 2 ) { - softfloat_remStep96MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 3 )] & 0x80000000 ) { - --q; - softfloat_add96M( y, sigB, y ); - } else if ( softfloat_compare96M( sigB, y ) <= 0 ) { - ++q; - softfloat_sub96M( y, sigB, y ); - } - if ( - y[indexWordLo( 3 )] || y[indexWord( 3, 1 )] || y[indexWord( 3, 2 )] - ) { - q |= 1; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - x64 = (uint64_t) q<<9; - y[indexWord( 3, 0 )] = x64; - x64 = ((uint64_t) qs[0]<<6) + (x64>>32); - y[indexWord( 3, 1 )] = x64; - y[indexWord( 3, 2 )] = (qs[1]<<3) + (x64>>32); - softfloat_roundPackMToExtF80M( - signZ, expZ, y, extF80_roundingPrecision, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidExtF80M( zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_eq.c b/addins/SoftFloat-3e/source/extF80M_eq.c deleted file mode 100644 index e17aa2435..000000000 --- a/addins/SoftFloat-3e/source/extF80M_eq.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_eq( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( uiA0 == uiB0 ) { - return (uiA64 == uiB64) || ! uiA0; - } else { - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return ! softfloat_compareNonnormExtF80M( aSPtr, bSPtr ); - } - return false; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_eq_signaling.c b/addins/SoftFloat-3e/source/extF80M_eq_signaling.c deleted file mode 100644 index c4a732239..000000000 --- a/addins/SoftFloat-3e/source/extF80M_eq_signaling.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_eq_signaling( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_eq_signaling( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_eq_signaling( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( uiA0 == uiB0 ) { - return (uiA64 == uiB64) || ! uiA0; - } else { - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return ! softfloat_compareNonnormExtF80M( aSPtr, bSPtr ); - } - return false; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_le.c b/addins/SoftFloat-3e/source/extF80M_le.c deleted file mode 100644 index e54eb9eea..000000000 --- a/addins/SoftFloat-3e/source/extF80M_le.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_le( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA || ! (uiA0 | uiB0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) <= 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return true; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_le_quiet.c b/addins/SoftFloat-3e/source/extF80M_le_quiet.c deleted file mode 100644 index 943f26206..000000000 --- a/addins/SoftFloat-3e/source/extF80M_le_quiet.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_le_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_le_quiet( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_le_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA || ! (uiA0 | uiB0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) <= 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return true; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_lt.c b/addins/SoftFloat-3e/source/extF80M_lt.c deleted file mode 100644 index cbc562f64..000000000 --- a/addins/SoftFloat-3e/source/extF80M_lt.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_lt( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA && ((uiA0 | uiB0) != 0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) < 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return false; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_lt_quiet.c b/addins/SoftFloat-3e/source/extF80M_lt_quiet.c deleted file mode 100644 index 650586d02..000000000 --- a/addins/SoftFloat-3e/source/extF80M_lt_quiet.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_lt_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_lt_quiet( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_lt_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA && ((uiA0 | uiB0) != 0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) < 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return false; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_mul.c b/addins/SoftFloat-3e/source/extF80M_mul.c deleted file mode 100644 index 281394f71..000000000 --- a/addins/SoftFloat-3e/source/extF80M_mul.c +++ /dev/null @@ -1,139 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_mul( *aPtr, *bPtr ); - -} - -#else - -void - extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64; - int32_t expA; - uint_fast16_t uiB64; - int32_t expB; - bool signZ; - uint_fast16_t exp, uiZ64; - uint64_t uiZ0, sigA, sigB; - int32_t expZ; - uint32_t sigProd[4], *extSigZPtr; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - expB = expExtF80UI64( uiB64 ); - signZ = signExtF80UI64( uiA64 ) ^ signExtF80UI64( uiB64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - if ( - (! aSPtr->signif && (expA != 0x7FFF)) - || (! bSPtr->signif && (expB != 0x7FFF)) - ) { - softfloat_invalidExtF80M( zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - sigA = aSPtr->signif; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - expA += softfloat_normExtF80SigM( &sigA ); - } - if ( ! expB ) expB = 1; - sigB = bSPtr->signif; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) goto zero; - expB += softfloat_normExtF80SigM( &sigB ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FFE; - softfloat_mul64To128M( sigA, sigB, sigProd ); - if ( sigProd[indexWordLo( 4 )] ) sigProd[indexWord( 4, 1 )] |= 1; - extSigZPtr = &sigProd[indexMultiwordHi( 4, 3 )]; - if ( sigProd[indexWordHi( 4 )] < 0x80000000 ) { - --expZ; - softfloat_add96M( extSigZPtr, extSigZPtr, extSigZPtr ); - } - softfloat_roundPackMToExtF80M( - signZ, expZ, extSigZPtr, extF80_roundingPrecision, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_rem.c b/addins/SoftFloat-3e/source/extF80M_rem.c deleted file mode 100644 index 4aff18ae9..000000000 --- a/addins/SoftFloat-3e/source/extF80M_rem.c +++ /dev/null @@ -1,204 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_rem( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_rem( *aPtr, *bPtr ); - -} - -#else - -void - extF80M_rem( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64; - int32_t expA, expB; - uint64_t x64; - bool signRem; - uint64_t sigA; - int32_t expDiff; - uint32_t rem[3], x[3], sig32B, q, recip32, rem2[3], *remPtr, *altRemPtr; - uint32_t *newRemPtr, wordMeanRem; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - expB = expExtF80UI64( bSPtr->signExp ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - if ( expA == 0x7FFF ) goto invalid; - /*-------------------------------------------------------------------- - | If we get here, then argument b is an infinity and `expB' is 0x7FFF; - | Doubling `expB' is an easy way to ensure that `expDiff' later is - | less than -1, which will result in returning a canonicalized version - | of argument a. - *--------------------------------------------------------------------*/ - expB += expB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) expB = 1; - x64 = bSPtr->signif; - if ( ! (x64 & UINT64_C( 0x8000000000000000 )) ) { - if ( ! x64 ) goto invalid; - expB += softfloat_normExtF80SigM( &x64 ); - } - signRem = signExtF80UI64( uiA64 ); - if ( ! expA ) expA = 1; - sigA = aSPtr->signif; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) { - expA = 0; - goto copyA; - } - expA += softfloat_normExtF80SigM( &sigA ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( expDiff < -1 ) goto copyA; - rem[indexWord( 3, 2 )] = sigA>>34; - rem[indexWord( 3, 1 )] = sigA>>2; - rem[indexWord( 3, 0 )] = (uint32_t) sigA<<30; - x[indexWord( 3, 0 )] = (uint32_t) x64<<30; - sig32B = x64>>32; - x64 >>= 2; - x[indexWord( 3, 2 )] = x64>>32; - x[indexWord( 3, 1 )] = x64; - if ( expDiff < 1 ) { - if ( expDiff ) { - --expB; - softfloat_add96M( x, x, x ); - q = 0; - } else { - q = (softfloat_compare96M( x, rem ) <= 0); - if ( q ) softfloat_sub96M( rem, x, rem ); - } - } else { - recip32 = softfloat_approxRecip32_1( sig32B ); - expDiff -= 30; - for (;;) { - x64 = (uint64_t) rem[indexWordHi( 3 )] * recip32; - if ( expDiff < 0 ) break; - q = (x64 + 0x80000000)>>32; - softfloat_remStep96MBy32( rem, 29, x, q, rem ); - if ( rem[indexWordHi( 3 )] & 0x80000000 ) { - softfloat_add96M( rem, x, rem ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (x64>>32)>>(~expDiff & 31); - softfloat_remStep96MBy32( rem, expDiff + 30, x, q, rem ); - if ( rem[indexWordHi( 3 )] & 0x80000000 ) { - remPtr = rem; - altRemPtr = rem2; - softfloat_add96M( remPtr, x, altRemPtr ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - remPtr = rem; - altRemPtr = rem2; - do { - ++q; - newRemPtr = altRemPtr; - softfloat_sub96M( remPtr, x, newRemPtr ); - altRemPtr = remPtr; - remPtr = newRemPtr; - } while ( ! (remPtr[indexWordHi( 3 )] & 0x80000000) ); - selectRem: - softfloat_add96M( remPtr, altRemPtr, x ); - wordMeanRem = x[indexWordHi( 3 )]; - if ( - (wordMeanRem & 0x80000000) - || (! wordMeanRem && (q & 1) && ! x[indexWord( 3, 0 )] - && ! x[indexWord( 3, 1 )]) - ) { - remPtr = altRemPtr; - } - if ( remPtr[indexWordHi( 3 )] & 0x80000000 ) { - signRem = ! signRem; - softfloat_negX96M( remPtr ); - } - softfloat_normRoundPackMToExtF80M( signRem, expB + 2, remPtr, 80, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidExtF80M( zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - if ( expA < 1 ) { - sigA >>= 1 - expA; - expA = 0; - } - zSPtr->signExp = packToExtF80UI64( signRem, expA ); - zSPtr->signif = sigA; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_roundToInt.c b/addins/SoftFloat-3e/source/extF80M_roundToInt.c deleted file mode 100644 index 2e8572957..000000000 --- a/addins/SoftFloat-3e/source/extF80M_roundToInt.c +++ /dev/null @@ -1,176 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_roundToInt( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - - *zPtr = extF80_roundToInt( *aPtr, roundingMode, exact ); - -} - -#else - -void - extF80M_roundToInt( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - const struct extFloat80M *aSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64, signUI64; - int32_t exp; - uint64_t sigA; - uint_fast16_t uiZ64; - uint64_t sigZ, lastBitMask, roundBitsMask; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - signUI64 = uiA64 & packToExtF80UI64( 1, 0 ); - exp = expExtF80UI64( uiA64 ); - sigA = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( !(sigA & UINT64_C( 0x8000000000000000 )) && (exp != 0x7FFF) ) { - if ( !sigA ) { - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sigA ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0x3FFE ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !(sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) goto mag1; - break; - case softfloat_round_min: - if ( signUI64 ) goto mag1; - break; - case softfloat_round_max: - if ( !signUI64 ) goto mag1; - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - goto mag1; -#endif - } - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - mag1: - uiZ64 = signUI64 | 0x3FFF; - sigZ = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x403E <= exp ) { - if ( exp == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_propagateNaNExtF80M( aSPtr, 0, zSPtr ); - return; - } - sigZ = UINT64_C( 0x8000000000000000 ); - } else { - sigZ = sigA; - } - uiZ64 = signUI64 | exp; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = signUI64 | exp; - lastBitMask = (uint64_t) 1<<(0x403E - exp); - roundBitsMask = lastBitMask - 1; - sigZ = sigA; - if ( roundingMode == softfloat_round_near_maxMag ) { - sigZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - sigZ += lastBitMask>>1; - if ( !(sigZ & roundBitsMask) ) sigZ &= ~lastBitMask; - } else if ( - roundingMode == (signUI64 ? softfloat_round_min : softfloat_round_max) - ) { - sigZ += roundBitsMask; - } - sigZ &= ~roundBitsMask; - if ( !sigZ ) { - ++uiZ64; - sigZ = UINT64_C( 0x8000000000000000 ); - } - if ( sigZ != sigA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sigZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = sigZ; - return; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_sqrt.c b/addins/SoftFloat-3e/source/extF80M_sqrt.c deleted file mode 100644 index 7ee91e0e5..000000000 --- a/addins/SoftFloat-3e/source/extF80M_sqrt.c +++ /dev/null @@ -1,180 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void extF80M_sqrt( const extFloat80_t *aPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_sqrt( *aPtr ); - -} - -#else - -void extF80M_sqrt( const extFloat80_t *aPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64, signUI64; - int32_t expA; - uint64_t rem64; - int32_t expZ; - uint32_t rem96[3], sig32A, recipSqrt32, sig32Z, q; - uint64_t sig64Z, x64; - uint32_t rem32, term[4], rem[4], extSigZ[3]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - signUI64 = uiA64 & packToExtF80UI64( 1, 0 ); - expA = expExtF80UI64( uiA64 ); - rem64 = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( rem64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_propagateNaNExtF80M( aSPtr, 0, zSPtr ); - return; - } - if ( signUI64 ) goto invalid; - rem64 = UINT64_C( 0x8000000000000000 ); - goto copyA; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (rem64 & UINT64_C( 0x8000000000000000 )) ) { - if ( ! rem64 ) { - uiA64 = signUI64; - goto copyA; - } - expA += softfloat_normExtF80SigM( &rem64 ); - } - if ( signUI64 ) goto invalid; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFF; - expA &= 1; - softfloat_shortShiftLeft64To96M( rem64, 30 - expA, rem96 ); - sig32A = rem64>>32; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint64_t) sig32A * recipSqrt32)>>32; - if ( expA ) sig32Z >>= 1; - rem64 = - ((uint64_t) rem96[indexWord( 3, 2 )]<<32 | rem96[indexWord( 3, 1 )]) - - (uint64_t) sig32Z * sig32Z; - rem96[indexWord( 3, 2 )] = rem64>>32; - rem96[indexWord( 3, 1 )] = rem64; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32; - sig64Z = ((uint64_t) sig32Z<<32) + ((uint64_t) q<<3); - term[indexWord( 3, 2 )] = 0; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - x64 = ((uint64_t) sig32Z<<32) + sig64Z; - term[indexWord( 3, 1 )] = x64>>32; - term[indexWord( 3, 0 )] = x64; - softfloat_remStep96MBy32( - rem96, 29, term, q, &rem[indexMultiwordHi( 4, 3 )] ); - rem32 = rem[indexWord( 4, 3 )]; - if ( ! (rem32 & 0x80000000) ) break; - --q; - sig64Z -= 1<<3; - } - rem64 = (uint64_t) rem32<<32 | rem[indexWord( 4, 2 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32) + 2; - if ( rem64>>34 ) q += recipSqrt32; - x64 = (uint64_t) q<<7; - extSigZ[indexWord( 3, 0 )] = x64; - x64 = (sig64Z<<1) + (x64>>32); - extSigZ[indexWord( 3, 2 )] = x64>>32; - extSigZ[indexWord( 3, 1 )] = x64; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xFFFFFF) <= 2 ) { - q &= ~(uint32_t) 0xFFFF; - extSigZ[indexWordLo( 3 )] = q<<7; - x64 = sig64Z + (q>>27); - term[indexWord( 4, 3 )] = 0; - term[indexWord( 4, 2 )] = x64>>32; - term[indexWord( 4, 1 )] = x64; - term[indexWord( 4, 0 )] = q<<5; - rem[indexWord( 4, 0 )] = 0; - softfloat_remStep128MBy32( rem, 28, term, q, rem ); - q = rem[indexWordHi( 4 )]; - if ( q & 0x80000000 ) { - softfloat_sub1X96M( extSigZ ); - } else { - if ( q || rem[indexWord( 4, 1 )] || rem[indexWord( 4, 2 )] ) { - extSigZ[indexWordLo( 3 )] |= 1; - } - } - } - softfloat_roundPackMToExtF80M( - 0, expZ, extSigZ, extF80_roundingPrecision, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidExtF80M( zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - zSPtr->signExp = uiA64; - zSPtr->signif = rem64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_sub.c b/addins/SoftFloat-3e/source/extF80M_sub.c deleted file mode 100644 index 5d1895c7a..000000000 --- a/addins/SoftFloat-3e/source/extF80M_sub.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - signA = signExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsExtF80 : softfloat_addMagsExtF80; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - softfloat_addExtF80M( - (const struct extFloat80M *) aPtr, - (const struct extFloat80M *) bPtr, - (struct extFloat80M *) zPtr, - true - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f128M.c b/addins/SoftFloat-3e/source/extF80M_to_f128M.c deleted file mode 100644 index da81e8d6b..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f128M.c +++ /dev/null @@ -1,125 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *zPtr ) -{ - - *zPtr = extF80_to_f128( *aPtr ); - -} - -#else - -void extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *zPtr ) -{ - const struct extFloat80M *aSPtr; - uint32_t *zWPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint32_t uiZ96; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 0 )] = 0; - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) --exp; - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 1 )] = (uint32_t) sig<<17; - sig >>= 15; - zWPtr[indexWord( 4, 2 )] = sig; - if ( exp < 0 ) { - zWPtr[indexWordHi( 4 )] = sig>>32; - softfloat_shiftRight96M( - &zWPtr[indexMultiwordHi( 4, 3 )], - -exp, - &zWPtr[indexMultiwordHi( 4, 3 )] - ); - exp = 0; - sig = (uint64_t) zWPtr[indexWordHi( 4 )]<<32; - } - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, exp, sig>>32 ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f16.c b/addins/SoftFloat-3e/source/extF80M_to_f16.c deleted file mode 100644 index 5ae38d0c4..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f16.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float16_t extF80M_to_f16( const extFloat80_t *aPtr ) -{ - - return extF80_to_f16( *aPtr ); - -} - -#else - -float16_t extF80M_to_f16( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint16_t uiZ, sig16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig16 = softfloat_shortShiftRightJam64( sig, 49 ); - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, sig16 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f32.c b/addins/SoftFloat-3e/source/extF80M_to_f32.c deleted file mode 100644 index 47cf224dc..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f32.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float32_t extF80M_to_f32( const extFloat80_t *aPtr ) -{ - - return extF80_to_f32( *aPtr ); - -} - -#else - -float32_t extF80M_to_f32( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint32_t uiZ, sig32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = softfloat_shortShiftRightJam64( sig, 33 ); - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, sig32 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f64.c b/addins/SoftFloat-3e/source/extF80M_to_f64.c deleted file mode 100644 index 5f8f4aa29..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f64.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float64_t extF80M_to_f64( const extFloat80_t *aPtr ) -{ - - return extF80_to_f64( *aPtr ); - -} - -#else - -float64_t extF80M_to_f64( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = softfloat_shortShiftRightJam64( sig, 1 ); - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF64( sign, exp, sig ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_i32.c b/addins/SoftFloat-3e/source/extF80M_to_i32.c deleted file mode 100644 index 06394e341..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_i32.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t - extF80M_to_i32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_i32( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast32_t - extF80M_to_i32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) { - if ( sig>>32 ) goto invalid; - if ( -32 < shiftDist ) { - sig <<= -shiftDist; - } else { - if ( (uint32_t) sig ) goto invalid; - } - } else { - sig = softfloat_shiftRightJam64( sig, shiftDist ); - } - return softfloat_roundToI32( sign, sig, roundingMode, exact ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c deleted file mode 100644 index 5f5cf599d..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t extF80M_to_i32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_i32_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast32_t extF80M_to_i32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign, raiseInexact; - int32_t z; - uint64_t shiftedSig; - uint32_t absZ; - union { uint32_t ui; int32_t i; } u; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - raiseInexact = exact; - z = 0; - } else { - sign = signExtF80UI64( uiA64 ); - raiseInexact = false; - if ( shiftDist < 0 ) { - if ( sig>>32 || (shiftDist <= -31) ) goto invalid; - shiftedSig = (uint64_t) (uint32_t) sig<<-shiftDist; - if ( shiftedSig>>32 ) goto invalid; - absZ = shiftedSig; - } else { - shiftedSig = sig; - if ( shiftDist ) shiftedSig >>= shiftDist; - if ( shiftedSig>>32 ) goto invalid; - absZ = shiftedSig; - if ( exact && shiftDist ) { - raiseInexact = ((uint64_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t - extF80M_to_i64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_i64( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast64_t - extF80M_to_i64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - uint32_t extSig[3]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToI64( sign, extSig, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c deleted file mode 100644 index ec9b92844..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c +++ /dev/null @@ -1,115 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t extF80M_to_i64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_i64_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast64_t extF80M_to_i64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign, raiseInexact; - int64_t z; - uint64_t absZ; - union { uint64_t ui; int64_t i; } u; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - raiseInexact = exact; - z = 0; - } else { - sign = signExtF80UI64( uiA64 ); - raiseInexact = false; - if ( shiftDist < 0 ) { - if ( shiftDist <= -63 ) goto invalid; - shiftDist = -shiftDist; - absZ = sig<>shiftDist != sig ) goto invalid; - } else { - absZ = sig; - if ( shiftDist ) absZ >>= shiftDist; - if ( exact && shiftDist ) raiseInexact = (absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t - extF80M_to_ui32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_ui32( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast32_t - extF80M_to_ui32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) { - if ( sig>>32 ) goto invalid; - if ( -32 < shiftDist ) { - sig <<= -shiftDist; - } else { - if ( (uint32_t) sig ) goto invalid; - } - } else { - sig = softfloat_shiftRightJam64( sig, shiftDist ); - } - return softfloat_roundToUI32( sign, sig, roundingMode, exact ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c deleted file mode 100644 index e28b08d70..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t extF80M_to_ui32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_ui32_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast32_t extF80M_to_ui32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign; - uint64_t shiftedSig; - uint32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist < 0 ) { - if ( sign || sig>>32 || (shiftDist <= -31) ) goto invalid; - shiftedSig = (uint64_t) (uint32_t) sig<<-shiftDist; - if ( shiftedSig>>32 ) goto invalid; - z = shiftedSig; - } else { - shiftedSig = sig; - if ( shiftDist ) shiftedSig >>= shiftDist; - if ( shiftedSig>>32 ) goto invalid; - z = shiftedSig; - if ( sign && z ) goto invalid; - if ( exact && shiftDist && ((uint64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t - extF80M_to_ui64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_ui64( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast64_t - extF80M_to_ui64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - uint32_t extSig[3]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c deleted file mode 100644 index 87d80897b..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t extF80M_to_ui64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_ui64_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast64_t extF80M_to_ui64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign; - uint64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist < 0 ) { - if ( sign || (shiftDist <= -63) ) goto invalid; - shiftDist = -shiftDist; - z = sig<>shiftDist != sig ) goto invalid; - } else { - z = sig; - if ( shiftDist ) z >>= shiftDist; - if ( sign && z ) goto invalid; - if ( exact && shiftDist && (z< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t extF80_add( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsExtF80 : softfloat_subMagsExtF80; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/extF80_div.c b/addins/SoftFloat-3e/source/extF80_div.c deleted file mode 100644 index 28dfb13de..000000000 --- a/addins/SoftFloat-3e/source/extF80_div.c +++ /dev/null @@ -1,203 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_div( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; - int_fast32_t expB; - uint_fast64_t sigB; - bool signZ; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - struct uint128 rem; - uint_fast32_t recip32; - uint_fast64_t sigZ; - int ix; - uint_fast64_t q64; - uint_fast32_t q; - struct uint128 term; - uint_fast64_t sigZExtra; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) { - if ( ! sigA ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalExtF80Sig( sigB ); - expB += normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFF; - if ( sigA < sigB ) { - --expZ; - rem = softfloat_shortShiftLeft128( 0, sigA, 32 ); - } else { - rem = softfloat_shortShiftLeft128( 0, sigA, 31 ); - } - recip32 = softfloat_approxRecip32_1( sigB>>32 ); - sigZ = 0; - ix = 2; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>2) * recip32; - q = (q64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, sigB>>32, sigB<<32 ); - } - sigZ = (sigZ<<29) + q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 0x3FFFFF) < 2 ) { - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - term = softfloat_shortShiftLeft128( 0, sigB, 32 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, term.v64, term.v0 ); - } else if ( softfloat_le128( term.v64, term.v0, rem.v64, rem.v0 ) ) { - ++q; - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - } - if ( rem.v64 | rem.v0 ) q |= 1; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZ = (sigZ<<6) + (q>>23); - sigZExtra = (uint64_t) ((uint_fast64_t) q<<41); - return - softfloat_roundPackToExtF80( - signZ, expZ, sigZ, sigZExtra, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_eq.c b/addins/SoftFloat-3e/source/extF80_eq.c deleted file mode 100644 index efcbc3714..000000000 --- a/addins/SoftFloat-3e/source/extF80_eq.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_eq( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return - (uiA0 == uiB0) - && ((uiA64 == uiB64) || (! uiA0 && ! ((uiA64 | uiB64) & 0x7FFF))); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_eq_signaling.c b/addins/SoftFloat-3e/source/extF80_eq_signaling.c deleted file mode 100644 index 193b191e6..000000000 --- a/addins/SoftFloat-3e/source/extF80_eq_signaling.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool extF80_eq_signaling( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return - (uiA0 == uiB0) - && ((uiA64 == uiB64) || (! uiA0 && ! ((uiA64 | uiB64) & 0x7FFF))); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_isSignalingNaN.c b/addins/SoftFloat-3e/source/extF80_isSignalingNaN.c deleted file mode 100644 index 33d2abd7e..000000000 --- a/addins/SoftFloat-3e/source/extF80_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_isSignalingNaN( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - - uA.f = a; - return softfloat_isSigNaNExtF80UI( uA.s.signExp, uA.s.signif ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_le.c b/addins/SoftFloat-3e/source/extF80_le.c deleted file mode 100644 index 4e23c5142..000000000 --- a/addins/SoftFloat-3e/source/extF80_le.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_le( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA || ! (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_le_quiet.c b/addins/SoftFloat-3e/source/extF80_le_quiet.c deleted file mode 100644 index 9839e47f9..000000000 --- a/addins/SoftFloat-3e/source/extF80_le_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_le_quiet( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA || ! (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_lt.c b/addins/SoftFloat-3e/source/extF80_lt.c deleted file mode 100644 index a4ac69fa6..000000000 --- a/addins/SoftFloat-3e/source/extF80_lt.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_lt( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA && (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_lt_quiet.c b/addins/SoftFloat-3e/source/extF80_lt_quiet.c deleted file mode 100644 index 00f4d4768..000000000 --- a/addins/SoftFloat-3e/source/extF80_lt_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_lt_quiet( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA && (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_mul.c b/addins/SoftFloat-3e/source/extF80_mul.c deleted file mode 100644 index 39ce4012c..000000000 --- a/addins/SoftFloat-3e/source/extF80_mul.c +++ /dev/null @@ -1,158 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_mul( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; - int_fast32_t expB; - uint_fast64_t sigB; - bool signZ; - uint_fast64_t magBits; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - struct uint128 sig128Z, uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - || ((expB == 0x7FFF) && (sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ) { - goto propagateNaN; - } - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigB ); - expB += normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FFE; - sig128Z = softfloat_mul64To128( sigA, sigB ); - if ( sig128Z.v64 < UINT64_C( 0x8000000000000000 ) ) { - --expZ; - sig128Z = - softfloat_add128( - sig128Z.v64, sig128Z.v0, sig128Z.v64, sig128Z.v0 ); - } - return - softfloat_roundPackToExtF80( - signZ, expZ, sig128Z.v64, sig128Z.v0, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - } else { - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_rem.c b/addins/SoftFloat-3e/source/extF80_rem.c deleted file mode 100644 index 5ad977526..000000000 --- a/addins/SoftFloat-3e/source/extF80_rem.c +++ /dev/null @@ -1,225 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_rem( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - int_fast32_t expB; - uint_fast64_t sigB; - struct exp32_sig64 normExpSig; - int_fast32_t expDiff; - struct uint128 rem, shiftedSigB; - uint_fast32_t q, recip32; - uint_fast64_t q64; - struct uint128 term, altRem, meanRem; - bool signRem; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - || ((expB == 0x7FFF) && (sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ) { - goto propagateNaN; - } - goto invalid; - } - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - /*-------------------------------------------------------------------- - | Argument b is an infinity. Doubling `expB' is an easy way to ensure - | that `expDiff' later is less than -1, which will result in returning - | a canonicalized version of argument a. - *--------------------------------------------------------------------*/ - expB += expB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalExtF80Sig( sigB ); - expB += normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) { - expA = 0; - goto copyA; - } - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( expDiff < -1 ) goto copyA; - rem = softfloat_shortShiftLeft128( 0, sigA, 32 ); - shiftedSigB = softfloat_shortShiftLeft128( 0, sigB, 32 ); - if ( expDiff < 1 ) { - if ( expDiff ) { - --expB; - shiftedSigB = softfloat_shortShiftLeft128( 0, sigB, 33 ); - q = 0; - } else { - q = (sigB <= sigA); - if ( q ) { - rem = - softfloat_sub128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - } - } - } else { - recip32 = softfloat_approxRecip32_1( sigB>>32 ); - expDiff -= 30; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>2) * recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - rem = - softfloat_add128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, expDiff + 30 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - altRem = - softfloat_add128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem = - softfloat_sub128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - } while ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ); - selectRem: - meanRem = softfloat_add128( rem.v64, rem.v0, altRem.v64, altRem.v0 ); - if ( - (meanRem.v64 & UINT64_C( 0x8000000000000000 )) - || (! (meanRem.v64 | meanRem.v0) && (q & 1)) - ) { - rem = altRem; - } - signRem = signA; - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - signRem = ! signRem; - rem = softfloat_sub128( 0, 0, rem.v64, rem.v0 ); - } - return - softfloat_normRoundPackToExtF80( - signRem, rem.v64 | rem.v0 ? expB + 32 : 0, rem.v64, rem.v0, 80 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - if ( expA < 1 ) { - sigA >>= 1 - expA; - expA = 0; - } - uiZ64 = packToExtF80UI64( signA, expA ); - uiZ0 = sigA; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_roundToInt.c b/addins/SoftFloat-3e/source/extF80_roundToInt.c deleted file mode 100644 index 6c12d84c9..000000000 --- a/addins/SoftFloat-3e/source/extF80_roundToInt.c +++ /dev/null @@ -1,154 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t - extF80_roundToInt( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64, signUI64; - int_fast32_t exp; - uint_fast64_t sigA; - uint_fast16_t uiZ64; - uint_fast64_t sigZ; - struct exp32_sig64 normExpSig; - struct uint128 uiZ; - uint_fast64_t lastBitMask, roundBitsMask; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - signUI64 = uiA64 & packToExtF80UI64( 1, 0 ); - exp = expExtF80UI64( uiA64 ); - sigA = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( !(sigA & UINT64_C( 0x8000000000000000 )) && (exp != 0x7FFF) ) { - if ( !sigA ) { - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - exp += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x403E <= exp ) { - if ( exp == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - uiZ = softfloat_propagateNaNExtF80UI( uiA64, sigA, 0, 0 ); - uiZ64 = uiZ.v64; - sigZ = uiZ.v0; - goto uiZ; - } - sigZ = UINT64_C( 0x8000000000000000 ); - } else { - sigZ = sigA; - } - uiZ64 = signUI64 | exp; - goto uiZ; - } - if ( exp <= 0x3FFE ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !(sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) goto mag1; - break; - case softfloat_round_min: - if ( signUI64 ) goto mag1; - break; - case softfloat_round_max: - if ( !signUI64 ) goto mag1; - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - goto mag1; -#endif - } - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - mag1: - uiZ64 = signUI64 | 0x3FFF; - sigZ = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = signUI64 | exp; - lastBitMask = (uint_fast64_t) 1<<(0x403E - exp); - roundBitsMask = lastBitMask - 1; - sigZ = sigA; - if ( roundingMode == softfloat_round_near_maxMag ) { - sigZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - sigZ += lastBitMask>>1; - if ( !(sigZ & roundBitsMask) ) sigZ &= ~lastBitMask; - } else if ( - roundingMode == (signUI64 ? softfloat_round_min : softfloat_round_max) - ) { - sigZ += roundBitsMask; - } - sigZ &= ~roundBitsMask; - if ( !sigZ ) { - ++uiZ64; - sigZ = UINT64_C( 0x8000000000000000 ); - } - if ( sigZ != sigA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sigZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = sigZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_sqrt.c b/addins/SoftFloat-3e/source/extF80_sqrt.c deleted file mode 100644 index af8c496e1..000000000 --- a/addins/SoftFloat-3e/source/extF80_sqrt.c +++ /dev/null @@ -1,176 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_sqrt( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - uint_fast32_t sig32A, recipSqrt32, sig32Z; - struct uint128 rem; - uint_fast64_t q, x64, sigZ; - struct uint128 y, term; - uint_fast64_t sigZExtra; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, 0, 0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! sigA ) goto zero; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFF; - expA &= 1; - sig32A = sigA>>32; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint_fast64_t) sig32A * recipSqrt32)>>32; - if ( expA ) { - sig32Z >>= 1; - rem = softfloat_shortShiftLeft128( 0, sigA, 61 ); - } else { - rem = softfloat_shortShiftLeft128( 0, sigA, 62 ); - } - rem.v64 -= (uint_fast64_t) sig32Z * sig32Z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem.v64>>2) * (uint_fast64_t) recipSqrt32)>>32; - x64 = (uint_fast64_t) sig32Z<<32; - sigZ = x64 + (q<<3); - y = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - term = softfloat_mul64ByShifted32To128( x64 + sigZ, q ); - rem = softfloat_sub128( y.v64, y.v0, term.v64, term.v0 ); - if ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ) break; - --q; - sigZ -= 1<<3; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((rem.v64>>2) * recipSqrt32)>>32) + 2; - x64 = sigZ; - sigZ = (sigZ<<1) + (q>>25); - sigZExtra = (uint64_t) (q<<39); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xFFFFFF) <= 2 ) { - q &= ~(uint_fast64_t) 0xFFFF; - sigZExtra = (uint64_t) (q<<39); - term = softfloat_mul64ByShifted32To128( x64 + (q>>27), q ); - x64 = (uint32_t) (q<<5) * (uint_fast64_t) (uint32_t) q; - term = softfloat_add128( term.v64, term.v0, 0, x64 ); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 28 ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - if ( ! sigZExtra ) --sigZ; - --sigZExtra; - } else { - if ( rem.v64 | rem.v0 ) sigZExtra |= 1; - } - } - return - softfloat_roundPackToExtF80( - 0, expZ, sigZ, sigZExtra, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signA, 0 ); - uiZ0 = 0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_sub.c b/addins/SoftFloat-3e/source/extF80_sub.c deleted file mode 100644 index 770c7563a..000000000 --- a/addins/SoftFloat-3e/source/extF80_sub.c +++ /dev/null @@ -1,80 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t extF80_sub( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsExtF80 : softfloat_addMagsExtF80; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f128.c b/addins/SoftFloat-3e/source/extF80_to_f128.c deleted file mode 100644 index 4de90ae31..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f128.c +++ /dev/null @@ -1,75 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t extF80_to_f128( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - uint_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - bool sign; - struct uint128 frac128; - union ui128_f128 uZ; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - exp = expExtF80UI64( uiA64 ); - frac = uiA0 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( (exp == 0x7FFF) && frac ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - sign = signExtF80UI64( uiA64 ); - frac128 = softfloat_shortShiftLeft128( 0, frac, 49 ); - uiZ.v64 = packToF128UI64( sign, exp, frac128.v64 ); - uiZ.v0 = frac128.v0; - } - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f16.c b/addins/SoftFloat-3e/source/extF80_to_f16.c deleted file mode 100644 index 5919403fb..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f16.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t extF80_to_f16( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - struct commonNaN commonNaN; - uint_fast16_t uiZ, sig16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig16 = softfloat_shortShiftRightJam64( sig, 49 ); - if ( ! (exp | sig16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, sig16 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f32.c b/addins/SoftFloat-3e/source/extF80_to_f32.c deleted file mode 100644 index 77fcfdc11..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f32.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t extF80_to_f32( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - struct commonNaN commonNaN; - uint_fast32_t uiZ, sig32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = softfloat_shortShiftRightJam64( sig, 33 ); - if ( ! (exp | sig32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, sig32 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f64.c b/addins/SoftFloat-3e/source/extF80_to_f64.c deleted file mode 100644 index 410d6622c..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f64.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t extF80_to_f64( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (exp | sig) ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = softfloat_shortShiftRightJam64( sig, 1 ); - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF64( sign, exp, sig ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_i32.c b/addins/SoftFloat-3e/source/extF80_to_i32.c deleted file mode 100644 index 9acdc3c9b..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_i32.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t - extF80_to_i32( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) shiftDist = 1; - sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_i32_r_minMag.c deleted file mode 100644 index 03224678a..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_i32_r_minMag.c +++ /dev/null @@ -1,97 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t extF80_to_i32_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist < 33 ) { - if ( - (uiA64 == packToExtF80UI64( 1, 0x401E )) - && (sig < UINT64_C( 0x8000000100000000 )) - ) { - if ( exact && (sig & UINT64_C( 0x00000000FFFFFFFF )) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -0x7FFFFFFF - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - absZ = sig>>shiftDist; - if ( exact && ((uint_fast64_t) (uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t - extF80_to_i64( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - uint_fast64_t sigExtra; - struct uint64_extra sig64Extra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigExtra = 0; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64Extra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - sig = sig64Extra.v; - sigExtra = sig64Extra.extra; - } - return softfloat_roundToI64( sign, sig, sigExtra, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_i64_r_minMag.c deleted file mode 100644 index 8871d01d1..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_i64_r_minMag.c +++ /dev/null @@ -1,94 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t extF80_to_i64_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist <= 0 ) { - if ( - (uiA64 == packToExtF80UI64( 1, 0x403E )) - && (sig == UINT64_C( 0x8000000000000000 )) - ) { - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - absZ = sig>>shiftDist; - if ( exact && (uint64_t) (sig<<(-shiftDist & 63)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sign ? -absZ : absZ; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_ui32.c b/addins/SoftFloat-3e/source/extF80_to_ui32.c deleted file mode 100644 index 581297731..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_ui32.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t - extF80_to_ui32( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) shiftDist = 1; - sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToUI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c deleted file mode 100644 index be2c53b1d..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t extF80_to_ui32_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( sign || (shiftDist < 32) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - z = sig>>shiftDist; - if ( exact && ((uint_fast64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - extF80_to_ui64( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - uint_fast64_t sigExtra; - struct uint64_extra sig64Extra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigExtra = 0; - if ( shiftDist ) { - sig64Extra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - sig = sig64Extra.v; - sigExtra = sig64Extra.extra; - } - return softfloat_roundToUI64( sign, sig, sigExtra, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c deleted file mode 100644 index eca688c65..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t extF80_to_ui64_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - uint_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( sign || (shiftDist < 0) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - z = sig>>shiftDist; - if ( exact && (z< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_add( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint64_t *aWPtr, *bWPtr; - uint_fast64_t uiA64, uiA0; - bool signA; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - aWPtr = (const uint64_t *) aPtr; - bWPtr = (const uint64_t *) bPtr; - uiA64 = aWPtr[indexWord( 2, 1 )]; - uiA0 = aWPtr[indexWord( 2, 0 )]; - signA = signF128UI64( uiA64 ); - uiB64 = bWPtr[indexWord( 2, 1 )]; - uiB0 = bWPtr[indexWord( 2, 0 )]; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsF128 : softfloat_subMagsF128; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - f128M_add( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - softfloat_addF128M( - (const uint32_t *) aPtr, - (const uint32_t *) bPtr, - (uint32_t *) zPtr, - false - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_div.c b/addins/SoftFloat-3e/source/f128M_div.c deleted file mode 100644 index b443548f5..000000000 --- a/addins/SoftFloat-3e/source/f128M_div.c +++ /dev/null @@ -1,187 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_div( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *zPtr = f128_div( *aPtr, *bPtr ); - -} - -#else - -void - f128M_div( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t *zWPtr, uiA96; - bool signA; - int32_t expA; - uint32_t uiB96; - bool signB; - int32_t expB; - bool signZ; - uint32_t y[5], sigB[4]; - int32_t expZ; - uint32_t recip32; - int ix; - uint64_t q64; - uint32_t q, qs[3], uiZ96; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - signB = signF128UI96( uiB96 ); - expB = expF128UI96( uiB96 ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - if ( expA == 0x7FFF ) { - if ( expB == 0x7FFF ) goto invalid; - goto infinity; - } - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = softfloat_shiftNormSigF128M( aWPtr, 13, y ); - expB = softfloat_shiftNormSigF128M( bWPtr, 13, sigB ); - if ( expA == -128 ) { - if ( expB == -128 ) goto invalid; - goto zero; - } - if ( expB == -128 ) { - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFE; - if ( softfloat_compare128M( y, sigB ) < 0 ) { - --expZ; - softfloat_add128M( y, y, y ); - } - recip32 = - softfloat_approxRecip32_1( - ((uint64_t) sigB[indexWord( 4, 3 )]<<32 | sigB[indexWord( 4, 2 )]) - >>30 - ); - ix = 3; - for (;;) { - q64 = (uint64_t) y[indexWordHi( 4 )] * recip32; - q = (q64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - softfloat_remStep128MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 4 )] & 0x80000000 ) { - --q; - softfloat_add128M( y, sigB, y ); - } - qs[ix] = q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 7) < 2 ) { - softfloat_remStep128MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 4 )] & 0x80000000 ) { - --q; - softfloat_add128M( y, sigB, y ); - } else if ( softfloat_compare128M( sigB, y ) <= 0 ) { - ++q; - softfloat_sub128M( y, sigB, y ); - } - if ( - y[indexWordLo( 4 )] || y[indexWord( 4, 1 )] - || (y[indexWord( 4, 2 )] | y[indexWord( 4, 3 )]) - ) { - q |= 1; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q64 = (uint64_t) q<<28; - y[indexWord( 5, 0 )] = q64; - q64 = ((uint64_t) qs[0]<<25) + (q64>>32); - y[indexWord( 5, 1 )] = q64; - q64 = ((uint64_t) qs[1]<<22) + (q64>>32); - y[indexWord( 5, 2 )] = q64; - q64 = ((uint64_t) qs[2]<<19) + (q64>>32); - y[indexWord( 5, 3 )] = q64; - y[indexWord( 5, 4 )] = q64>>32; - softfloat_roundPackMToF128M( signZ, expZ, y, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ96 = packToF128UI96( signZ, 0x7FFF, 0 ); - goto uiZ96; - zero: - uiZ96 = packToF128UI96( signZ, 0, 0 ); - uiZ96: - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_eq.c b/addins/SoftFloat-3e/source/f128M_eq.c deleted file mode 100644 index 497fdbf6f..000000000 --- a/addins/SoftFloat-3e/source/f128M_eq.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_eq( *aPtr, *bPtr ); - -} - -#else - -bool f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t wordA, wordB, uiA96, uiB96; - bool possibleOppositeZeros; - uint32_t mashWord; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA != wordB ) goto false_checkSigNaNs; - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - possibleOppositeZeros = false; - if ( uiA96 != uiB96 ) { - possibleOppositeZeros = (((uiA96 | uiB96) & 0x7FFFFFFF) == 0); - if ( ! possibleOppositeZeros ) goto false_checkSigNaNs; - } - mashWord = wordA | wordB; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA != wordB ) goto false_checkSigNaNs; - mashWord |= wordA | wordB; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - if ( wordA != wordB ) goto false_checkSigNaNs; - if ( possibleOppositeZeros && ((mashWord | wordA | wordB) != 0) ) { - goto false_checkSigNaNs; - } - if ( ! softfloat_isNaNF128M( aWPtr ) && ! softfloat_isNaNF128M( bWPtr ) ) { - return true; - } - false_checkSigNaNs: - if ( - f128M_isSignalingNaN( (const float128_t *) aWPtr ) - || f128M_isSignalingNaN( (const float128_t *) bWPtr ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_eq_signaling.c b/addins/SoftFloat-3e/source/f128M_eq_signaling.c deleted file mode 100644 index a9fa4d510..000000000 --- a/addins/SoftFloat-3e/source/f128M_eq_signaling.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_eq_signaling( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_eq_signaling( *aPtr, *bPtr ); - -} - -#else - -bool f128M_eq_signaling( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t wordA, wordB, uiA96, uiB96; - bool possibleOppositeZeros; - uint32_t mashWord; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA != wordB ) return false; - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - possibleOppositeZeros = false; - if ( uiA96 != uiB96 ) { - possibleOppositeZeros = (((uiA96 | uiB96) & 0x7FFFFFFF) == 0); - if ( ! possibleOppositeZeros ) return false; - } - mashWord = wordA | wordB; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA != wordB ) return false; - mashWord |= wordA | wordB; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return - (wordA == wordB) - && (! possibleOppositeZeros || ((mashWord | wordA | wordB) == 0)); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_le.c b/addins/SoftFloat-3e/source/f128M_le.c deleted file mode 100644 index 7306e45c3..000000000 --- a/addins/SoftFloat-3e/source/f128M_le.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_le( *aPtr, *bPtr ); - -} - -#else - -bool f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signA ) return true; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return false; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) == 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) <= 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_le_quiet.c b/addins/SoftFloat-3e/source/f128M_le_quiet.c deleted file mode 100644 index d9e442942..000000000 --- a/addins/SoftFloat-3e/source/f128M_le_quiet.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_le_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_le_quiet( *aPtr, *bPtr ); - -} - -#else - -bool f128M_le_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - if ( f128M_isSignalingNaN( aPtr ) || f128M_isSignalingNaN( bPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signA ) return true; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return false; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) == 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) <= 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_lt.c b/addins/SoftFloat-3e/source/f128M_lt.c deleted file mode 100644 index d2f797fea..000000000 --- a/addins/SoftFloat-3e/source/f128M_lt.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_lt( *aPtr, *bPtr ); - -} - -#else - -bool f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signB ) return false; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return true; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) != 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) < 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_lt_quiet.c b/addins/SoftFloat-3e/source/f128M_lt_quiet.c deleted file mode 100644 index adbddea71..000000000 --- a/addins/SoftFloat-3e/source/f128M_lt_quiet.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_lt_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_lt_quiet( *aPtr, *bPtr ); - -} - -#else - -bool f128M_lt_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - if ( f128M_isSignalingNaN( aPtr ) || f128M_isSignalingNaN( bPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signB ) return false; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return true; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) != 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) < 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_mul.c b/addins/SoftFloat-3e/source/f128M_mul.c deleted file mode 100644 index 4b8292a27..000000000 --- a/addins/SoftFloat-3e/source/f128M_mul.c +++ /dev/null @@ -1,158 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_mul( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *zPtr = f128_mul( *aPtr, *bPtr ); - -} - -#else - -void - f128M_mul( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t *zWPtr; - uint32_t uiA96; - int32_t expA; - uint32_t uiB96; - int32_t expB; - bool signZ; - const uint32_t *ptr; - uint32_t uiZ96, sigA[4]; - uint_fast8_t shiftDist; - uint32_t sigB[4]; - int32_t expZ; - uint32_t sigProd[8], *extSigZPtr; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - expB = expF128UI96( uiB96 ); - signZ = signF128UI96( uiA96 ) ^ signF128UI96( uiB96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - ptr = aWPtr; - if ( ! expA ) goto possiblyInvalid; - if ( ! expB ) { - ptr = bWPtr; - possiblyInvalid: - if ( - ! fracF128UI96( ptr[indexWordHi( 4 )] ) - && ! (ptr[indexWord( 4, 2 )] | ptr[indexWord( 4, 1 )] - | ptr[indexWord( 4, 0 )]) - ) { - softfloat_invalidF128M( zWPtr ); - return; - } - } - uiZ96 = packToF128UI96( signZ, 0x7FFF, 0 ); - goto uiZ96; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA ) { - sigA[indexWordHi( 4 )] = fracF128UI96( uiA96 ) | 0x00010000; - sigA[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sigA[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sigA[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - } else { - expA = softfloat_shiftNormSigF128M( aWPtr, 0, sigA ); - if ( expA == -128 ) goto zero; - } - if ( expB ) { - sigB[indexWordHi( 4 )] = fracF128UI96( uiB96 ) | 0x00010000; - sigB[indexWord( 4, 2 )] = bWPtr[indexWord( 4, 2 )]; - sigB[indexWord( 4, 1 )] = bWPtr[indexWord( 4, 1 )]; - sigB[indexWord( 4, 0 )] = bWPtr[indexWord( 4, 0 )]; - } else { - expB = softfloat_shiftNormSigF128M( bWPtr, 0, sigB ); - if ( expB == -128 ) goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x4000; - softfloat_mul128MTo256M( sigA, sigB, sigProd ); - if ( - sigProd[indexWord( 8, 2 )] - || (sigProd[indexWord( 8, 1 )] | sigProd[indexWord( 8, 0 )]) - ) { - sigProd[indexWord( 8, 3 )] |= 1; - } - extSigZPtr = &sigProd[indexMultiwordHi( 8, 5 )]; - shiftDist = 16; - if ( extSigZPtr[indexWordHi( 5 )] & 2 ) { - ++expZ; - shiftDist = 15; - } - softfloat_shortShiftLeft160M( extSigZPtr, shiftDist, extSigZPtr ); - softfloat_roundPackMToF128M( signZ, expZ, extSigZPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ96 = packToF128UI96( signZ, 0, 0 ); - uiZ96: - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_mulAdd.c b/addins/SoftFloat-3e/source/f128M_mulAdd.c deleted file mode 100644 index 2b0b7fe26..000000000 --- a/addins/SoftFloat-3e/source/f128M_mulAdd.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - const uint64_t *aWPtr, *bWPtr, *cWPtr; - uint_fast64_t uiA64, uiA0; - uint_fast64_t uiB64, uiB0; - uint_fast64_t uiC64, uiC0; - - aWPtr = (const uint64_t *) aPtr; - bWPtr = (const uint64_t *) bPtr; - cWPtr = (const uint64_t *) cPtr; - uiA64 = aWPtr[indexWord( 2, 1 )]; - uiA0 = aWPtr[indexWord( 2, 0 )]; - uiB64 = bWPtr[indexWord( 2, 1 )]; - uiB0 = bWPtr[indexWord( 2, 0 )]; - uiC64 = cWPtr[indexWord( 2, 1 )]; - uiC0 = cWPtr[indexWord( 2, 0 )]; - *zPtr = softfloat_mulAddF128( uiA64, uiA0, uiB64, uiB0, uiC64, uiC0, 0 ); - -} - -#else - -void - f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - - softfloat_mulAddF128M( - (const uint32_t *) aPtr, - (const uint32_t *) bPtr, - (const uint32_t *) cPtr, - (uint32_t *) zPtr, - 0 - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_rem.c b/addins/SoftFloat-3e/source/f128M_rem.c deleted file mode 100644 index 39aafdd6a..000000000 --- a/addins/SoftFloat-3e/source/f128M_rem.c +++ /dev/null @@ -1,182 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_rem( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *zPtr = f128_rem( *aPtr, *bPtr ); - -} - -#else - -void - f128M_rem( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t *zWPtr, uiA96; - int32_t expA, expB; - uint32_t x[4], rem1[5], *remPtr; - bool signRem; - int32_t expDiff; - uint32_t q, recip32; - uint64_t q64; - uint32_t rem2[5], *altRemPtr, *newRemPtr, wordMeanRem; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - expB = expF128UI96( bWPtr[indexWordHi( 4 )] ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - if ( expA == 0x7FFF ) goto invalid; - goto copyA; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA < expB - 1 ) goto copyA; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expB = softfloat_shiftNormSigF128M( bWPtr, 13, x ); - if ( expB == -128 ) goto invalid; - remPtr = &rem1[indexMultiwordLo( 5, 4 )]; - expA = softfloat_shiftNormSigF128M( aWPtr, 13, remPtr ); - if ( expA == -128 ) goto copyA; - signRem = signF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) goto copyA; - if ( expDiff ) { - --expB; - softfloat_add128M( x, x, x ); - q = 0; - } else { - q = (softfloat_compare128M( x, remPtr ) <= 0); - if ( q ) softfloat_sub128M( remPtr, x, remPtr ); - } - } else { - recip32 = - softfloat_approxRecip32_1( - ((uint64_t) x[indexWord( 4, 3 )]<<32 | x[indexWord( 4, 2 )]) - >>30 - ); - expDiff -= 30; - for (;;) { - q64 = (uint64_t) remPtr[indexWordHi( 4 )] * recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; - softfloat_remStep128MBy32( remPtr, 29, x, q, remPtr ); - if ( remPtr[indexWordHi( 4 )] & 0x80000000 ) { - softfloat_add128M( remPtr, x, remPtr ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - softfloat_remStep128MBy32( remPtr, expDiff + 30, x, q, remPtr ); - if ( remPtr[indexWordHi( 4 )] & 0x80000000 ) { - altRemPtr = &rem2[indexMultiwordLo( 5, 4 )]; - softfloat_add128M( remPtr, x, altRemPtr ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - altRemPtr = &rem2[indexMultiwordLo( 5, 4 )]; - do { - ++q; - newRemPtr = altRemPtr; - softfloat_sub128M( remPtr, x, newRemPtr ); - altRemPtr = remPtr; - remPtr = newRemPtr; - } while ( ! (remPtr[indexWordHi( 4 )] & 0x80000000) ); - selectRem: - softfloat_add128M( remPtr, altRemPtr, x ); - wordMeanRem = x[indexWordHi( 4 )]; - if ( - (wordMeanRem & 0x80000000) - || (! wordMeanRem && (q & 1) && ! x[indexWord( 4, 0 )] - && ! (x[indexWord( 4, 2 )] | x[indexWord( 4, 1 )])) - ) { - remPtr = altRemPtr; - } - if ( remPtr[indexWordHi( 4 )] & 0x80000000 ) { - signRem = ! signRem; - softfloat_negX128M( remPtr ); - } - remPtr -= indexMultiwordLo( 5, 4 ); - remPtr[indexWordHi( 5 )] = 0; - softfloat_normRoundPackMToF128M( signRem, expB + 18, remPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - zWPtr[indexWordHi( 4 )] = uiA96; - zWPtr[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_roundToInt.c b/addins/SoftFloat-3e/source/f128M_roundToInt.c deleted file mode 100644 index b96d742b2..000000000 --- a/addins/SoftFloat-3e/source/f128M_roundToInt.c +++ /dev/null @@ -1,223 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_roundToInt( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - - *zPtr = f128_roundToInt( *aPtr, roundingMode, exact ); - -} - -#else - -void - f128M_roundToInt( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - const uint32_t *aWPtr; - uint32_t *zWPtr; - uint32_t ui96; - int32_t exp; - uint32_t sigExtra; - bool sign; - uint_fast8_t bitPos; - bool roundNear; - unsigned int index, lastIndex; - bool extra; - uint32_t wordA, bit, wordZ; - uint_fast8_t carry; - uint32_t extrasMask; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - ui96 = aWPtr[indexWordHi( 4 )]; - exp = expF128UI96( ui96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp < 0x3FFF ) { - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - sigExtra = aWPtr[indexWord( 4, 2 )]; - if ( !sigExtra ) { - sigExtra = aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )]; - } - if ( !sigExtra && !(ui96 & 0x7FFFFFFF) ) goto ui96; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - sign = signF128UI96( ui96 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF128UI96( ui96 ) && !sigExtra ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) goto mag1; - break; - case softfloat_round_min: - if ( sign ) goto mag1; - break; - case softfloat_round_max: - if ( !sign ) goto mag1; - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - goto mag1; -#endif - } - ui96 = packToF128UI96( sign, 0, 0 ); - goto ui96; - mag1: - ui96 = packToF128UI96( sign, 0x3FFF, 0 ); - goto ui96; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x406F <= exp ) { - if ( - (exp == 0x7FFF) - && (fracF128UI96( ui96 ) - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ) { - softfloat_propagateNaNF128M( aWPtr, 0, zWPtr ); - return; - } - zWPtr[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - goto ui96; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - bitPos = 0x406F - exp; - roundNear = - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even); - bitPos -= roundNear; - index = indexWordLo( 4 ); - lastIndex = indexWordHi( 4 ); - extra = 0; - for (;;) { - wordA = aWPtr[index]; - if ( bitPos < 32 ) break; - if ( wordA ) extra = 1; - zWPtr[index] = 0; - index += wordIncr; - bitPos -= 32; - } - bit = (uint32_t) 1< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - - *zPtr = f128_sqrt( *aPtr ); - -} - -#else - -void f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr; - uint32_t *zWPtr; - uint32_t uiA96; - bool signA; - int32_t rawExpA; - uint32_t rem[6]; - int32_t expA, expZ; - uint64_t rem64; - uint32_t sig32A, recipSqrt32, sig32Z, qs[3], q; - uint64_t sig64Z; - uint32_t term[5]; - uint64_t x64; - uint32_t y[5], rem32; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - rawExpA = expF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( rawExpA == 0x7FFF ) { - if ( - fracF128UI96( uiA96 ) - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - ) { - softfloat_propagateNaNF128M( aWPtr, 0, zWPtr ); - return; - } - if ( ! signA ) goto copyA; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = softfloat_shiftNormSigF128M( aWPtr, 13 - (rawExpA & 1), rem ); - if ( expA == -128 ) goto copyA; - if ( signA ) goto invalid; - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFE; - expA &= 1; - rem64 = (uint64_t) rem[indexWord( 4, 3 )]<<32 | rem[indexWord( 4, 2 )]; - if ( expA ) { - if ( ! rawExpA ) { - softfloat_shortShiftRight128M( rem, 1, rem ); - rem64 >>= 1; - } - sig32A = rem64>>29; - } else { - sig32A = rem64>>30; - } - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint64_t) sig32A * recipSqrt32)>>32; - if ( expA ) sig32Z >>= 1; - qs[2] = sig32Z; - rem64 -= (uint64_t) sig32Z * sig32Z; - rem[indexWord( 4, 3 )] = rem64>>32; - rem[indexWord( 4, 2 )] = rem64; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32; - sig64Z = ((uint64_t) sig32Z<<32) + ((uint64_t) q<<3); - term[indexWord( 4, 3 )] = 0; - term[indexWord( 4, 0 )] = 0; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - x64 = ((uint64_t) sig32Z<<32) + sig64Z; - term[indexWord( 4, 2 )] = x64>>32; - term[indexWord( 4, 1 )] = x64; - softfloat_remStep128MBy32( rem, 29, term, q, y ); - rem32 = y[indexWord( 4, 3 )]; - if ( ! (rem32 & 0x80000000) ) break; - --q; - sig64Z -= 1<<3; - } - qs[1] = q; - rem64 = (uint64_t) rem32<<32 | y[indexWord( 4, 2 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32; - if ( rem64>>34 ) q += recipSqrt32; - sig64Z <<= 1; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - x64 = sig64Z + (q>>26); - term[indexWord( 4, 2 )] = x64>>32; - term[indexWord( 4, 1 )] = x64; - term[indexWord( 4, 0 )] = q<<6; - softfloat_remStep128MBy32( - y, 29, term, q, &rem[indexMultiwordHi( 6, 4 )] ); - rem32 = rem[indexWordHi( 6 )]; - if ( ! (rem32 & 0x80000000) ) break; - --q; - } - qs[0] = q; - rem64 = (uint64_t) rem32<<32 | rem[indexWord( 6, 4 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32) + 2; - if ( rem64>>34 ) q += recipSqrt32; - x64 = (uint64_t) q<<27; - y[indexWord( 5, 0 )] = x64; - x64 = ((uint64_t) qs[0]<<24) + (x64>>32); - y[indexWord( 5, 1 )] = x64; - x64 = ((uint64_t) qs[1]<<21) + (x64>>32); - y[indexWord( 5, 2 )] = x64; - x64 = ((uint64_t) qs[2]<<18) + (x64>>32); - y[indexWord( 5, 3 )] = x64; - y[indexWord( 5, 4 )] = x64>>32; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xF) <= 2 ) { - q &= ~3; - y[indexWordLo( 5 )] = q<<27; - term[indexWord( 5, 4 )] = 0; - term[indexWord( 5, 3 )] = 0; - term[indexWord( 5, 2 )] = 0; - term[indexWord( 5, 1 )] = q>>6; - term[indexWord( 5, 0 )] = q<<26; - softfloat_sub160M( y, term, term ); - rem[indexWord( 6, 1 )] = 0; - rem[indexWord( 6, 0 )] = 0; - softfloat_remStep160MBy32( - &rem[indexMultiwordLo( 6, 5 )], - 14, - term, - q, - &rem[indexMultiwordLo( 6, 5 )] - ); - rem32 = rem[indexWord( 6, 4 )]; - if ( rem32 & 0x80000000 ) { - softfloat_sub1X160M( y ); - } else { - if ( - rem32 || rem[indexWord( 6, 0 )] || rem[indexWord( 6, 1 )] - || (rem[indexWord( 6, 3 )] | rem[indexWord( 6, 2 )]) - ) { - y[indexWordLo( 5 )] |= 1; - } - } - } - softfloat_roundPackMToF128M( 0, expZ, y, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - zWPtr[indexWordHi( 4 )] = uiA96; - zWPtr[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_sub.c b/addins/SoftFloat-3e/source/f128M_sub.c deleted file mode 100644 index 5d65c799f..000000000 --- a/addins/SoftFloat-3e/source/f128M_sub.c +++ /dev/null @@ -1,97 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_sub( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint64_t *aWPtr, *bWPtr; - uint_fast64_t uiA64, uiA0; - bool signA; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - aWPtr = (const uint64_t *) aPtr; - bWPtr = (const uint64_t *) bPtr; - uiA64 = aWPtr[indexWord( 2, 1 )]; - uiA0 = aWPtr[indexWord( 2, 0 )]; - signA = signF128UI64( uiA64 ); - uiB64 = bWPtr[indexWord( 2, 1 )]; - uiB0 = bWPtr[indexWord( 2, 0 )]; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsF128 : softfloat_addMagsF128; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - f128M_sub( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - softfloat_addF128M( - (const uint32_t *) aPtr, - (const uint32_t *) bPtr, - (uint32_t *) zPtr, - true - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_extF80M.c b/addins/SoftFloat-3e/source/f128M_to_extF80M.c deleted file mode 100644 index b0340c794..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_extF80M.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f128M_to_extF80M( const float128_t *aPtr, extFloat80_t *zPtr ) -{ - - *zPtr = f128_to_extF80( *aPtr ); - -} - -#else - -void f128M_to_extF80M( const float128_t *aPtr, extFloat80_t *zPtr ) -{ - const uint32_t *aWPtr; - struct extFloat80M *zSPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - struct commonNaN commonNaN; - uint32_t sig[4]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( softfloat_isNaNF128M( aWPtr ) ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - zSPtr->signExp = packToExtF80UI64( sign, 0x7FFF ); - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - return; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp = softfloat_shiftNormSigF128M( aWPtr, 15, sig ); - if ( exp == -128 ) { - zSPtr->signExp = packToExtF80UI64( sign, 0 ); - zSPtr->signif = 0; - return; - } - if ( sig[indexWord( 4, 0 )] ) sig[indexWord( 4, 1 )] |= 1; - softfloat_roundPackMToExtF80M( - sign, exp, &sig[indexMultiwordHi( 4, 3 )], 80, zSPtr ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_f16.c b/addins/SoftFloat-3e/source/f128M_to_f16.c deleted file mode 100644 index 95109a771..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_f16.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float16_t f128M_to_f16( const float128_t *aPtr ) -{ - - return f128_to_f16( *aPtr ); - -} - -#else - -float16_t f128M_to_f16( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t frac32; - struct commonNaN commonNaN; - uint16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - frac32 = - fracF128UI96( uiA96 ) - | ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac32 ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = frac32>>2 | (frac32 & 3); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, frac16 | 0x4000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_f32.c b/addins/SoftFloat-3e/source/f128M_to_f32.c deleted file mode 100644 index 4542deb0c..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_f32.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float32_t f128M_to_f32( const float128_t *aPtr ) -{ - - return f128_to_f32( *aPtr ); - -} - -#else - -float32_t f128M_to_f32( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t frac64; - struct commonNaN commonNaN; - uint32_t uiZ, frac32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - frac64 = - (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )] - | ((aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )]) != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = softfloat_shortShiftRightJam64( frac64, 18 ); - if ( ! (exp | frac32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, frac32 | 0x40000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_f64.c b/addins/SoftFloat-3e/source/f128M_to_f64.c deleted file mode 100644 index 6213bb7f5..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_f64.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float64_t f128M_to_f64( const float128_t *aPtr ) -{ - - return f128_to_f64( *aPtr ); - -} - -#else - -float64_t f128M_to_f64( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t frac64; - struct commonNaN commonNaN; - uint64_t uiZ; - uint32_t frac32; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - frac64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 || aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = aWPtr[indexWord( 4, 1 )]; - frac64 = frac64<<14 | frac32>>18; - if ( (frac32 & 0x0003FFFF) || aWPtr[indexWord( 4, 0 )] ) frac64 |= 1; - if ( ! (exp | frac64) ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return - softfloat_roundPackToF64( - sign, exp, frac64 | UINT64_C( 0x4000000000000000 ) ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_i32.c b/addins/SoftFloat-3e/source/f128M_to_i32.c deleted file mode 100644 index 54cc6f603..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_i32.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t - f128M_to_i32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_i32( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast32_t - f128M_to_i32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FFF) && sig64 ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToI32( sign, sig64, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_i32_r_minMag.c deleted file mode 100644 index 1f22039de..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_i32_r_minMag.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_i32_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast32_t f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - uint32_t absZ, uiZ; - union { uint32_t ui; int32_t i; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp < 0x3FFF ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x401F <= exp ) goto invalid; - shiftDist = 0x402F - exp; - sig64 |= UINT64_C( 0x0001000000000000 ); - absZ = sig64>>shiftDist; - uiZ = sign ? -absZ : absZ; - if ( uiZ>>31 != sign ) goto invalid; - if ( exact && ((uint64_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t - f128M_to_i64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_i64( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast64_t - f128M_to_i64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x404F - exp; - if ( shiftDist < 17 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist, sig ); - return - softfloat_roundMToI64( - sign, sig + indexMultiwordLo( 4, 3 ), roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_i64_r_minMag.c deleted file mode 100644 index da3d28ad0..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_i64_r_minMag.c +++ /dev/null @@ -1,124 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t f128M_to_i64_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_i64_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast64_t f128M_to_i64_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - uint64_t uiZ; - union { uint64_t ui; int64_t i; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) goto invalid; - if ( exact ) { - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist + 17, sig ); - uiZ = (uint64_t) sig[indexWord( 4, 2 )]<<32 | sig[indexWord( 4, 1 )]; - if ( uiZ>>63 && (! sign || (uiZ != UINT64_C( 0x8000000000000000 ))) ) { - goto invalid; - } - if ( sig[indexWordLo( 4 )] ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - } else { - if ( 64 <= shiftDist ) return 0; - uiZ = - (uint64_t) sig96<<47 - | (uint64_t) aWPtr[indexWord( 4, 2 )]<<15 - | aWPtr[indexWord( 4, 1 )]>>17; - if ( shiftDist ) { - uiZ |= UINT64_C( 0x8000000000000000 ); - uiZ >>= shiftDist; - } else { - if ( uiZ || ! sign ) goto invalid; - uiZ |= UINT64_C( 0x8000000000000000 ); - } - } - if ( sign ) uiZ = -uiZ; - uZ.ui = uiZ; - return uZ.i; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_ui32.c b/addins/SoftFloat-3e/source/f128M_to_ui32.c deleted file mode 100644 index c1baa063a..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_ui32.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t - f128M_to_ui32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_ui32( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast32_t - f128M_to_ui32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FFF) && sig64 ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToUI32( sign, sig64, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c deleted file mode 100644 index a1aca621a..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t f128M_to_ui32_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_ui32_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast32_t f128M_to_ui32_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - bool sign; - uint32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( 49 <= shiftDist ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF128UI96( uiA96 ); - if ( sign || (shiftDist < 17) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && sig64 ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - z = sig64>>shiftDist; - if ( exact && ((uint64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t - f128M_to_ui64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_ui64( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast64_t - f128M_to_ui64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x404F - exp; - if ( shiftDist < 17 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist, sig ); - return - softfloat_roundMToUI64( - sign, sig + indexMultiwordLo( 4, 3 ), roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c deleted file mode 100644 index 7a1b60295..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c +++ /dev/null @@ -1,114 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t f128M_to_ui64_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_ui64_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast64_t f128M_to_ui64_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - uint64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) goto invalid; - if ( exact ) { - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist + 17, sig ); - z = (uint64_t) sig[indexWord( 4, 2 )]<<32 | sig[indexWord( 4, 1 )]; - if ( sign && z ) goto invalid; - if ( sig[indexWordLo( 4 )] ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - } else { - if ( 64 <= shiftDist ) return 0; - if ( sign ) goto invalid; - z = UINT64_C( 0x8000000000000000 ) - | (uint64_t) sig96<<47 - | (uint64_t) aWPtr[indexWord( 4, 2 )]<<15 - | aWPtr[indexWord( 4, 1 )]>>17; - z >>= shiftDist; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128_add.c b/addins/SoftFloat-3e/source/f128_add.c deleted file mode 100644 index e9caba682..000000000 --- a/addins/SoftFloat-3e/source/f128_add.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t f128_add( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsF128 : softfloat_subMagsF128; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f128_div.c b/addins/SoftFloat-3e/source/f128_div.c deleted file mode 100644 index 0693db754..000000000 --- a/addins/SoftFloat-3e/source/f128_div.c +++ /dev/null @@ -1,199 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_div( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; - int_fast32_t expB; - struct uint128 sigB; - bool signZ; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - struct uint128 rem; - uint_fast32_t recip32; - int ix; - uint_fast64_t q64; - uint_fast32_t q; - struct uint128 term; - uint_fast32_t qs[3]; - uint_fast64_t sigZExtra; - struct uint128 sigZ, uiZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) goto propagateNaN; - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) { - if ( ! (expA | sigA.v64 | sigA.v0) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) goto zero; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFE; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - rem = sigA; - if ( softfloat_lt128( sigA.v64, sigA.v0, sigB.v64, sigB.v0 ) ) { - --expZ; - rem = softfloat_add128( sigA.v64, sigA.v0, sigA.v64, sigA.v0 ); - } - recip32 = softfloat_approxRecip32_1( sigB.v64>>17 ); - ix = 3; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>19) * recip32; - q = (q64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - qs[ix] = q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 7) < 2 ) { - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } else if ( softfloat_le128( sigB.v64, sigB.v0, rem.v64, rem.v0 ) ) { - ++q; - rem = softfloat_sub128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - if ( rem.v64 | rem.v0 ) q |= 1; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZExtra = (uint64_t) ((uint_fast64_t) q<<60); - term = softfloat_shortShiftLeft128( 0, qs[1], 54 ); - sigZ = - softfloat_add128( - (uint_fast64_t) qs[2]<<19, ((uint_fast64_t) qs[0]<<25) + (q>>4), - term.v64, term.v0 - ); - return - softfloat_roundPackToF128( signZ, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - goto uiZ0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ.v64 = packToF128UI64( signZ, 0, 0 ); - uiZ0: - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_eq.c b/addins/SoftFloat-3e/source/f128_eq.c deleted file mode 100644 index 9462fc2ab..000000000 --- a/addins/SoftFloat-3e/source/f128_eq.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_eq( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return - (uiA0 == uiB0) - && ( (uiA64 == uiB64) - || (! uiA0 && ! ((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_eq_signaling.c b/addins/SoftFloat-3e/source/f128_eq_signaling.c deleted file mode 100644 index 5d0819d29..000000000 --- a/addins/SoftFloat-3e/source/f128_eq_signaling.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f128_eq_signaling( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return - (uiA0 == uiB0) - && ( (uiA64 == uiB64) - || (! uiA0 && ! ((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_isSignalingNaN.c b/addins/SoftFloat-3e/source/f128_isSignalingNaN.c deleted file mode 100644 index a764ff6bf..000000000 --- a/addins/SoftFloat-3e/source/f128_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_isSignalingNaN( float128_t a ) -{ - union ui128_f128 uA; - - uA.f = a; - return softfloat_isSigNaNF128UI( uA.ui.v64, uA.ui.v0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_le.c b/addins/SoftFloat-3e/source/f128_le.c deleted file mode 100644 index 521a1cb03..000000000 --- a/addins/SoftFloat-3e/source/f128_le.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f128_le( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - || ! (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_le_quiet.c b/addins/SoftFloat-3e/source/f128_le_quiet.c deleted file mode 100644 index 820b28b81..000000000 --- a/addins/SoftFloat-3e/source/f128_le_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_le_quiet( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - || ! (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_lt.c b/addins/SoftFloat-3e/source/f128_lt.c deleted file mode 100644 index fa46ae2bc..000000000 --- a/addins/SoftFloat-3e/source/f128_lt.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f128_lt( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - && (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_lt_quiet.c b/addins/SoftFloat-3e/source/f128_lt_quiet.c deleted file mode 100644 index d491de2f2..000000000 --- a/addins/SoftFloat-3e/source/f128_lt_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_lt_quiet( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - && (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_mul.c b/addins/SoftFloat-3e/source/f128_mul.c deleted file mode 100644 index 24af86a24..000000000 --- a/addins/SoftFloat-3e/source/f128_mul.c +++ /dev/null @@ -1,163 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_mul( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; - int_fast32_t expB; - struct uint128 sigB; - bool signZ; - uint_fast64_t magBits; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - uint64_t sig256Z[4]; - uint_fast64_t sigZExtra; - struct uint128 sigZ; - struct uint128_extra sig128Extra; - struct uint128 uiZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA.v64 | sigA.v0) || ((expB == 0x7FFF) && (sigB.v64 | sigB.v0)) - ) { - goto propagateNaN; - } - magBits = expB | sigB.v64 | sigB.v0; - goto infArg; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - magBits = expA | sigA.v64 | sigA.v0; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) goto zero; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) goto zero; - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x4000; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB = softfloat_shortShiftLeft128( sigB.v64, sigB.v0, 16 ); - softfloat_mul128To256M( sigA.v64, sigA.v0, sigB.v64, sigB.v0, sig256Z ); - sigZExtra = sig256Z[indexWord( 4, 1 )] | (sig256Z[indexWord( 4, 0 )] != 0); - sigZ = - softfloat_add128( - sig256Z[indexWord( 4, 3 )], sig256Z[indexWord( 4, 2 )], - sigA.v64, sigA.v0 - ); - if ( UINT64_C( 0x0002000000000000 ) <= sigZ.v64 ) { - ++expZ; - sig128Extra = - softfloat_shortShiftRightJam128Extra( - sigZ.v64, sigZ.v0, sigZExtra, 1 ); - sigZ = sig128Extra.v; - sigZExtra = sig128Extra.extra; - } - return - softfloat_roundPackToF128( signZ, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - goto uiZ; - } - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - goto uiZ0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ.v64 = packToF128UI64( signZ, 0, 0 ); - uiZ0: - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_mulAdd.c b/addins/SoftFloat-3e/source/f128_mulAdd.c deleted file mode 100644 index c7272d4e0..000000000 --- a/addins/SoftFloat-3e/source/f128_mulAdd.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t f128_mulAdd( float128_t a, float128_t b, float128_t c ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - union ui128_f128 uC; - uint_fast64_t uiC64, uiC0; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - uC.f = c; - uiC64 = uC.ui.v64; - uiC0 = uC.ui.v0; - return softfloat_mulAddF128( uiA64, uiA0, uiB64, uiB0, uiC64, uiC0, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_rem.c b/addins/SoftFloat-3e/source/f128_rem.c deleted file mode 100644 index f525f697a..000000000 --- a/addins/SoftFloat-3e/source/f128_rem.c +++ /dev/null @@ -1,190 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_rem( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - int_fast32_t expB; - struct uint128 sigB; - struct exp32_sig128 normExpSig; - struct uint128 rem; - int_fast32_t expDiff; - uint_fast32_t q, recip32; - uint_fast64_t q64; - struct uint128 term, altRem, meanRem; - bool signRem; - struct uint128 uiZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA.v64 | sigA.v0) || ((expB == 0x7FFF) && (sigB.v64 | sigB.v0)) - ) { - goto propagateNaN; - } - goto invalid; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) goto invalid; - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) return a; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - rem = sigA; - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - if ( expDiff ) { - --expB; - sigB = softfloat_add128( sigB.v64, sigB.v0, sigB.v64, sigB.v0 ); - q = 0; - } else { - q = softfloat_le128( sigB.v64, sigB.v0, rem.v64, rem.v0 ); - if ( q ) { - rem = softfloat_sub128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - } - } else { - recip32 = softfloat_approxRecip32_1( sigB.v64>>17 ); - expDiff -= 30; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>19) * recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - rem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, expDiff + 30 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - altRem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem = softfloat_sub128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } while ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ); - selectRem: - meanRem = softfloat_add128( rem.v64, rem.v0, altRem.v64, altRem.v0 ); - if ( - (meanRem.v64 & UINT64_C( 0x8000000000000000 )) - || (! (meanRem.v64 | meanRem.v0) && (q & 1)) - ) { - rem = altRem; - } - signRem = signA; - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - signRem = ! signRem; - rem = softfloat_sub128( 0, 0, rem.v64, rem.v0 ); - } - return softfloat_normRoundPackToF128( signRem, expB - 1, rem.v64, rem.v0 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_roundToInt.c b/addins/SoftFloat-3e/source/f128_roundToInt.c deleted file mode 100644 index 69185d6ef..000000000 --- a/addins/SoftFloat-3e/source/f128_roundToInt.c +++ /dev/null @@ -1,172 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t - f128_roundToInt( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - int_fast32_t exp; - struct uint128 uiZ; - uint_fast64_t lastBitMask0, roundBitsMask; - bool roundNearEven; - uint_fast64_t lastBitMask64; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - exp = expF128UI64( uiA64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x402F <= exp ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( 0x406F <= exp ) { - if ( (exp == 0x7FFF) && (fracF128UI64( uiA64 ) | uiA0) ) { - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, 0, 0 ); - goto uiZ; - } - return a; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - lastBitMask0 = (uint_fast64_t) 2<<(0x406E - exp); - roundBitsMask = lastBitMask0 - 1; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - roundNearEven = (roundingMode == softfloat_round_near_even); - if ( roundNearEven || (roundingMode == softfloat_round_near_maxMag) ) { - if ( exp == 0x402F ) { - if ( UINT64_C( 0x8000000000000000 ) <= uiZ.v0 ) { - ++uiZ.v64; - if ( - roundNearEven - && (uiZ.v0 == UINT64_C( 0x8000000000000000 )) - ) { - uiZ.v64 &= ~1; - } - } - } else { - uiZ = softfloat_add128( uiZ.v64, uiZ.v0, 0, lastBitMask0>>1 ); - if ( roundNearEven && !(uiZ.v0 & roundBitsMask) ) { - uiZ.v0 &= ~lastBitMask0; - } - } - } else if ( - roundingMode - == (signF128UI64( uiZ.v64 ) ? softfloat_round_min - : softfloat_round_max) - ) { - uiZ = softfloat_add128( uiZ.v64, uiZ.v0, 0, roundBitsMask ); - } - uiZ.v0 &= ~roundBitsMask; - lastBitMask64 = !lastBitMask0; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( exp < 0x3FFF ) { - if ( !((uiA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF )) | uiA0) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ.v64 = uiA64 & packToF128UI64( 1, 0, 0 ); - uiZ.v0 = 0; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !(fracF128UI64( uiA64 ) | uiA0) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) uiZ.v64 |= packToF128UI64( 0, 0x3FFF, 0 ); - break; - case softfloat_round_min: - if ( uiZ.v64 ) uiZ.v64 = packToF128UI64( 1, 0x3FFF, 0 ); - break; - case softfloat_round_max: - if ( !uiZ.v64 ) uiZ.v64 = packToF128UI64( 0, 0x3FFF, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ.v64 |= packToF128UI64( 0, 0x3FFF, 0 ); - break; -#endif - } - goto uiZ; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - uiZ.v64 = uiA64; - uiZ.v0 = 0; - lastBitMask64 = (uint_fast64_t) 1<<(0x402F - exp); - roundBitsMask = lastBitMask64 - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ.v64 += lastBitMask64>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ.v64 += lastBitMask64>>1; - if ( !((uiZ.v64 & roundBitsMask) | uiA0) ) { - uiZ.v64 &= ~lastBitMask64; - } - } else if ( - roundingMode - == (signF128UI64( uiZ.v64 ) ? softfloat_round_min - : softfloat_round_max) - ) { - uiZ.v64 = (uiZ.v64 | (uiA0 != 0)) + roundBitsMask; - } - uiZ.v64 &= ~roundBitsMask; - lastBitMask0 = 0; - } - if ( (uiZ.v64 != uiA64) || (uiZ.v0 != uiA0) ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - uiZ.v64 |= lastBitMask64; - uiZ.v0 |= lastBitMask0; - } -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_sqrt.c b/addins/SoftFloat-3e/source/f128_sqrt.c deleted file mode 100644 index f1d9bac79..000000000 --- a/addins/SoftFloat-3e/source/f128_sqrt.c +++ /dev/null @@ -1,201 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_sqrt( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA, uiZ; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - uint_fast32_t sig32A, recipSqrt32, sig32Z; - struct uint128 rem; - uint32_t qs[3]; - uint_fast32_t q; - uint_fast64_t x64, sig64Z; - struct uint128 y, term; - uint_fast64_t sigZExtra; - struct uint128 sigZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) { - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, 0, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA.v64 | sigA.v0) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) return a; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFE; - expA &= 1; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sig32A = sigA.v64>>17; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint_fast64_t) sig32A * recipSqrt32)>>32; - if ( expA ) { - sig32Z >>= 1; - rem = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 12 ); - } else { - rem = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 13 ); - } - qs[2] = sig32Z; - rem.v64 -= (uint_fast64_t) sig32Z * sig32Z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem.v64>>2) * (uint_fast64_t) recipSqrt32)>>32; - x64 = (uint_fast64_t) sig32Z<<32; - sig64Z = x64 + ((uint_fast64_t) q<<3); - y = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - term = softfloat_mul64ByShifted32To128( x64 + sig64Z, q ); - rem = softfloat_sub128( y.v64, y.v0, term.v64, term.v0 ); - if ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ) break; - --q; - sig64Z -= 1<<3; - } - qs[1] = q; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((rem.v64>>2) * recipSqrt32)>>32; - y = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - sig64Z <<= 1; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - term = softfloat_shortShiftLeft128( 0, sig64Z, 32 ); - term = softfloat_add128( term.v64, term.v0, 0, (uint_fast64_t) q<<6 ); - term = softfloat_mul128By32( term.v64, term.v0, q ); - rem = softfloat_sub128( y.v64, y.v0, term.v64, term.v0 ); - if ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ) break; - --q; - } - qs[0] = q; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((rem.v64>>2) * recipSqrt32)>>32) + 2; - sigZExtra = (uint64_t) ((uint_fast64_t) q<<59); - term = softfloat_shortShiftLeft128( 0, qs[1], 53 ); - sigZ = - softfloat_add128( - (uint_fast64_t) qs[2]<<18, ((uint_fast64_t) qs[0]<<24) + (q>>5), - term.v64, term.v0 - ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xF) <= 2 ) { - q &= ~3; - sigZExtra = (uint64_t) ((uint_fast64_t) q<<59); - y = softfloat_shortShiftLeft128( sigZ.v64, sigZ.v0, 6 ); - y.v0 |= sigZExtra>>58; - term = softfloat_sub128( y.v64, y.v0, 0, q ); - y = softfloat_mul64ByShifted32To128( term.v0, q ); - term = softfloat_mul64ByShifted32To128( term.v64, q ); - term = softfloat_add128( term.v64, term.v0, 0, y.v64 ); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 20 ); - term = softfloat_sub128( term.v64, term.v0, rem.v64, rem.v0 ); - /*-------------------------------------------------------------------- - | The concatenation of `term' and `y.v0' is now the negative remainder - | (3 words altogether). - *--------------------------------------------------------------------*/ - if ( term.v64 & UINT64_C( 0x8000000000000000 ) ) { - sigZExtra |= 1; - } else { - if ( term.v64 | term.v0 | y.v0 ) { - if ( sigZExtra ) { - --sigZExtra; - } else { - sigZ = softfloat_sub128( sigZ.v64, sigZ.v0, 0, 1 ); - sigZExtra = ~0; - } - } - } - } - return softfloat_roundPackToF128( 0, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_sub.c b/addins/SoftFloat-3e/source/f128_sub.c deleted file mode 100644 index 5181cc5ec..000000000 --- a/addins/SoftFloat-3e/source/f128_sub.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t f128_sub( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsF128 : softfloat_addMagsF128; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_extF80.c b/addins/SoftFloat-3e/source/f128_to_extF80.c deleted file mode 100644 index ec169c0ff..000000000 --- a/addins/SoftFloat-3e/source/f128_to_extF80.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f128_to_extF80( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64, frac0; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp32_sig128 normExpSig; - struct uint128 sig128; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ); - frac0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 | frac0 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! (frac64 | frac0) ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF128Sig( frac64, frac0 ); - exp = normExpSig.exp; - frac64 = normExpSig.sig.v64; - frac0 = normExpSig.sig.v0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig128 = - softfloat_shortShiftLeft128( - frac64 | UINT64_C( 0x0001000000000000 ), frac0, 15 ); - return softfloat_roundPackToExtF80( sign, exp, sig128.v64, sig128.v0, 80 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_f16.c b/addins/SoftFloat-3e/source/f128_to_f16.c deleted file mode 100644 index 5a8ee7212..000000000 --- a/addins/SoftFloat-3e/source/f128_to_f16.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f128_to_f16( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64; - struct commonNaN commonNaN; - uint_fast16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = softfloat_shortShiftRightJam64( frac64, 34 ); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, frac16 | 0x4000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_f32.c b/addins/SoftFloat-3e/source/f128_to_f32.c deleted file mode 100644 index 07e4a80df..000000000 --- a/addins/SoftFloat-3e/source/f128_to_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f128_to_f32( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64; - struct commonNaN commonNaN; - uint_fast32_t uiZ, frac32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = softfloat_shortShiftRightJam64( frac64, 18 ); - if ( ! (exp | frac32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, frac32 | 0x40000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_f64.c b/addins/SoftFloat-3e/source/f128_to_f64.c deleted file mode 100644 index f791938b4..000000000 --- a/addins/SoftFloat-3e/source/f128_to_f64.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f128_to_f64( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64, frac0; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - struct uint128 frac128; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ); - frac0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 | frac0 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac128 = softfloat_shortShiftLeft128( frac64, frac0, 14 ); - frac64 = frac128.v64 | (frac128.v0 != 0); - if ( ! (exp | frac64) ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return - softfloat_roundPackToF64( - sign, exp, frac64 | UINT64_C( 0x4000000000000000 ) ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_i32.c b/addins/SoftFloat-3e/source/f128_to_i32.c deleted file mode 100644 index 16c4a3ccd..000000000 --- a/addins/SoftFloat-3e/source/f128_to_i32.c +++ /dev/null @@ -1,85 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f128_to_i32( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FFF) && (sig64 | sig0) ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - sig64 |= (sig0 != 0); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_i32_r_minMag.c deleted file mode 100644 index 18cfeaee5..000000000 --- a/addins/SoftFloat-3e/source/f128_to_i32_r_minMag.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f128_to_i32_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - int_fast32_t exp; - uint_fast64_t sig64; - int_fast32_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( 49 <= shiftDist ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF128UI64( uiA64 ); - if ( shiftDist < 18 ) { - if ( - sign && (shiftDist == 17) - && (sig64 < UINT64_C( 0x0000000000020000 )) - ) { - if ( exact && sig64 ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -0x7FFFFFFF - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && sig64 ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - absZ = sig64>>shiftDist; - if ( - exact && ((uint_fast64_t) (uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f128_to_i64( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - struct uint128 sig128; - struct uint64_extra sigExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -15 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig64 | sig0) ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig64, sig0, -shiftDist ); - sig64 = sig128.v64; - sig0 = sig128.v0; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - sigExtra = softfloat_shiftRightJam64Extra( sig64, sig0, shiftDist ); - sig64 = sigExtra.v; - sig0 = sigExtra.extra; - } - return softfloat_roundToI64( sign, sig64, sig0, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_i64_r_minMag.c deleted file mode 100644 index e2cc62e27..000000000 --- a/addins/SoftFloat-3e/source/f128_to_i64_r_minMag.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f128_to_i64_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - int_fast8_t negShiftDist; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist < 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -14 ) { - if ( - (uiA64 == UINT64_C( 0xC03E000000000000 )) - && (sig0 < UINT64_C( 0x0002000000000000 )) - ) { - if ( exact && sig0 ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig64 | sig0) ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - negShiftDist = -shiftDist; - absZ = sig64<>(shiftDist & 63); - if ( exact && (uint64_t) (sig0<>shiftDist; - if ( exact && (sig0 || (absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t - f128_to_ui32( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FFF) && sig64 ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) { - sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - } - return softfloat_roundToUI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_ui32_r_minMag.c deleted file mode 100644 index 92facd517..000000000 --- a/addins/SoftFloat-3e/source/f128_to_ui32_r_minMag.c +++ /dev/null @@ -1,89 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f128_to_ui32_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - int_fast32_t exp; - uint_fast64_t sig64; - int_fast32_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( 49 <= shiftDist ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF128UI64( uiA64 ); - if ( sign || (shiftDist < 17) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && sig64 ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - z = sig64>>shiftDist; - if ( exact && ((uint_fast64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - f128_to_ui64( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - struct uint128 sig128; - struct uint64_extra sigExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -15 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig64 | sig0) ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig64, sig0, -shiftDist ); - sig64 = sig128.v64; - sig0 = sig128.v0; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - sigExtra = softfloat_shiftRightJam64Extra( sig64, sig0, shiftDist ); - sig64 = sigExtra.v; - sig0 = sigExtra.extra; - } - return softfloat_roundToUI64( sign, sig64, sig0, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_ui64_r_minMag.c deleted file mode 100644 index edeafd3c8..000000000 --- a/addins/SoftFloat-3e/source/f128_to_ui64_r_minMag.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f128_to_ui64_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - int_fast8_t negShiftDist; - uint_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist < 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( sign || (shiftDist < -15) ) goto invalid; - sig64 |= UINT64_C( 0x0001000000000000 ); - negShiftDist = -shiftDist; - z = sig64<>(shiftDist & 63); - if ( exact && (uint64_t) (sig0<>shiftDist; - if ( exact && (sig0 || (z< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t f16_add( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float16_t (*magsFuncPtr)( uint_fast16_t, uint_fast16_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF16UI( uiA ^ uiB ) ) { - return softfloat_subMagsF16( uiA, uiB ); - } else { - return softfloat_addMagsF16( uiA, uiB ); - } -#else - magsFuncPtr = - signF16UI( uiA ^ uiB ) ? softfloat_subMagsF16 : softfloat_addMagsF16; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f16_div.c b/addins/SoftFloat-3e/source/f16_div.c deleted file mode 100644 index 77f9a2cd2..000000000 --- a/addins/SoftFloat-3e/source/f16_div.c +++ /dev/null @@ -1,186 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extern const uint16_t softfloat_approxRecip_1k0s[]; -extern const uint16_t softfloat_approxRecip_1k1s[]; - -float16_t f16_div( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signB; - int_fast8_t expB; - uint_fast16_t sigB; - bool signZ; - struct exp8_sig16 normExpSig; - int_fast8_t expZ; -#ifdef SOFTFLOAT_FAST_DIV32TO16 - uint_fast32_t sig32A; - uint_fast16_t sigZ; -#else - int index; - uint16_t r0; - uint_fast16_t sigZ, rem; -#endif - uint_fast16_t uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF16UI( uiB ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA ) goto propagateNaN; - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) { - if ( ! (expA | sigA) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0xE; - sigA |= 0x0400; - sigB |= 0x0400; -#ifdef SOFTFLOAT_FAST_DIV32TO16 - if ( sigA < sigB ) { - --expZ; - sig32A = (uint_fast32_t) sigA<<15; - } else { - sig32A = (uint_fast32_t) sigA<<14; - } - sigZ = sig32A / sigB; - if ( ! (sigZ & 7) ) sigZ |= ((uint_fast32_t) sigB * sigZ != sig32A); -#else - if ( sigA < sigB ) { - --expZ; - sigA <<= 5; - } else { - sigA <<= 4; - } - index = sigB>>6 & 0xF; - r0 = softfloat_approxRecip_1k0s[index] - - (((uint_fast32_t) softfloat_approxRecip_1k1s[index] - * (sigB & 0x3F)) - >>10); - sigZ = ((uint_fast32_t) sigA * r0)>>16; - rem = (sigA<<10) - sigZ * sigB; - sigZ += (rem * (uint_fast32_t) r0)>>26; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - ++sigZ; - if ( ! (sigZ & 7) ) { - sigZ &= ~1; - rem = (sigA<<10) - sigZ * sigB; - if ( rem & 0x8000 ) { - sigZ -= 2; - } else { - if ( rem ) sigZ |= 1; - } - } -#endif - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ = packToF16UI( signZ, 0x1F, 0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF16UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_eq.c b/addins/SoftFloat-3e/source/f16_eq.c deleted file mode 100644 index 692fa035f..000000000 --- a/addins/SoftFloat-3e/source/f16_eq.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_eq( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - if ( - softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return (uiA == uiB) || ! (uint16_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f16_eq_signaling.c b/addins/SoftFloat-3e/source/f16_eq_signaling.c deleted file mode 100644 index c1e7a509c..000000000 --- a/addins/SoftFloat-3e/source/f16_eq_signaling.c +++ /dev/null @@ -1,61 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f16_eq_signaling( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return (uiA == uiB) || ! (uint16_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f16_isSignalingNaN.c b/addins/SoftFloat-3e/source/f16_isSignalingNaN.c deleted file mode 100644 index 3eb3d4cc6..000000000 --- a/addins/SoftFloat-3e/source/f16_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_isSignalingNaN( float16_t a ) -{ - union ui16_f16 uA; - - uA.f = a; - return softfloat_isSigNaNF16UI( uA.ui ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_le.c b/addins/SoftFloat-3e/source/f16_le.c deleted file mode 100644 index d7313debd..000000000 --- a/addins/SoftFloat-3e/source/f16_le.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f16_le( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA || ! (uint16_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_le_quiet.c b/addins/SoftFloat-3e/source/f16_le_quiet.c deleted file mode 100644 index 15181c260..000000000 --- a/addins/SoftFloat-3e/source/f16_le_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_le_quiet( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - if ( - softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA || ! (uint16_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_lt.c b/addins/SoftFloat-3e/source/f16_lt.c deleted file mode 100644 index 7745699a2..000000000 --- a/addins/SoftFloat-3e/source/f16_lt.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f16_lt( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA && ((uint16_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_lt_quiet.c b/addins/SoftFloat-3e/source/f16_lt_quiet.c deleted file mode 100644 index a31e4a13f..000000000 --- a/addins/SoftFloat-3e/source/f16_lt_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_lt_quiet( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - if ( - softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA && ((uint16_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_mul.c b/addins/SoftFloat-3e/source/f16_mul.c deleted file mode 100644 index a47cab8ce..000000000 --- a/addins/SoftFloat-3e/source/f16_mul.c +++ /dev/null @@ -1,140 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f16_mul( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signB; - int_fast8_t expB; - uint_fast16_t sigB; - bool signZ; - uint_fast16_t magBits; - struct exp8_sig16 normExpSig; - int_fast8_t expZ; - uint_fast32_t sig32Z; - uint_fast16_t sigZ, uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF16UI( uiB ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA || ((expB == 0x1F) && sigB) ) goto propagateNaN; - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0xF; - sigA = (sigA | 0x0400)<<4; - sigB = (sigB | 0x0400)<<5; - sig32Z = (uint_fast32_t) sigA * sigB; - sigZ = sig32Z>>16; - if ( sig32Z & 0xFFFF ) sigZ |= 1; - if ( sigZ < 0x4000 ) { - --expZ; - sigZ <<= 1; - } - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - } else { - uiZ = packToF16UI( signZ, 0x1F, 0 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF16UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_mulAdd.c b/addins/SoftFloat-3e/source/f16_mulAdd.c deleted file mode 100644 index e97571ac5..000000000 --- a/addins/SoftFloat-3e/source/f16_mulAdd.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t f16_mulAdd( float16_t a, float16_t b, float16_t c ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - union ui16_f16 uC; - uint_fast16_t uiC; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - uC.f = c; - uiC = uC.ui; - return softfloat_mulAddF16( uiA, uiB, uiC, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_rem.c b/addins/SoftFloat-3e/source/f16_rem.c deleted file mode 100644 index 0ffa498a1..000000000 --- a/addins/SoftFloat-3e/source/f16_rem.c +++ /dev/null @@ -1,171 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f16_rem( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - union ui16_f16 uB; - uint_fast16_t uiB; - int_fast8_t expB; - uint_fast16_t sigB; - struct exp8_sig16 normExpSig; - uint16_t rem; - int_fast8_t expDiff; - uint_fast16_t q; - uint32_t recip32, q32; - uint16_t altRem, meanRem; - bool signRem; - uint_fast16_t uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - uB.f = b; - uiB = uB.ui; - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA || ((expB == 0x1F) && sigB) ) goto propagateNaN; - goto invalid; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - rem = sigA | 0x0400; - sigB |= 0x0400; - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - sigB <<= 3; - if ( expDiff ) { - rem <<= 2; - q = 0; - } else { - rem <<= 3; - q = (sigB <= rem); - if ( q ) rem -= sigB; - } - } else { - recip32 = softfloat_approxRecip32_1( (uint_fast32_t) sigB<<21 ); - /*-------------------------------------------------------------------- - | Changing the shift of `rem' here requires also changing the initial - | subtraction from `expDiff'. - *--------------------------------------------------------------------*/ - rem <<= 4; - expDiff -= 31; - /*-------------------------------------------------------------------- - | The scale of `sigB' affects how many bits are obtained during each - | cycle of the loop. Currently this is 29 bits per loop iteration, - | which is believed to be the maximum possible. - *--------------------------------------------------------------------*/ - sigB <<= 3; - for (;;) { - q32 = (rem * (uint_fast64_t) recip32)>>16; - if ( expDiff < 0 ) break; - rem = -((uint_fast16_t) q32 * sigB); - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -30 here.) - *--------------------------------------------------------------------*/ - q32 >>= ~expDiff & 31; - q = q32; - rem = (rem<<(expDiff + 30)) - q * sigB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem -= sigB; - } while ( ! (rem & 0x8000) ); - meanRem = rem + altRem; - if ( (meanRem & 0x8000) || (! meanRem && (q & 1)) ) rem = altRem; - signRem = signA; - if ( 0x8000 <= rem ) { - signRem = ! signRem; - rem = -rem; - } - return softfloat_normRoundPackToF16( signRem, expB, rem ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_roundToInt.c b/addins/SoftFloat-3e/source/f16_roundToInt.c deleted file mode 100644 index a567d51d9..000000000 --- a/addins/SoftFloat-3e/source/f16_roundToInt.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f16_roundToInt( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t uiZ, lastBitMask, roundBitsMask; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0xE ) { - if ( !(uint16_t) (uiA<<1) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ = uiA & packToF16UI( 1, 0, 0 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF16UI( uiA ) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0xE ) uiZ |= packToF16UI( 0, 0xF, 0 ); - break; - case softfloat_round_min: - if ( uiZ ) uiZ = packToF16UI( 1, 0xF, 0 ); - break; - case softfloat_round_max: - if ( !uiZ ) uiZ = packToF16UI( 0, 0xF, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ |= packToF16UI( 0, 0xF, 0 ); - break; -#endif - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x19 <= exp ) { - if ( (exp == 0x1F) && fracF16UI( uiA ) ) { - uiZ = softfloat_propagateNaNF16UI( uiA, 0 ); - goto uiZ; - } - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = uiA; - lastBitMask = (uint_fast16_t) 1<<(0x19 - exp); - roundBitsMask = lastBitMask - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ += lastBitMask>>1; - if ( !(uiZ & roundBitsMask) ) uiZ &= ~lastBitMask; - } else if ( - roundingMode - == (signF16UI( uiZ ) ? softfloat_round_min : softfloat_round_max) - ) { - uiZ += roundBitsMask; - } - uiZ &= ~roundBitsMask; - if ( uiZ != uiA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) uiZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_sqrt.c b/addins/SoftFloat-3e/source/f16_sqrt.c deleted file mode 100644 index 47a3bbf14..000000000 --- a/addins/SoftFloat-3e/source/f16_sqrt.c +++ /dev/null @@ -1,136 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extern const uint16_t softfloat_approxRecipSqrt_1k0s[]; -extern const uint16_t softfloat_approxRecipSqrt_1k1s[]; - -float16_t f16_sqrt( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA, uiZ; - struct exp8_sig16 normExpSig; - int_fast8_t expZ; - int index; - uint_fast16_t r0; - uint_fast32_t ESqrR0; - uint16_t sigma0; - uint_fast16_t recipSqrt16, sigZ, shiftedSigZ; - uint16_t negRem; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA ) { - uiZ = softfloat_propagateNaNF16UI( uiA, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = ((expA - 0xF)>>1) + 0xE; - expA &= 1; - sigA |= 0x0400; - index = (sigA>>6 & 0xE) + expA; - r0 = softfloat_approxRecipSqrt_1k0s[index] - - (((uint_fast32_t) softfloat_approxRecipSqrt_1k1s[index] - * (sigA & 0x7F)) - >>11); - ESqrR0 = ((uint_fast32_t) r0 * r0)>>1; - if ( expA ) ESqrR0 >>= 1; - sigma0 = ~(uint_fast16_t) ((ESqrR0 * sigA)>>16); - recipSqrt16 = r0 + (((uint_fast32_t) r0 * sigma0)>>25); - if ( ! (recipSqrt16 & 0x8000) ) recipSqrt16 = 0x8000; - sigZ = ((uint_fast32_t) (sigA<<5) * recipSqrt16)>>16; - if ( expA ) sigZ >>= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - ++sigZ; - if ( ! (sigZ & 7) ) { - shiftedSigZ = sigZ>>1; - negRem = shiftedSigZ * shiftedSigZ; - sigZ &= ~1; - if ( negRem & 0x8000 ) { - sigZ |= 1; - } else { - if ( negRem ) --sigZ; - } - } - return softfloat_roundPackToF16( 0, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_sub.c b/addins/SoftFloat-3e/source/f16_sub.c deleted file mode 100644 index 03a87cf32..000000000 --- a/addins/SoftFloat-3e/source/f16_sub.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t f16_sub( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float16_t (*magsFuncPtr)( uint_fast16_t, uint_fast16_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF16UI( uiA ^ uiB ) ) { - return softfloat_addMagsF16( uiA, uiB ); - } else { - return softfloat_subMagsF16( uiA, uiB ); - } -#else - magsFuncPtr = - signF16UI( uiA ^ uiB ) ? softfloat_addMagsF16 : softfloat_subMagsF16; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_extF80.c b/addins/SoftFloat-3e/source/f16_to_extF80.c deleted file mode 100644 index 99c2dfc74..000000000 --- a/addins/SoftFloat-3e/source/f16_to_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f16_to_extF80( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp8_sig16 normExpSig; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3FF0 ); - uiZ0 = (uint_fast64_t) (frac | 0x0400)<<53; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_extF80M.c b/addins/SoftFloat-3e/source/f16_to_extF80M.c deleted file mode 100644 index 7f2d53458..000000000 --- a/addins/SoftFloat-3e/source/f16_to_extF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f16_to_extF80M( float16_t a, extFloat80_t *zPtr ) -{ - - *zPtr = f16_to_extF80( a ); - -} - -#else - -void f16_to_extF80M( float16_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - union ui16_f16 uA; - uint16_t uiA; - bool sign; - int_fast8_t exp; - uint16_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ64; - uint32_t uiZ32; - struct exp8_sig16 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zSPtr = (struct extFloat80M *) zPtr; - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ32 = 0x80000000; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ32 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3FF0 ); - uiZ32 = 0x80000000 | (uint32_t) frac<<21; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = (uint64_t) uiZ32<<32; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f16_to_f128.c b/addins/SoftFloat-3e/source/f16_to_f128.c deleted file mode 100644 index c4b81dc84..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f128.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f16_to_f128( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - struct exp8_sig16 normExpSig; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - uiZ.v64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ.v0 = 0; - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ.v64 = packToF128UI64( sign, 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ.v64 = packToF128UI64( sign, exp + 0x3FF0, (uint_fast64_t) frac<<38 ); - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_f128M.c b/addins/SoftFloat-3e/source/f16_to_f128M.c deleted file mode 100644 index b4fc873b5..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f128M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f16_to_f128M( float16_t a, float128_t *zPtr ) -{ - - *zPtr = f16_to_f128( a ); - -} - -#else - -void f16_to_f128M( float16_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - union ui16_f16 uA; - uint16_t uiA; - bool sign; - int_fast8_t exp; - uint16_t frac; - struct commonNaN commonNaN; - uint32_t uiZ96; - struct exp8_sig16 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ96 = packToF128UI96( sign, exp + 0x3FF0, (uint32_t) frac<<6 ); - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f16_to_f32.c b/addins/SoftFloat-3e/source/f16_to_f32.c deleted file mode 100644 index a219454bf..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f32.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f16_to_f32( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - uint_fast32_t uiZ; - struct exp8_sig16 normExpSig; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = packToF32UI( sign, exp + 0x70, (uint_fast32_t) frac<<13 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_f64.c b/addins/SoftFloat-3e/source/f16_to_f64.c deleted file mode 100644 index 7e87c25f4..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f64.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f16_to_f64( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - struct exp8_sig16 normExpSig; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = packToF64UI( sign, exp + 0x3F0, (uint_fast64_t) frac<<42 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i32.c b/addins/SoftFloat-3e/source/f16_to_i32.c deleted file mode 100644 index 805c4e550..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i32.c +++ /dev/null @@ -1,87 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f16_to_i32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - int_fast32_t sig32; - int_fast8_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( 0 <= shiftDist ) { - sig32 <<= shiftDist; - return sign ? -sig32 : sig32; - } - shiftDist = exp - 0x0D; - if ( 0 < shiftDist ) sig32 <<= shiftDist; - } - return - softfloat_roundToI32( - sign, (uint_fast32_t) sig32, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f16_to_i32_r_minMag.c deleted file mode 100644 index b1f996371..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f16_to_i32_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - int_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (int_fast32_t) (frac | 0x0400)<>= 10; - return sign ? -alignedSig : alignedSig; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i64.c b/addins/SoftFloat-3e/source/f16_to_i64.c deleted file mode 100644 index e3c0065f6..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i64.c +++ /dev/null @@ -1,87 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f16_to_i64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - int_fast32_t sig32; - int_fast8_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( 0 <= shiftDist ) { - sig32 <<= shiftDist; - return sign ? -sig32 : sig32; - } - shiftDist = exp - 0x0D; - if ( 0 < shiftDist ) sig32 <<= shiftDist; - } - return - softfloat_roundToI32( - sign, (uint_fast32_t) sig32, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f16_to_i64_r_minMag.c deleted file mode 100644 index a5a6a077e..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i64_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f16_to_i64_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - int_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (int_fast32_t) (frac | 0x0400)<>= 10; - return sign ? -alignedSig : alignedSig; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_ui32.c b/addins/SoftFloat-3e/source/f16_to_ui32.c deleted file mode 100644 index 5371ca339..000000000 --- a/addins/SoftFloat-3e/source/f16_to_ui32.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f16_to_ui32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - uint_fast32_t sig32; - int_fast8_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( (0 <= shiftDist) && ! sign ) { - return sig32< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f16_to_ui32_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - uint_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( sign || (exp == 0x1F) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (uint_fast32_t) (frac | 0x0400)<>10; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_ui64.c b/addins/SoftFloat-3e/source/f16_to_ui64.c deleted file mode 100644 index e6cb000f1..000000000 --- a/addins/SoftFloat-3e/source/f16_to_ui64.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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, 2017, 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f16_to_ui64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - uint_fast32_t sig32; - int_fast8_t shiftDist; -#ifndef SOFTFLOAT_FAST_INT64 - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( (0 <= shiftDist) && ! sign ) { - return sig32<>12, (uint_fast64_t) sig32<<52, roundingMode, exact ); -#else - extSig[indexWord( 3, 2 )] = 0; - extSig[indexWord( 3, 1 )] = sig32>>12; - extSig[indexWord( 3, 0 )] = sig32<<20; - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f16_to_ui64_r_minMag.c deleted file mode 100644 index b4f975f83..000000000 --- a/addins/SoftFloat-3e/source/f16_to_ui64_r_minMag.c +++ /dev/null @@ -1,87 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f16_to_ui64_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - uint_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( sign || (exp == 0x1F) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (uint_fast32_t) (frac | 0x0400)<>10; - -} - diff --git a/addins/SoftFloat-3e/source/f32_add.c b/addins/SoftFloat-3e/source/f32_add.c deleted file mode 100644 index 70e03e7f9..000000000 --- a/addins/SoftFloat-3e/source/f32_add.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t f32_add( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float32_t (*magsFuncPtr)( uint_fast32_t, uint_fast32_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF32UI( uiA ^ uiB ) ) { - return softfloat_subMagsF32( uiA, uiB ); - } else { - return softfloat_addMagsF32( uiA, uiB ); - } -#else - magsFuncPtr = - signF32UI( uiA ^ uiB ) ? softfloat_subMagsF32 : softfloat_addMagsF32; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_div.c b/addins/SoftFloat-3e/source/f32_div.c deleted file mode 100644 index 05ec701f7..000000000 --- a/addins/SoftFloat-3e/source/f32_div.c +++ /dev/null @@ -1,180 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_div( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signB; - int_fast16_t expB; - uint_fast32_t sigB; - bool signZ; - struct exp16_sig32 normExpSig; - int_fast16_t expZ; -#ifdef SOFTFLOAT_FAST_DIV64TO32 - uint_fast64_t sig64A; - uint_fast32_t sigZ; -#else - uint_fast32_t sigZ; - uint_fast64_t rem; -#endif - uint_fast32_t uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF32UI( uiB ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA ) goto propagateNaN; - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) { - if ( ! (expA | sigA) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x7E; - sigA |= 0x00800000; - sigB |= 0x00800000; -#ifdef SOFTFLOAT_FAST_DIV64TO32 - if ( sigA < sigB ) { - --expZ; - sig64A = (uint_fast64_t) sigA<<31; - } else { - sig64A = (uint_fast64_t) sigA<<30; - } - sigZ = sig64A / sigB; - if ( ! (sigZ & 0x3F) ) sigZ |= ((uint_fast64_t) sigB * sigZ != sig64A); -#else - if ( sigA < sigB ) { - --expZ; - sigA <<= 8; - } else { - sigA <<= 7; - } - sigB <<= 8; - sigZ = ((uint_fast64_t) sigA * softfloat_approxRecip32_1( sigB ))>>32; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZ += 2; - if ( (sigZ & 0x3F) < 2 ) { - sigZ &= ~3; -#ifdef SOFTFLOAT_FAST_INT64 - rem = ((uint_fast64_t) sigA<<31) - (uint_fast64_t) sigZ * sigB; -#else - rem = ((uint_fast64_t) sigA<<32) - (uint_fast64_t) (sigZ<<1) * sigB; -#endif - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - sigZ -= 4; - } else { - if ( rem ) sigZ |= 1; - } - } -#endif - return softfloat_roundPackToF32( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ = packToF32UI( signZ, 0xFF, 0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF32UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_eq.c b/addins/SoftFloat-3e/source/f32_eq.c deleted file mode 100644 index 801bbfd73..000000000 --- a/addins/SoftFloat-3e/source/f32_eq.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_eq( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - if ( - softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return (uiA == uiB) || ! (uint32_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f32_eq_signaling.c b/addins/SoftFloat-3e/source/f32_eq_signaling.c deleted file mode 100644 index 4c610ffae..000000000 --- a/addins/SoftFloat-3e/source/f32_eq_signaling.c +++ /dev/null @@ -1,61 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f32_eq_signaling( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return (uiA == uiB) || ! (uint32_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f32_isSignalingNaN.c b/addins/SoftFloat-3e/source/f32_isSignalingNaN.c deleted file mode 100644 index f5954cbbc..000000000 --- a/addins/SoftFloat-3e/source/f32_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_isSignalingNaN( float32_t a ) -{ - union ui32_f32 uA; - - uA.f = a; - return softfloat_isSigNaNF32UI( uA.ui ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_le.c b/addins/SoftFloat-3e/source/f32_le.c deleted file mode 100644 index d89d1e88d..000000000 --- a/addins/SoftFloat-3e/source/f32_le.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f32_le( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA || ! (uint32_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_le_quiet.c b/addins/SoftFloat-3e/source/f32_le_quiet.c deleted file mode 100644 index c2d4297a2..000000000 --- a/addins/SoftFloat-3e/source/f32_le_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_le_quiet( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - if ( - softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA || ! (uint32_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_lt.c b/addins/SoftFloat-3e/source/f32_lt.c deleted file mode 100644 index 5b5fd2282..000000000 --- a/addins/SoftFloat-3e/source/f32_lt.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f32_lt( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA && ((uint32_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_lt_quiet.c b/addins/SoftFloat-3e/source/f32_lt_quiet.c deleted file mode 100644 index 015388143..000000000 --- a/addins/SoftFloat-3e/source/f32_lt_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_lt_quiet( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - if ( - softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA && ((uint32_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_mul.c b/addins/SoftFloat-3e/source/f32_mul.c deleted file mode 100644 index f5c856002..000000000 --- a/addins/SoftFloat-3e/source/f32_mul.c +++ /dev/null @@ -1,137 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_mul( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signB; - int_fast16_t expB; - uint_fast32_t sigB; - bool signZ; - uint_fast32_t magBits; - struct exp16_sig32 normExpSig; - int_fast16_t expZ; - uint_fast32_t sigZ, uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF32UI( uiB ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA || ((expB == 0xFF) && sigB) ) goto propagateNaN; - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x7F; - sigA = (sigA | 0x00800000)<<7; - sigB = (sigB | 0x00800000)<<8; - sigZ = softfloat_shortShiftRightJam64( (uint_fast64_t) sigA * sigB, 32 ); - if ( sigZ < 0x40000000 ) { - --expZ; - sigZ <<= 1; - } - return softfloat_roundPackToF32( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - } else { - uiZ = packToF32UI( signZ, 0xFF, 0 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF32UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_mulAdd.c b/addins/SoftFloat-3e/source/f32_mulAdd.c deleted file mode 100644 index 9a28e212c..000000000 --- a/addins/SoftFloat-3e/source/f32_mulAdd.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t f32_mulAdd( float32_t a, float32_t b, float32_t c ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - union ui32_f32 uC; - uint_fast32_t uiC; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - uC.f = c; - uiC = uC.ui; - return softfloat_mulAddF32( uiA, uiB, uiC, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_rem.c b/addins/SoftFloat-3e/source/f32_rem.c deleted file mode 100644 index b29bf416e..000000000 --- a/addins/SoftFloat-3e/source/f32_rem.c +++ /dev/null @@ -1,168 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_rem( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - union ui32_f32 uB; - uint_fast32_t uiB; - int_fast16_t expB; - uint_fast32_t sigB; - struct exp16_sig32 normExpSig; - uint32_t rem; - int_fast16_t expDiff; - uint32_t q, recip32, altRem, meanRem; - bool signRem; - uint_fast32_t uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - uB.f = b; - uiB = uB.ui; - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA || ((expB == 0xFF) && sigB) ) goto propagateNaN; - goto invalid; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - rem = sigA | 0x00800000; - sigB |= 0x00800000; - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - sigB <<= 6; - if ( expDiff ) { - rem <<= 5; - q = 0; - } else { - rem <<= 6; - q = (sigB <= rem); - if ( q ) rem -= sigB; - } - } else { - recip32 = softfloat_approxRecip32_1( sigB<<8 ); - /*-------------------------------------------------------------------- - | Changing the shift of `rem' here requires also changing the initial - | subtraction from `expDiff'. - *--------------------------------------------------------------------*/ - rem <<= 7; - expDiff -= 31; - /*-------------------------------------------------------------------- - | The scale of `sigB' affects how many bits are obtained during each - | cycle of the loop. Currently this is 29 bits per loop iteration, - | which is believed to be the maximum possible. - *--------------------------------------------------------------------*/ - sigB <<= 6; - for (;;) { - q = (rem * (uint_fast64_t) recip32)>>32; - if ( expDiff < 0 ) break; - rem = -(q * (uint32_t) sigB); - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -30 here.) - *--------------------------------------------------------------------*/ - q >>= ~expDiff & 31; - rem = (rem<<(expDiff + 30)) - q * (uint32_t) sigB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem -= sigB; - } while ( ! (rem & 0x80000000) ); - meanRem = rem + altRem; - if ( (meanRem & 0x80000000) || (! meanRem && (q & 1)) ) rem = altRem; - signRem = signA; - if ( 0x80000000 <= rem ) { - signRem = ! signRem; - rem = -rem; - } - return softfloat_normRoundPackToF32( signRem, expB, rem ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - goto uiZ; - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_roundToInt.c b/addins/SoftFloat-3e/source/f32_roundToInt.c deleted file mode 100644 index 305af79dd..000000000 --- a/addins/SoftFloat-3e/source/f32_roundToInt.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_roundToInt( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t uiZ, lastBitMask, roundBitsMask; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0x7E ) { - if ( !(uint32_t) (uiA<<1) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ = uiA & packToF32UI( 1, 0, 0 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF32UI( uiA ) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x7E ) uiZ |= packToF32UI( 0, 0x7F, 0 ); - break; - case softfloat_round_min: - if ( uiZ ) uiZ = packToF32UI( 1, 0x7F, 0 ); - break; - case softfloat_round_max: - if ( !uiZ ) uiZ = packToF32UI( 0, 0x7F, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ |= packToF32UI( 0, 0x7F, 0 ); - break; -#endif - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x96 <= exp ) { - if ( (exp == 0xFF) && fracF32UI( uiA ) ) { - uiZ = softfloat_propagateNaNF32UI( uiA, 0 ); - goto uiZ; - } - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = uiA; - lastBitMask = (uint_fast32_t) 1<<(0x96 - exp); - roundBitsMask = lastBitMask - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ += lastBitMask>>1; - if ( !(uiZ & roundBitsMask) ) uiZ &= ~lastBitMask; - } else if ( - roundingMode - == (signF32UI( uiZ ) ? softfloat_round_min : softfloat_round_max) - ) { - uiZ += roundBitsMask; - } - uiZ &= ~roundBitsMask; - if ( uiZ != uiA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) uiZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_sqrt.c b/addins/SoftFloat-3e/source/f32_sqrt.c deleted file mode 100644 index 9263bde59..000000000 --- a/addins/SoftFloat-3e/source/f32_sqrt.c +++ /dev/null @@ -1,121 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_sqrt( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA, uiZ; - struct exp16_sig32 normExpSig; - int_fast16_t expZ; - uint_fast32_t sigZ, shiftedSigZ; - uint32_t negRem; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA ) { - uiZ = softfloat_propagateNaNF32UI( uiA, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x7F)>>1) + 0x7E; - expA &= 1; - sigA = (sigA | 0x00800000)<<8; - sigZ = - ((uint_fast64_t) sigA * softfloat_approxRecipSqrt32_1( expA, sigA )) - >>32; - if ( expA ) sigZ >>= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZ += 2; - if ( (sigZ & 0x3F) < 2 ) { - shiftedSigZ = sigZ>>2; - negRem = shiftedSigZ * shiftedSigZ; - sigZ &= ~3; - if ( negRem & 0x80000000 ) { - sigZ |= 1; - } else { - if ( negRem ) --sigZ; - } - } - return softfloat_roundPackToF32( 0, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_sub.c b/addins/SoftFloat-3e/source/f32_sub.c deleted file mode 100644 index 383484dae..000000000 --- a/addins/SoftFloat-3e/source/f32_sub.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t f32_sub( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float32_t (*magsFuncPtr)( uint_fast32_t, uint_fast32_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF32UI( uiA ^ uiB ) ) { - return softfloat_addMagsF32( uiA, uiB ); - } else { - return softfloat_subMagsF32( uiA, uiB ); - } -#else - magsFuncPtr = - signF32UI( uiA ^ uiB ) ? softfloat_addMagsF32 : softfloat_subMagsF32; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_extF80.c b/addins/SoftFloat-3e/source/f32_to_extF80.c deleted file mode 100644 index 742ed649c..000000000 --- a/addins/SoftFloat-3e/source/f32_to_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f32_to_extF80( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp16_sig32 normExpSig; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3F80 ); - uiZ0 = (uint_fast64_t) (frac | 0x00800000)<<40; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_extF80M.c b/addins/SoftFloat-3e/source/f32_to_extF80M.c deleted file mode 100644 index af7e32a76..000000000 --- a/addins/SoftFloat-3e/source/f32_to_extF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - - *zPtr = f32_to_extF80( a ); - -} - -#else - -void f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - union ui32_f32 uA; - uint32_t uiA; - bool sign; - int_fast16_t exp; - uint32_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ64; - uint32_t uiZ32; - struct exp16_sig32 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zSPtr = (struct extFloat80M *) zPtr; - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ32 = 0x80000000; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ32 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3F80 ); - uiZ32 = 0x80000000 | (uint32_t) frac<<8; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = (uint64_t) uiZ32<<32; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f32_to_f128.c b/addins/SoftFloat-3e/source/f32_to_f128.c deleted file mode 100644 index 6a765a44e..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f128.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f32_to_f128( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - struct exp16_sig32 normExpSig; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - uiZ.v64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ.v0 = 0; - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ.v64 = packToF128UI64( sign, 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ.v64 = packToF128UI64( sign, exp + 0x3F80, (uint_fast64_t) frac<<25 ); - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_f128M.c b/addins/SoftFloat-3e/source/f32_to_f128M.c deleted file mode 100644 index ee7e6b367..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f128M.c +++ /dev/null @@ -1,115 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - - *zPtr = f32_to_f128( a ); - -} - -#else - -void f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - union ui32_f32 uA; - uint32_t uiA; - bool sign; - int_fast16_t exp; - uint32_t frac, uiZ64; - struct commonNaN commonNaN; - uint32_t uiZ96; - struct exp16_sig32 normExpSig; - uint64_t frac64; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = 0; - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac64 = (uint64_t) frac<<25; - uiZ96 = packToF128UI96( sign, exp + 0x3F80, frac64>>32 ); - uiZ64 = frac64; - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f32_to_f16.c b/addins/SoftFloat-3e/source/f32_to_f16.c deleted file mode 100644 index a9e77b775..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f16.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f32_to_f16( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = frac>>9 | ((frac & 0x1FF) != 0); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - return softfloat_roundPackToF16( sign, exp - 0x71, frac16 | 0x4000 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_f64.c b/addins/SoftFloat-3e/source/f32_to_f64.c deleted file mode 100644 index 4f97519e8..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f64.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f32_to_f64( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - struct exp16_sig32 normExpSig; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = packToF64UI( sign, exp + 0x380, (uint_fast64_t) frac<<29 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_i32.c b/addins/SoftFloat-3e/source/f32_to_i32.c deleted file mode 100644 index 7d0356fbe..000000000 --- a/addins/SoftFloat-3e/source/f32_to_i32.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f32_to_i32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - uint_fast64_t sig64; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0xFF) && sig ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<32; - shiftDist = 0xAA - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_i32_r_minMag.c deleted file mode 100644 index 7652f2ebb..000000000 --- a/addins/SoftFloat-3e/source/f32_to_i32_r_minMag.c +++ /dev/null @@ -1,89 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f32_to_i32_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x9E - exp; - if ( 32 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( shiftDist <= 0 ) { - if ( uiA == packToF32UI( 1, 0x9E, 0 ) ) return -0x7FFFFFFF - 1; - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig | 0x00800000)<<8; - absZ = sig>>shiftDist; - if ( exact && ((uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f32_to_i64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - uint_fast64_t sig64, extra; - struct uint64_extra sig64Extra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; -#ifdef SOFTFLOAT_FAST_INT64 - sig64 = (uint_fast64_t) sig<<40; - extra = 0; - if ( shiftDist ) { - sig64Extra = softfloat_shiftRightJam64Extra( sig64, 0, shiftDist ); - sig64 = sig64Extra.v; - extra = sig64Extra.extra; - } - return softfloat_roundToI64( sign, sig64, extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 2 )] = sig<<8; - extSig[indexWord( 3, 1 )] = 0; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToI64( sign, extSig, roundingMode, exact ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_i64_r_minMag.c deleted file mode 100644 index 397ddf6d0..000000000 --- a/addins/SoftFloat-3e/source/f32_to_i64_r_minMag.c +++ /dev/null @@ -1,94 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f32_to_i64_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast64_t sig64; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( shiftDist <= 0 ) { - if ( uiA == packToF32UI( 1, 0xBE, 0 ) ) { - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<40; - absZ = sig64>>shiftDist; - shiftDist = 40 - shiftDist; - if ( exact && (shiftDist < 0) && (uint32_t) (sig<<(shiftDist & 31)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sign ? -absZ : absZ; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_ui32.c b/addins/SoftFloat-3e/source/f32_to_ui32.c deleted file mode 100644 index cb47d9458..000000000 --- a/addins/SoftFloat-3e/source/f32_to_ui32.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f32_to_ui32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - uint_fast64_t sig64; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0xFF) && sig ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<32; - shiftDist = 0xAA - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToUI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_ui32_r_minMag.c deleted file mode 100644 index cdeb75f9f..000000000 --- a/addins/SoftFloat-3e/source/f32_to_ui32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f32_to_ui32_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x9E - exp; - if ( 32 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( sign || (shiftDist < 0) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig | 0x00800000)<<8; - z = sig>>shiftDist; - if ( exact && (z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f32_to_ui64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - uint_fast64_t sig64, extra; - struct uint64_extra sig64Extra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; -#ifdef SOFTFLOAT_FAST_INT64 - sig64 = (uint_fast64_t) sig<<40; - extra = 0; - if ( shiftDist ) { - sig64Extra = softfloat_shiftRightJam64Extra( sig64, 0, shiftDist ); - sig64 = sig64Extra.v; - extra = sig64Extra.extra; - } - return softfloat_roundToUI64( sign, sig64, extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 2 )] = sig<<8; - extSig[indexWord( 3, 1 )] = 0; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_ui64_r_minMag.c deleted file mode 100644 index c0fe54f6e..000000000 --- a/addins/SoftFloat-3e/source/f32_to_ui64_r_minMag.c +++ /dev/null @@ -1,90 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f32_to_ui64_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast64_t sig64, z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( sign || (shiftDist < 0) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<40; - z = sig64>>shiftDist; - shiftDist = 40 - shiftDist; - if ( exact && (shiftDist < 0) && (uint32_t) (sig<<(shiftDist & 31)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - -} - diff --git a/addins/SoftFloat-3e/source/f64_add.c b/addins/SoftFloat-3e/source/f64_add.c deleted file mode 100644 index 42f840dc5..000000000 --- a/addins/SoftFloat-3e/source/f64_add.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t f64_add( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float64_t (*magsFuncPtr)( uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_addMagsF64( uiA, uiB, signA ); - } else { - return softfloat_subMagsF64( uiA, uiB, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsF64 : softfloat_subMagsF64; - return (*magsFuncPtr)( uiA, uiB, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f64_div.c b/addins/SoftFloat-3e/source/f64_div.c deleted file mode 100644 index 9c967bb74..000000000 --- a/addins/SoftFloat-3e/source/f64_div.c +++ /dev/null @@ -1,172 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_div( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; - int_fast16_t expB; - uint_fast64_t sigB; - bool signZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - uint32_t recip32, sig32Z, doubleTerm; - uint_fast64_t rem; - uint32_t q; - uint_fast64_t sigZ; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA ) goto propagateNaN; - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) { - if ( ! (expA | sigA) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FE; - sigA |= UINT64_C( 0x0010000000000000 ); - sigB |= UINT64_C( 0x0010000000000000 ); - if ( sigA < sigB ) { - --expZ; - sigA <<= 11; - } else { - sigA <<= 10; - } - sigB <<= 11; - recip32 = softfloat_approxRecip32_1( sigB>>32 ) - 2; - sig32Z = ((uint32_t) (sigA>>32) * (uint_fast64_t) recip32)>>32; - doubleTerm = sig32Z<<1; - rem = - ((sigA - (uint_fast64_t) doubleTerm * (uint32_t) (sigB>>32))<<28) - - (uint_fast64_t) doubleTerm * ((uint32_t) sigB>>4); - q = (((uint32_t) (rem>>32) * (uint_fast64_t) recip32)>>32) + 4; - sigZ = ((uint_fast64_t) sig32Z<<32) + ((uint_fast64_t) q<<4); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (sigZ & 0x1FF) < 4<<4 ) { - q &= ~7; - sigZ &= ~(uint_fast64_t) 0x7F; - doubleTerm = q<<1; - rem = - ((rem - (uint_fast64_t) doubleTerm * (uint32_t) (sigB>>32))<<28) - - (uint_fast64_t) doubleTerm * ((uint32_t) sigB>>4); - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - sigZ -= 1<<7; - } else { - if ( rem ) sigZ |= 1; - } - } - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF64UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_eq.c b/addins/SoftFloat-3e/source/f64_eq.c deleted file mode 100644 index 360200379..000000000 --- a/addins/SoftFloat-3e/source/f64_eq.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_eq( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - if ( - softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return (uiA == uiB) || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )); - -} - diff --git a/addins/SoftFloat-3e/source/f64_eq_signaling.c b/addins/SoftFloat-3e/source/f64_eq_signaling.c deleted file mode 100644 index 5daa17937..000000000 --- a/addins/SoftFloat-3e/source/f64_eq_signaling.c +++ /dev/null @@ -1,61 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f64_eq_signaling( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return (uiA == uiB) || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )); - -} - diff --git a/addins/SoftFloat-3e/source/f64_isSignalingNaN.c b/addins/SoftFloat-3e/source/f64_isSignalingNaN.c deleted file mode 100644 index e5d38321e..000000000 --- a/addins/SoftFloat-3e/source/f64_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_isSignalingNaN( float64_t a ) -{ - union ui64_f64 uA; - - uA.f = a; - return softfloat_isSigNaNF64UI( uA.ui ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_le.c b/addins/SoftFloat-3e/source/f64_le.c deleted file mode 100644 index 0b43d0467..000000000 --- a/addins/SoftFloat-3e/source/f64_le.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f64_le( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_le_quiet.c b/addins/SoftFloat-3e/source/f64_le_quiet.c deleted file mode 100644 index 832eee7a7..000000000 --- a/addins/SoftFloat-3e/source/f64_le_quiet.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_le_quiet( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - if ( - softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_lt.c b/addins/SoftFloat-3e/source/f64_lt.c deleted file mode 100644 index 49ee05be0..000000000 --- a/addins/SoftFloat-3e/source/f64_lt.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f64_lt( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA && ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_lt_quiet.c b/addins/SoftFloat-3e/source/f64_lt_quiet.c deleted file mode 100644 index d64088054..000000000 --- a/addins/SoftFloat-3e/source/f64_lt_quiet.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_lt_quiet( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - if ( - softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA && ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_mul.c b/addins/SoftFloat-3e/source/f64_mul.c deleted file mode 100644 index 222e91dce..000000000 --- a/addins/SoftFloat-3e/source/f64_mul.c +++ /dev/null @@ -1,150 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_mul( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; - int_fast16_t expB; - uint_fast64_t sigB; - bool signZ; - uint_fast64_t magBits; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; -#ifdef SOFTFLOAT_FAST_INT64 - struct uint128 sig128Z; -#else - uint32_t sig128Z[4]; -#endif - uint_fast64_t sigZ, uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN; - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FF; - sigA = (sigA | UINT64_C( 0x0010000000000000 ))<<10; - sigB = (sigB | UINT64_C( 0x0010000000000000 ))<<11; -#ifdef SOFTFLOAT_FAST_INT64 - sig128Z = softfloat_mul64To128( sigA, sigB ); - sigZ = sig128Z.v64 | (sig128Z.v0 != 0); -#else - softfloat_mul64To128M( sigA, sigB, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 | sig128Z[indexWord( 4, 2 )]; - if ( sig128Z[indexWord( 4, 1 )] || sig128Z[indexWord( 4, 0 )] ) sigZ |= 1; -#endif - if ( sigZ < UINT64_C( 0x4000000000000000 ) ) { - --expZ; - sigZ <<= 1; - } - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - } else { - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF64UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_mulAdd.c b/addins/SoftFloat-3e/source/f64_mulAdd.c deleted file mode 100644 index fea3d968b..000000000 --- a/addins/SoftFloat-3e/source/f64_mulAdd.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t f64_mulAdd( float64_t a, float64_t b, float64_t c ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - union ui64_f64 uC; - uint_fast64_t uiC; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - uC.f = c; - uiC = uC.ui; - return softfloat_mulAddF64( uiA, uiB, uiC, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_rem.c b/addins/SoftFloat-3e/source/f64_rem.c deleted file mode 100644 index ffce679aa..000000000 --- a/addins/SoftFloat-3e/source/f64_rem.c +++ /dev/null @@ -1,189 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_rem( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - union ui64_f64 uB; - uint_fast64_t uiB; - int_fast16_t expB; - uint_fast64_t sigB; - struct exp16_sig64 normExpSig; - uint64_t rem; - int_fast16_t expDiff; - uint32_t q, recip32; - uint_fast64_t q64; - uint64_t altRem, meanRem; - bool signRem; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN; - goto invalid; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA < expB - 1 ) return a; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - rem = sigA | UINT64_C( 0x0010000000000000 ); - sigB |= UINT64_C( 0x0010000000000000 ); - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - sigB <<= 9; - if ( expDiff ) { - rem <<= 8; - q = 0; - } else { - rem <<= 9; - q = (sigB <= rem); - if ( q ) rem -= sigB; - } - } else { - recip32 = softfloat_approxRecip32_1( sigB>>21 ); - /*-------------------------------------------------------------------- - | Changing the shift of `rem' here requires also changing the initial - | subtraction from `expDiff'. - *--------------------------------------------------------------------*/ - rem <<= 9; - expDiff -= 30; - /*-------------------------------------------------------------------- - | The scale of `sigB' affects how many bits are obtained during each - | cycle of the loop. Currently this is 29 bits per loop iteration, - | the maximum possible. - *--------------------------------------------------------------------*/ - sigB <<= 9; - for (;;) { - q64 = (uint32_t) (rem>>32) * (uint_fast64_t) recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; -#ifdef SOFTFLOAT_FAST_INT64 - rem <<= 29; -#else - rem = (uint_fast64_t) (uint32_t) (rem>>3)<<32; -#endif - rem -= q * (uint64_t) sigB; - if ( rem & UINT64_C( 0x8000000000000000 ) ) rem += sigB; - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - rem = (rem<<(expDiff + 30)) - q * (uint64_t) sigB; - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - altRem = rem + sigB; - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem -= sigB; - } while ( ! (rem & UINT64_C( 0x8000000000000000 )) ); - selectRem: - meanRem = rem + altRem; - if ( - (meanRem & UINT64_C( 0x8000000000000000 )) || (! meanRem && (q & 1)) - ) { - rem = altRem; - } - signRem = signA; - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - signRem = ! signRem; - rem = -rem; - } - return softfloat_normRoundPackToF64( signRem, expB, rem ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto uiZ; - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_roundToInt.c b/addins/SoftFloat-3e/source/f64_roundToInt.c deleted file mode 100644 index 54e7b0542..000000000 --- a/addins/SoftFloat-3e/source/f64_roundToInt.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_roundToInt( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t uiZ, lastBitMask, roundBitsMask; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0x3FE ) { - if ( !(uiA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ = uiA & packToF64UI( 1, 0, 0 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF64UI( uiA ) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FE ) uiZ |= packToF64UI( 0, 0x3FF, 0 ); - break; - case softfloat_round_min: - if ( uiZ ) uiZ = packToF64UI( 1, 0x3FF, 0 ); - break; - case softfloat_round_max: - if ( !uiZ ) uiZ = packToF64UI( 0, 0x3FF, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ |= packToF64UI( 0, 0x3FF, 0 ); - break; -#endif - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x433 <= exp ) { - if ( (exp == 0x7FF) && fracF64UI( uiA ) ) { - uiZ = softfloat_propagateNaNF64UI( uiA, 0 ); - goto uiZ; - } - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = uiA; - lastBitMask = (uint_fast64_t) 1<<(0x433 - exp); - roundBitsMask = lastBitMask - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ += lastBitMask>>1; - if ( !(uiZ & roundBitsMask) ) uiZ &= ~lastBitMask; - } else if ( - roundingMode - == (signF64UI( uiZ ) ? softfloat_round_min : softfloat_round_max) - ) { - uiZ += roundBitsMask; - } - uiZ &= ~roundBitsMask; - if ( uiZ != uiA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) uiZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_sqrt.c b/addins/SoftFloat-3e/source/f64_sqrt.c deleted file mode 100644 index f9f226b69..000000000 --- a/addins/SoftFloat-3e/source/f64_sqrt.c +++ /dev/null @@ -1,133 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_sqrt( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA, uiZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - uint32_t sig32A, recipSqrt32, sig32Z; - uint_fast64_t rem; - uint32_t q; - uint_fast64_t sigZ, shiftedSigZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA ) { - uiZ = softfloat_propagateNaNF64UI( uiA, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FF)>>1) + 0x3FE; - expA &= 1; - sigA |= UINT64_C( 0x0010000000000000 ); - sig32A = sigA>>21; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint_fast64_t) sig32A * recipSqrt32)>>32; - if ( expA ) { - sigA <<= 8; - sig32Z >>= 1; - } else { - sigA <<= 9; - } - rem = sigA - (uint_fast64_t) sig32Z * sig32Z; - q = ((uint32_t) (rem>>2) * (uint_fast64_t) recipSqrt32)>>32; - sigZ = ((uint_fast64_t) sig32Z<<32 | 1<<5) + ((uint_fast64_t) q<<3); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (sigZ & 0x1FF) < 0x22 ) { - sigZ &= ~(uint_fast64_t) 0x3F; - shiftedSigZ = sigZ>>6; - rem = (sigA<<52) - shiftedSigZ * shiftedSigZ; - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - --sigZ; - } else { - if ( rem ) sigZ |= 1; - } - } - return softfloat_roundPackToF64( 0, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_sub.c b/addins/SoftFloat-3e/source/f64_sub.c deleted file mode 100644 index b5ccb882b..000000000 --- a/addins/SoftFloat-3e/source/f64_sub.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t f64_sub( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float64_t (*magsFuncPtr)( uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_subMagsF64( uiA, uiB, signA ); - } else { - return softfloat_addMagsF64( uiA, uiB, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsF64 : softfloat_addMagsF64; - return (*magsFuncPtr)( uiA, uiB, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_extF80.c b/addins/SoftFloat-3e/source/f64_to_extF80.c deleted file mode 100644 index 2799d9b07..000000000 --- a/addins/SoftFloat-3e/source/f64_to_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f64_to_extF80( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp16_sig64 normExpSig; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3C00 ); - uiZ0 = (frac | UINT64_C( 0x0010000000000000 ))<<11; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_extF80M.c b/addins/SoftFloat-3e/source/f64_to_extF80M.c deleted file mode 100644 index a2e67e46f..000000000 --- a/addins/SoftFloat-3e/source/f64_to_extF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - - *zPtr = f64_to_extF80( a ); - -} - -#else - -void f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - union ui64_f64 uA; - uint64_t uiA; - bool sign; - int_fast16_t exp; - uint64_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ64; - uint64_t uiZ0; - struct exp16_sig64 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zSPtr = (struct extFloat80M *) zPtr; - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3C00 ); - uiZ0 = UINT64_C( 0x8000000000000000 ) | frac<<11; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f64_to_f128.c b/addins/SoftFloat-3e/source/f64_to_f128.c deleted file mode 100644 index 60af3b0be..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f128.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f64_to_f128( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - struct exp16_sig64 normExpSig; - struct uint128 frac128; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - uiZ.v64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ.v0 = 0; - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ.v64 = packToF128UI64( sign, 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac128 = softfloat_shortShiftLeft128( 0, frac, 60 ); - uiZ.v64 = packToF128UI64( sign, exp + 0x3C00, frac128.v64 ); - uiZ.v0 = frac128.v0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_f128M.c b/addins/SoftFloat-3e/source/f64_to_f128M.c deleted file mode 100644 index fbc451537..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f128M.c +++ /dev/null @@ -1,117 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - - *zPtr = f64_to_f128( a ); - -} - -#else - -void f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - union ui64_f64 uA; - uint64_t uiA; - bool sign; - int_fast16_t exp; - uint64_t frac; - struct commonNaN commonNaN; - uint32_t uiZ96; - struct exp16_sig64 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 0 )] = 0; - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 1 )] = (uint32_t) frac<<28; - frac >>= 4; - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, exp + 0x3C00, frac>>32 ); - zWPtr[indexWord( 4, 2 )] = frac; - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f64_to_f16.c b/addins/SoftFloat-3e/source/f64_to_f16.c deleted file mode 100644 index 121e3062a..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f16.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f64_to_f16( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = softfloat_shortShiftRightJam64( frac, 38 ); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - return softfloat_roundPackToF16( sign, exp - 0x3F1, frac16 | 0x4000 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_f32.c b/addins/SoftFloat-3e/source/f64_to_f32.c deleted file mode 100644 index a18106556..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f32.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f64_to_f32( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - uint_fast32_t uiZ, frac32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = softfloat_shortShiftRightJam64( frac, 22 ); - if ( ! (exp | frac32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - return softfloat_roundPackToF32( sign, exp - 0x381, frac32 | 0x40000000 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_i32.c b/addins/SoftFloat-3e/source/f64_to_i32.c deleted file mode 100644 index 8d9785b0b..000000000 --- a/addins/SoftFloat-3e/source/f64_to_i32.c +++ /dev/null @@ -1,82 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f64_to_i32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FF) && sig ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x427 - exp; - if ( 0 < shiftDist ) sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_i32_r_minMag.c deleted file mode 100644 index 8b7a91f1c..000000000 --- a/addins/SoftFloat-3e/source/f64_to_i32_r_minMag.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f64_to_i32_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF64UI( uiA ); - if ( shiftDist < 22 ) { - if ( - sign && (exp == 0x41E) && (sig < UINT64_C( 0x0000000000200000 )) - ) { - if ( exact && sig ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -0x7FFFFFFF - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - absZ = sig>>shiftDist; - if ( exact && ((uint_fast64_t) (uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f64_to_i64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - struct uint64_extra sigExtra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x433 - exp; -#ifdef SOFTFLOAT_FAST_INT64 - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sigExtra.v = sig<<-shiftDist; - sigExtra.extra = 0; - } else { - sigExtra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - } - return - softfloat_roundToI64( - sign, sigExtra.v, sigExtra.extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sig <<= -shiftDist; - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - } else { - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - } - return softfloat_roundMToI64( sign, extSig, roundingMode, exact ); -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && fracF64UI( uiA ) ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_i64_r_minMag.c deleted file mode 100644 index 56c6a1010..000000000 --- a/addins/SoftFloat-3e/source/f64_to_i64_r_minMag.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f64_to_i64_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -10 ) { - if ( uiA == packToF64UI( 1, 0x43E, 0 ) ) { - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - absZ = sig<<-shiftDist; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - absZ = sig>>shiftDist; - if ( exact && (absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f64_to_ui32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FF) && sig ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x427 - exp; - if ( 0 < shiftDist ) sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToUI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_ui32_r_minMag.c deleted file mode 100644 index 6e3d14e8f..000000000 --- a/addins/SoftFloat-3e/source/f64_to_ui32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f64_to_ui32_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF64UI( uiA ); - if ( sign || (shiftDist < 21) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - z = sig>>shiftDist; - if ( exact && ((uint_fast64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f64_to_ui64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - struct uint64_extra sigExtra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x433 - exp; -#ifdef SOFTFLOAT_FAST_INT64 - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sigExtra.v = sig<<-shiftDist; - sigExtra.extra = 0; - } else { - sigExtra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - } - return - softfloat_roundToUI64( - sign, sigExtra.v, sigExtra.extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sig <<= -shiftDist; - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - } else { - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - } - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && fracF64UI( uiA ) ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_ui64_r_minMag.c deleted file mode 100644 index 87eb0d05c..000000000 --- a/addins/SoftFloat-3e/source/f64_to_ui64_r_minMag.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f64_to_ui64_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF64UI( uiA ); - if ( sign ) goto invalid; - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - z = (sig | UINT64_C( 0x0010000000000000 ))<<-shiftDist; - } else { - sig |= UINT64_C( 0x0010000000000000 ); - z = sig>>shiftDist; - if ( exact && (uint64_t) (sig<<(-shiftDist & 63)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/i32_to_extF80.c b/addins/SoftFloat-3e/source/i32_to_extF80.c deleted file mode 100644 index 8036fa9f1..000000000 --- a/addins/SoftFloat-3e/source/i32_to_extF80.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t i32_to_extF80( int32_t a ) -{ - uint_fast16_t uiZ64; - uint_fast32_t absA; - bool sign; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - absA = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ); - uiZ64 = packToExtF80UI64( sign, 0x401E - shiftDist ); - absA <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = (uint_fast64_t) absA<<32; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/i32_to_extF80M.c b/addins/SoftFloat-3e/source/i32_to_extF80M.c deleted file mode 100644 index 6d5431c1c..000000000 --- a/addins/SoftFloat-3e/source/i32_to_extF80M.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - - *zPtr = i32_to_extF80( a ); - -} - -#else - -void i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - bool sign; - uint32_t absA; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint32_t) a : (uint32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ); - uiZ64 = packToExtF80UI64( sign, 0x401E - shiftDist ); - sigZ = (uint64_t) (absA<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i32_to_f128.c b/addins/SoftFloat-3e/source/i32_to_f128.c deleted file mode 100644 index a7d55cba4..000000000 --- a/addins/SoftFloat-3e/source/i32_to_f128.c +++ /dev/null @@ -1,64 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t i32_to_f128( int32_t a ) -{ - uint_fast64_t uiZ64; - bool sign; - uint_fast32_t absA; - int_fast8_t shiftDist; - union ui128_f128 uZ; - - uiZ64 = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) + 17; - uiZ64 = - packToF128UI64( - sign, 0x402E - shiftDist, (uint_fast64_t) absA< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - - *zPtr = i32_to_f128( a ); - -} - -#else - -void i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - uint32_t uiZ96, uiZ64; - bool sign; - uint32_t absA; - int_fast8_t shiftDist; - uint64_t normAbsA; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint32_t) a : (uint32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) + 17; - normAbsA = (uint64_t) absA<>32 ); - uiZ64 = normAbsA; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i32_to_f16.c b/addins/SoftFloat-3e/source/i32_to_f16.c deleted file mode 100644 index d3117248a..000000000 --- a/addins/SoftFloat-3e/source/i32_to_f16.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t i32_to_f16( int32_t a ) -{ - bool sign; - uint_fast32_t absA; - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) - 21; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - sign, 0x18 - shiftDist, (uint_fast16_t) absA<>(-shiftDist) - | ((uint32_t) (absA<<(shiftDist & 31)) != 0) - : (uint_fast16_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t i32_to_f32( int32_t a ) -{ - bool sign; - union ui32_f32 uZ; - uint_fast32_t absA; - - sign = (a < 0); - if ( ! (a & 0x7FFFFFFF) ) { - uZ.ui = sign ? packToF32UI( 1, 0x9E, 0 ) : 0; - return uZ.f; - } - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - return softfloat_normRoundPackToF32( sign, 0x9C, absA ); - -} - diff --git a/addins/SoftFloat-3e/source/i32_to_f64.c b/addins/SoftFloat-3e/source/i32_to_f64.c deleted file mode 100644 index 24feda542..000000000 --- a/addins/SoftFloat-3e/source/i32_to_f64.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t i32_to_f64( int32_t a ) -{ - uint_fast64_t uiZ; - bool sign; - uint_fast32_t absA; - int_fast8_t shiftDist; - union ui64_f64 uZ; - - if ( ! a ) { - uiZ = 0; - } else { - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) + 21; - uiZ = - packToF64UI( - sign, 0x432 - shiftDist, (uint_fast64_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t i64_to_extF80( int64_t a ) -{ - uint_fast16_t uiZ64; - uint_fast64_t absA; - bool sign; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - absA = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ); - uiZ64 = packToExtF80UI64( sign, 0x403E - shiftDist ); - absA <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = absA; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/i64_to_extF80M.c b/addins/SoftFloat-3e/source/i64_to_extF80M.c deleted file mode 100644 index 4838dde6d..000000000 --- a/addins/SoftFloat-3e/source/i64_to_extF80M.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - - *zPtr = i64_to_extF80( a ); - -} - -#else - -void i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - bool sign; - uint64_t absA; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint64_t) a : (uint64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ); - uiZ64 = packToExtF80UI64( sign, 0x403E - shiftDist ); - sigZ = absA<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i64_to_f128.c b/addins/SoftFloat-3e/source/i64_to_f128.c deleted file mode 100644 index fcb017939..000000000 --- a/addins/SoftFloat-3e/source/i64_to_f128.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t i64_to_f128( int64_t a ) -{ - uint_fast64_t uiZ64, uiZ0; - bool sign; - uint_fast64_t absA; - int_fast8_t shiftDist; - struct uint128 zSig; - union ui128_f128 uZ; - - if ( ! a ) { - uiZ64 = 0; - uiZ0 = 0; - } else { - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) + 49; - if ( 64 <= shiftDist ) { - zSig.v64 = absA<<(shiftDist - 64); - zSig.v0 = 0; - } else { - zSig = softfloat_shortShiftLeft128( 0, absA, shiftDist ); - } - uiZ64 = packToF128UI64( sign, 0x406E - shiftDist, zSig.v64 ); - uiZ0 = zSig.v0; - } - uZ.ui.v64 = uiZ64; - uZ.ui.v0 = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/i64_to_f128M.c b/addins/SoftFloat-3e/source/i64_to_f128M.c deleted file mode 100644 index 0a04eb8d0..000000000 --- a/addins/SoftFloat-3e/source/i64_to_f128M.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - - *zPtr = i64_to_f128( a ); - -} - -#else - -void i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - uint32_t uiZ96, uiZ64; - bool sign; - uint64_t absA; - uint_fast8_t shiftDist; - uint32_t *ptr; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint64_t) a : (uint64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) + 17; - if ( shiftDist < 32 ) { - ptr = zWPtr + indexMultiwordHi( 4, 3 ); - ptr[indexWord( 3, 2 )] = 0; - ptr[indexWord( 3, 1 )] = absA>>32; - ptr[indexWord( 3, 0 )] = absA; - softfloat_shortShiftLeft96M( ptr, shiftDist, ptr ); - ptr[indexWordHi( 3 )] = - packToF128UI96( - sign, 0x404E - shiftDist, ptr[indexWordHi( 3 )] ); - return; - } - absA <<= shiftDist - 32; - uiZ96 = packToF128UI96( sign, 0x404E - shiftDist, absA>>32 ); - uiZ64 = absA; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i64_to_f16.c b/addins/SoftFloat-3e/source/i64_to_f16.c deleted file mode 100644 index cef7b6133..000000000 --- a/addins/SoftFloat-3e/source/i64_to_f16.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t i64_to_f16( int64_t a ) -{ - bool sign; - uint_fast64_t absA; - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) - 53; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - sign, 0x18 - shiftDist, (uint_fast16_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t i64_to_f32( int64_t a ) -{ - bool sign; - uint_fast64_t absA; - int_fast8_t shiftDist; - union ui32_f32 u; - uint_fast32_t sig; - - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) - 40; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF32UI( - sign, 0x95 - shiftDist, (uint_fast32_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t i64_to_f64( int64_t a ) -{ - bool sign; - union ui64_f64 uZ; - uint_fast64_t absA; - - sign = (a < 0); - if ( ! (a & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) { - uZ.ui = sign ? packToF64UI( 1, 0x43E, 0 ) : 0; - return uZ.f; - } - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - return softfloat_normRoundPackToF64( sign, 0x43C, absA ); - -} - diff --git a/addins/SoftFloat-3e/source/include/internals.h b/addins/SoftFloat-3e/source/include/internals.h deleted file mode 100644 index 020b3402f..000000000 --- a/addins/SoftFloat-3e/source/include/internals.h +++ /dev/null @@ -1,278 +0,0 @@ - -/*============================================================================ - -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, 2017 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 internals_h -#define internals_h 1 - -#include -#include -#include "primitives.h" -#include "softfloat_types.h" - -union ui16_f16 { uint16_t ui; float16_t f; }; -union ui32_f32 { uint32_t ui; float32_t f; }; -union ui64_f64 { uint64_t ui; float64_t f; }; - -#ifdef SOFTFLOAT_FAST_INT64 -union extF80M_extF80 { struct extFloat80M fM; extFloat80_t f; }; -union ui128_f128 { struct uint128 ui; float128_t f; }; -#endif - -enum { - softfloat_mulAdd_subC = 1, - softfloat_mulAdd_subProd = 2 -}; - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_roundToUI32( bool, uint_fast64_t, uint_fast8_t, bool ); - -#ifdef SOFTFLOAT_FAST_INT64 -uint_fast64_t - softfloat_roundToUI64( - bool, uint_fast64_t, uint_fast64_t, uint_fast8_t, bool ); -#else -uint_fast64_t softfloat_roundMToUI64( bool, uint32_t *, uint_fast8_t, bool ); -#endif - -int_fast32_t softfloat_roundToI32( bool, uint_fast64_t, uint_fast8_t, bool ); - -#ifdef SOFTFLOAT_FAST_INT64 -int_fast64_t - softfloat_roundToI64( - bool, uint_fast64_t, uint_fast64_t, uint_fast8_t, bool ); -#else -int_fast64_t softfloat_roundMToI64( bool, uint32_t *, uint_fast8_t, bool ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF16UI( a ) ((bool) ((uint16_t) (a)>>15)) -#define expF16UI( a ) ((int_fast8_t) ((a)>>10) & 0x1F) -#define fracF16UI( a ) ((a) & 0x03FF) -#define packToF16UI( sign, exp, sig ) (((uint16_t) (sign)<<15) + ((uint16_t) (exp)<<10) + (sig)) - -#define isNaNF16UI( a ) (((~(a) & 0x7C00) == 0) && ((a) & 0x03FF)) - -struct exp8_sig16 { int_fast8_t exp; uint_fast16_t sig; }; -struct exp8_sig16 softfloat_normSubnormalF16Sig( uint_fast16_t ); - -float16_t softfloat_roundPackToF16( bool, int_fast16_t, uint_fast16_t ); -float16_t softfloat_normRoundPackToF16( bool, int_fast16_t, uint_fast16_t ); - -float16_t softfloat_addMagsF16( uint_fast16_t, uint_fast16_t ); -float16_t softfloat_subMagsF16( uint_fast16_t, uint_fast16_t ); -float16_t - softfloat_mulAddF16( - uint_fast16_t, uint_fast16_t, uint_fast16_t, uint_fast8_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF32UI( a ) ((bool) ((uint32_t) (a)>>31)) -#define expF32UI( a ) ((int_fast16_t) ((a)>>23) & 0xFF) -#define fracF32UI( a ) ((a) & 0x007FFFFF) -#define packToF32UI( sign, exp, sig ) (((uint32_t) (sign)<<31) + ((uint32_t) (exp)<<23) + (sig)) - -#define isNaNF32UI( a ) (((~(a) & 0x7F800000) == 0) && ((a) & 0x007FFFFF)) - -struct exp16_sig32 { int_fast16_t exp; uint_fast32_t sig; }; -struct exp16_sig32 softfloat_normSubnormalF32Sig( uint_fast32_t ); - -float32_t softfloat_roundPackToF32( bool, int_fast16_t, uint_fast32_t ); -float32_t softfloat_normRoundPackToF32( bool, int_fast16_t, uint_fast32_t ); - -float32_t softfloat_addMagsF32( uint_fast32_t, uint_fast32_t ); -float32_t softfloat_subMagsF32( uint_fast32_t, uint_fast32_t ); -float32_t - softfloat_mulAddF32( - uint_fast32_t, uint_fast32_t, uint_fast32_t, uint_fast8_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF64UI( a ) ((bool) ((uint64_t) (a)>>63)) -#define expF64UI( a ) ((int_fast16_t) ((a)>>52) & 0x7FF) -#define fracF64UI( a ) ((a) & UINT64_C( 0x000FFFFFFFFFFFFF )) -#define packToF64UI( sign, exp, sig ) ((uint64_t) (((uint_fast64_t) (sign)<<63) + ((uint_fast64_t) (exp)<<52) + (sig))) - -#define isNaNF64UI( a ) (((~(a) & UINT64_C( 0x7FF0000000000000 )) == 0) && ((a) & UINT64_C( 0x000FFFFFFFFFFFFF ))) - -struct exp16_sig64 { int_fast16_t exp; uint_fast64_t sig; }; -struct exp16_sig64 softfloat_normSubnormalF64Sig( uint_fast64_t ); - -float64_t softfloat_roundPackToF64( bool, int_fast16_t, uint_fast64_t ); -float64_t softfloat_normRoundPackToF64( bool, int_fast16_t, uint_fast64_t ); - -float64_t softfloat_addMagsF64( uint_fast64_t, uint_fast64_t, bool ); -float64_t softfloat_subMagsF64( uint_fast64_t, uint_fast64_t, bool ); -float64_t - softfloat_mulAddF64( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast8_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signExtF80UI64( a64 ) ((bool) ((uint16_t) (a64)>>15)) -#define expExtF80UI64( a64 ) ((a64) & 0x7FFF) -#define packToExtF80UI64( sign, exp ) ((uint_fast16_t) (sign)<<15 | (exp)) - -#define isNaNExtF80UI( a64, a0 ) ((((a64) & 0x7FFF) == 0x7FFF) && ((a0) & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -struct exp32_sig64 { int_fast32_t exp; uint64_t sig; }; -struct exp32_sig64 softfloat_normSubnormalExtF80Sig( uint_fast64_t ); - -extFloat80_t - softfloat_roundPackToExtF80( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t, uint_fast8_t ); -extFloat80_t - softfloat_normRoundPackToExtF80( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t, uint_fast8_t ); - -extFloat80_t - softfloat_addMagsExtF80( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -extFloat80_t - softfloat_subMagsExtF80( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF128UI64( a64 ) ((bool) ((uint64_t) (a64)>>63)) -#define expF128UI64( a64 ) ((int_fast32_t) ((a64)>>48) & 0x7FFF) -#define fracF128UI64( a64 ) ((a64) & UINT64_C( 0x0000FFFFFFFFFFFF )) -#define packToF128UI64( sign, exp, sig64 ) (((uint_fast64_t) (sign)<<63) + ((uint_fast64_t) (exp)<<48) + (sig64)) - -#define isNaNF128UI( a64, a0 ) (((~(a64) & UINT64_C( 0x7FFF000000000000 )) == 0) && (a0 || ((a64) & UINT64_C( 0x0000FFFFFFFFFFFF )))) - -struct exp32_sig128 { int_fast32_t exp; struct uint128 sig; }; -struct exp32_sig128 - softfloat_normSubnormalF128Sig( uint_fast64_t, uint_fast64_t ); - -float128_t - softfloat_roundPackToF128( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t, uint_fast64_t ); -float128_t - softfloat_normRoundPackToF128( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t ); - -float128_t - softfloat_addMagsF128( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -float128_t - softfloat_subMagsF128( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -float128_t - softfloat_mulAddF128( - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast8_t - ); - -#else - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -bool - softfloat_tryPropagateNaNExtF80M( - const struct extFloat80M *, - const struct extFloat80M *, - struct extFloat80M * - ); -void softfloat_invalidExtF80M( struct extFloat80M * ); - -int softfloat_normExtF80SigM( uint64_t * ); - -void - softfloat_roundPackMToExtF80M( - bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M * ); -void - softfloat_normRoundPackMToExtF80M( - bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M * ); - -void - softfloat_addExtF80M( - const struct extFloat80M *, - const struct extFloat80M *, - struct extFloat80M *, - bool - ); - -int - softfloat_compareNonnormExtF80M( - const struct extFloat80M *, const struct extFloat80M * ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF128UI96( a96 ) ((bool) ((uint32_t) (a96)>>31)) -#define expF128UI96( a96 ) ((int32_t) ((a96)>>16) & 0x7FFF) -#define fracF128UI96( a96 ) ((a96) & 0x0000FFFF) -#define packToF128UI96( sign, exp, sig96 ) (((uint32_t) (sign)<<31) + ((uint32_t) (exp)<<16) + (sig96)) - -bool softfloat_isNaNF128M( const uint32_t * ); - -bool - softfloat_tryPropagateNaNF128M( - const uint32_t *, const uint32_t *, uint32_t * ); -void softfloat_invalidF128M( uint32_t * ); - -int softfloat_shiftNormSigF128M( const uint32_t *, uint_fast8_t, uint32_t * ); - -void softfloat_roundPackMToF128M( bool, int32_t, uint32_t *, uint32_t * ); -void softfloat_normRoundPackMToF128M( bool, int32_t, uint32_t *, uint32_t * ); - -void - softfloat_addF128M( const uint32_t *, const uint32_t *, uint32_t *, bool ); -void - softfloat_mulAddF128M( - const uint32_t *, - const uint32_t *, - const uint32_t *, - uint32_t *, - uint_fast8_t - ); - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/opts-GCC.h b/addins/SoftFloat-3e/source/include/opts-GCC.h deleted file mode 100644 index 18c1523e9..000000000 --- a/addins/SoftFloat-3e/source/include/opts-GCC.h +++ /dev/null @@ -1,114 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2017 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 opts_GCC_h -#define opts_GCC_h 1 - -#ifdef INLINE - -#include -#include "primitiveTypes.h" - -#ifdef SOFTFLOAT_BUILTIN_CLZ - -INLINE uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ) - { return a ? __builtin_clz( a ) - 16 : 16; } -#define softfloat_countLeadingZeros16 softfloat_countLeadingZeros16 - -INLINE uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ) - { return a ? __builtin_clz( a ) : 32; } -#define softfloat_countLeadingZeros32 softfloat_countLeadingZeros32 - -INLINE uint_fast8_t softfloat_countLeadingZeros64( uint64_t a ) - { return a ? __builtin_clzll( a ) : 64; } -#define softfloat_countLeadingZeros64 softfloat_countLeadingZeros64 - -#endif - -#ifdef SOFTFLOAT_INTRINSIC_INT128 - -INLINE struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ) -{ - union { unsigned __int128 ui; struct uint128 s; } uZ; - uZ.ui = (unsigned __int128) a * ((uint_fast64_t) b<<32); - return uZ.s; -} -#define softfloat_mul64ByShifted32To128 softfloat_mul64ByShifted32To128 - -INLINE struct uint128 softfloat_mul64To128( uint64_t a, uint64_t b ) -{ - union { unsigned __int128 ui; struct uint128 s; } uZ; - uZ.ui = (unsigned __int128) a * b; - return uZ.s; -} -#define softfloat_mul64To128 softfloat_mul64To128 - -INLINE -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ) -{ - union { unsigned __int128 ui; struct uint128 s; } uZ; - uZ.ui = ((unsigned __int128) a64<<64 | a0) * b; - return uZ.s; -} -#define softfloat_mul128By32 softfloat_mul128By32 - -INLINE -void - softfloat_mul128To256M( - uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0, uint64_t *zPtr ) -{ - unsigned __int128 z0, mid1, mid, z128; - z0 = (unsigned __int128) a0 * b0; - mid1 = (unsigned __int128) a64 * b0; - mid = mid1 + (unsigned __int128) a0 * b64; - z128 = (unsigned __int128) a64 * b64; - z128 += (unsigned __int128) (mid < mid1)<<64 | mid>>64; - mid <<= 64; - z0 += mid; - z128 += (z0 < mid); - zPtr[indexWord( 4, 0 )] = z0; - zPtr[indexWord( 4, 1 )] = z0>>64; - zPtr[indexWord( 4, 2 )] = z128; - zPtr[indexWord( 4, 3 )] = z128>>64; -} -#define softfloat_mul128To256M softfloat_mul128To256M - -#endif - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/primitiveTypes.h b/addins/SoftFloat-3e/source/include/primitiveTypes.h deleted file mode 100644 index a4a6dd11c..000000000 --- a/addins/SoftFloat-3e/source/include/primitiveTypes.h +++ /dev/null @@ -1,85 +0,0 @@ - -/*============================================================================ - -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 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 primitiveTypes_h -#define primitiveTypes_h 1 - -#include - -#ifdef SOFTFLOAT_FAST_INT64 - -#ifdef LITTLEENDIAN -struct uint128 { uint64_t v0, v64; }; -struct uint64_extra { uint64_t extra, v; }; -struct uint128_extra { uint64_t extra; struct uint128 v; }; -#else -struct uint128 { uint64_t v64, v0; }; -struct uint64_extra { uint64_t v, extra; }; -struct uint128_extra { struct uint128 v; uint64_t extra; }; -#endif - -#endif - -/*---------------------------------------------------------------------------- -| These macros are used to isolate the differences in word order between big- -| endian and little-endian platforms. -*----------------------------------------------------------------------------*/ -#ifdef LITTLEENDIAN -#define wordIncr 1 -#define indexWord( total, n ) (n) -#define indexWordHi( total ) ((total) - 1) -#define indexWordLo( total ) 0 -#define indexMultiword( total, m, n ) (n) -#define indexMultiwordHi( total, n ) ((total) - (n)) -#define indexMultiwordLo( total, n ) 0 -#define indexMultiwordHiBut( total, n ) (n) -#define indexMultiwordLoBut( total, n ) 0 -#define INIT_UINTM4( v3, v2, v1, v0 ) { v0, v1, v2, v3 } -#else -#define wordIncr -1 -#define indexWord( total, n ) ((total) - 1 - (n)) -#define indexWordHi( total ) 0 -#define indexWordLo( total ) ((total) - 1) -#define indexMultiword( total, m, n ) ((total) - 1 - (m)) -#define indexMultiwordHi( total, n ) 0 -#define indexMultiwordLo( total, n ) ((total) - (n)) -#define indexMultiwordHiBut( total, n ) 0 -#define indexMultiwordLoBut( total, n ) (n) -#define INIT_UINTM4( v3, v2, v1, v0 ) { v3, v2, v1, v0 } -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/primitives.h b/addins/SoftFloat-3e/source/include/primitives.h deleted file mode 100644 index 863ab45b5..000000000 --- a/addins/SoftFloat-3e/source/include/primitives.h +++ /dev/null @@ -1,1160 +0,0 @@ - -/*============================================================================ - -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, 2017 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 primitives_h -#define primitives_h 1 - -#include -#include -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam64 -/*---------------------------------------------------------------------------- -| Shifts 'a' right by the number of bits given in 'dist', which must be in -| the range 1 to 63. If any nonzero bits are shifted off, they are "jammed" -| into the least-significant bit of the shifted value by setting the least- -| significant bit to 1. This shifted-and-jammed value is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -uint64_t softfloat_shortShiftRightJam64( uint64_t a, uint_fast8_t dist ) - { return a>>dist | ((a & (((uint_fast64_t) 1<>dist | ((uint32_t) (a<<(-dist & 31)) != 0) : (a != 0); -} -#else -uint32_t softfloat_shiftRightJam32( uint32_t a, uint_fast16_t dist ); -#endif -#endif - -#ifndef softfloat_shiftRightJam64 -/*---------------------------------------------------------------------------- -| Shifts 'a' right by the number of bits given in 'dist', which must not -| be zero. If any nonzero bits are shifted off, they are "jammed" into the -| least-significant bit of the shifted value by setting the least-significant -| bit to 1. This shifted-and-jammed value is returned. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than 64, the result will be either 0 or 1, depending on whether 'a' -| is zero or nonzero. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE uint64_t softfloat_shiftRightJam64( uint64_t a, uint_fast32_t dist ) -{ - return - (dist < 63) ? a>>dist | ((uint64_t) (a<<(-dist & 63)) != 0) : (a != 0); -} -#else -uint64_t softfloat_shiftRightJam64( uint64_t a, uint_fast32_t dist ); -#endif -#endif - -/*---------------------------------------------------------------------------- -| A constant table that translates an 8-bit unsigned integer (the array index) -| into the number of leading 0 bits before the most-significant 1 of that -| integer. For integer zero (index 0), the corresponding table element is 8. -*----------------------------------------------------------------------------*/ -extern const uint_least8_t softfloat_countLeadingZeros8[256]; - -#ifndef softfloat_countLeadingZeros16 -/*---------------------------------------------------------------------------- -| Returns the number of leading 0 bits before the most-significant 1 bit of -| 'a'. If 'a' is zero, 16 is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ) -{ - uint_fast8_t count = 8; - if ( 0x100 <= a ) { - count = 0; - a >>= 8; - } - count += softfloat_countLeadingZeros8[a]; - return count; -} -#else -uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ); -#endif -#endif - -#ifndef softfloat_countLeadingZeros32 -/*---------------------------------------------------------------------------- -| Returns the number of leading 0 bits before the most-significant 1 bit of -| 'a'. If 'a' is zero, 32 is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ) -{ - uint_fast8_t count = 0; - if ( a < 0x10000 ) { - count = 16; - a <<= 16; - } - if ( a < 0x1000000 ) { - count += 8; - a <<= 8; - } - count += softfloat_countLeadingZeros8[a>>24]; - return count; -} -#else -uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ); -#endif -#endif - -#ifndef softfloat_countLeadingZeros64 -/*---------------------------------------------------------------------------- -| Returns the number of leading 0 bits before the most-significant 1 bit of -| 'a'. If 'a' is zero, 64 is returned. -*----------------------------------------------------------------------------*/ -uint_fast8_t softfloat_countLeadingZeros64( uint64_t a ); -#endif - -extern const uint16_t softfloat_approxRecip_1k0s[16]; -extern const uint16_t softfloat_approxRecip_1k1s[16]; - -#ifndef softfloat_approxRecip32_1 -/*---------------------------------------------------------------------------- -| Returns an approximation to the reciprocal of the number represented by 'a', -| where 'a' is interpreted as an unsigned fixed-point number with one integer -| bit and 31 fraction bits. The 'a' input must be "normalized", meaning that -| its most-significant bit (bit 31) must be 1. Thus, if A is the value of -| the fixed-point interpretation of 'a', then 1 <= A < 2. The returned value -| is interpreted as a pure unsigned fraction, having no integer bits and 32 -| fraction bits. The approximation returned is never greater than the true -| reciprocal 1/A, and it differs from the true reciprocal by at most 2.006 ulp -| (units in the last place). -*----------------------------------------------------------------------------*/ -#ifdef SOFTFLOAT_FAST_DIV64TO32 -#define softfloat_approxRecip32_1( a ) ((uint32_t) (UINT64_C( 0x7FFFFFFFFFFFFFFF ) / (uint32_t) (a))) -#else -uint32_t softfloat_approxRecip32_1( uint32_t a ); -#endif -#endif - -extern const uint16_t softfloat_approxRecipSqrt_1k0s[16]; -extern const uint16_t softfloat_approxRecipSqrt_1k1s[16]; - -#ifndef softfloat_approxRecipSqrt32_1 -/*---------------------------------------------------------------------------- -| Returns an approximation to the reciprocal of the square root of the number -| represented by 'a', where 'a' is interpreted as an unsigned fixed-point -| number either with one integer bit and 31 fraction bits or with two integer -| bits and 30 fraction bits. The format of 'a' is determined by 'oddExpA', -| which must be either 0 or 1. If 'oddExpA' is 1, 'a' is interpreted as -| having one integer bit, and if 'oddExpA' is 0, 'a' is interpreted as having -| two integer bits. The 'a' input must be "normalized", meaning that its -| most-significant bit (bit 31) must be 1. Thus, if A is the value of the -| fixed-point interpretation of 'a', it follows that 1 <= A < 2 when 'oddExpA' -| is 1, and 2 <= A < 4 when 'oddExpA' is 0. -| The returned value is interpreted as a pure unsigned fraction, having -| no integer bits and 32 fraction bits. The approximation returned is never -| greater than the true reciprocal 1/sqrt(A), and it differs from the true -| reciprocal by at most 2.06 ulp (units in the last place). The approximation -| returned is also always within the range 0.5 to 1; thus, the most- -| significant bit of the result is always set. -*----------------------------------------------------------------------------*/ -uint32_t softfloat_approxRecipSqrt32_1( unsigned int oddExpA, uint32_t a ); -#endif - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is -| defined. -*----------------------------------------------------------------------------*/ - -#ifndef softfloat_eq128 -/*---------------------------------------------------------------------------- -| Returns true if the 128-bit unsigned integer formed by concatenating 'a64' -| and 'a0' is equal to the 128-bit unsigned integer formed by concatenating -| 'b64' and 'b0'. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) -INLINE -bool softfloat_eq128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) - { return (a64 == b64) && (a0 == b0); } -#else -bool softfloat_eq128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_le128 -/*---------------------------------------------------------------------------- -| Returns true if the 128-bit unsigned integer formed by concatenating 'a64' -| and 'a0' is less than or equal to the 128-bit unsigned integer formed by -| concatenating 'b64' and 'b0'. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -bool softfloat_le128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) - { return (a64 < b64) || ((a64 == b64) && (a0 <= b0)); } -#else -bool softfloat_le128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_lt128 -/*---------------------------------------------------------------------------- -| Returns true if the 128-bit unsigned integer formed by concatenating 'a64' -| and 'a0' is less than the 128-bit unsigned integer formed by concatenating -| 'b64' and 'b0'. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -bool softfloat_lt128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) - { return (a64 < b64) || ((a64 == b64) && (a0 < b0)); } -#else -bool softfloat_lt128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_shortShiftLeft128 -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a64' and 'a0' left by the -| number of bits given in 'dist', which must be in the range 1 to 63. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_shortShiftLeft128( uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - struct uint128 z; - z.v64 = a64<>(-dist & 63); - z.v0 = a0<>dist; - z.v0 = a64<<(-dist & 63) | a0>>dist; - return z; -} -#else -struct uint128 - softfloat_shortShiftRight128( uint64_t a64, uint64_t a0, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shortShiftRightJam64Extra -/*---------------------------------------------------------------------------- -| This function is the same as 'softfloat_shiftRightJam64Extra' (below), -| except that 'dist' must be in the range 1 to 63. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint64_extra - softfloat_shortShiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast8_t dist ) -{ - struct uint64_extra z; - z.v = a>>dist; - z.extra = a<<(-dist & 63) | (extra != 0); - return z; -} -#else -struct uint64_extra - softfloat_shortShiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shortShiftRightJam128 -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a64' and 'a0' right by the -| number of bits given in 'dist', which must be in the range 1 to 63. If any -| nonzero bits are shifted off, they are "jammed" into the least-significant -| bit of the shifted value by setting the least-significant bit to 1. This -| shifted-and-jammed value is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_shortShiftRightJam128( - uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - uint_fast8_t negDist = -dist; - struct uint128 z; - z.v64 = a64>>dist; - z.v0 = - a64<<(negDist & 63) | a0>>dist - | ((uint64_t) (a0<<(negDist & 63)) != 0); - return z; -} -#else -struct uint128 - softfloat_shortShiftRightJam128( - uint64_t a64, uint64_t a0, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shortShiftRightJam128Extra -/*---------------------------------------------------------------------------- -| This function is the same as 'softfloat_shiftRightJam128Extra' (below), -| except that 'dist' must be in the range 1 to 63. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE -struct uint128_extra - softfloat_shortShiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast8_t dist ) -{ - uint_fast8_t negDist = -dist; - struct uint128_extra z; - z.v.v64 = a64>>dist; - z.v.v0 = a64<<(negDist & 63) | a0>>dist; - z.extra = a0<<(negDist & 63) | (extra != 0); - return z; -} -#else -struct uint128_extra - softfloat_shortShiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shiftRightJam64Extra -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a' and 'extra' right by 64 -| _plus_ the number of bits given in 'dist', which must not be zero. This -| shifted value is at most 64 nonzero bits and is returned in the 'v' field -| of the 'struct uint64_extra' result. The 64-bit 'extra' field of the result -| contains a value formed as follows from the bits that were shifted off: The -| _last_ bit shifted off is the most-significant bit of the 'extra' field, and -| the other 63 bits of the 'extra' field are all zero if and only if _all_but_ -| _the_last_ bits shifted off were all zero. -| (This function makes more sense if 'a' and 'extra' are considered to form -| an unsigned fixed-point number with binary point between 'a' and 'extra'. -| This fixed-point value is shifted right by the number of bits given in -| 'dist', and the integer part of this shifted value is returned in the 'v' -| field of the result. The fractional part of the shifted value is modified -| as described above and returned in the 'extra' field of the result.) -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (4 <= INLINE_LEVEL) -INLINE -struct uint64_extra - softfloat_shiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast32_t dist ) -{ - struct uint64_extra z; - if ( dist < 64 ) { - z.v = a>>dist; - z.extra = a<<(-dist & 63); - } else { - z.v = 0; - z.extra = (dist == 64) ? a : (a != 0); - } - z.extra |= (extra != 0); - return z; -} -#else -struct uint64_extra - softfloat_shiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast32_t dist ); -#endif -#endif - -#ifndef softfloat_shiftRightJam128 -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a64' and 'a0' right by the -| number of bits given in 'dist', which must not be zero. If any nonzero bits -| are shifted off, they are "jammed" into the least-significant bit of the -| shifted value by setting the least-significant bit to 1. This shifted-and- -| jammed value is returned. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than 128, the result will be either 0 or 1, depending on whether the -| original 128 bits are all zeros. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_shiftRightJam128( uint64_t a64, uint64_t a0, uint_fast32_t dist ); -#endif - -#ifndef softfloat_shiftRightJam128Extra -/*---------------------------------------------------------------------------- -| Shifts the 192 bits formed by concatenating 'a64', 'a0', and 'extra' right -| by 64 _plus_ the number of bits given in 'dist', which must not be zero. -| This shifted value is at most 128 nonzero bits and is returned in the 'v' -| field of the 'struct uint128_extra' result. The 64-bit 'extra' field of the -| result contains a value formed as follows from the bits that were shifted -| off: The _last_ bit shifted off is the most-significant bit of the 'extra' -| field, and the other 63 bits of the 'extra' field are all zero if and only -| if _all_but_the_last_ bits shifted off were all zero. -| (This function makes more sense if 'a64', 'a0', and 'extra' are considered -| to form an unsigned fixed-point number with binary point between 'a0' and -| 'extra'. This fixed-point value is shifted right by the number of bits -| given in 'dist', and the integer part of this shifted value is returned -| in the 'v' field of the result. The fractional part of the shifted value -| is modified as described above and returned in the 'extra' field of the -| result.) -*----------------------------------------------------------------------------*/ -struct uint128_extra - softfloat_shiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast32_t dist ); -#endif - -#ifndef softfloat_shiftRightJam256M -/*---------------------------------------------------------------------------- -| Shifts the 256-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', which must not be zero. If any nonzero bits are -| shifted off, they are "jammed" into the least-significant bit of the shifted -| value by setting the least-significant bit to 1. This shifted-and-jammed -| value is stored at the location pointed to by 'zPtr'. Each of 'aPtr' and -| 'zPtr' points to an array of four 64-bit elements that concatenate in the -| platform's normal endian order to form a 256-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' -| is greater than 256, the stored result will be either 0 or 1, depending on -| whether the original 256 bits are all zeros. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftRightJam256M( - const uint64_t *aPtr, uint_fast32_t dist, uint64_t *zPtr ); -#endif - -#ifndef softfloat_add128 -/*---------------------------------------------------------------------------- -| Returns the sum of the 128-bit integer formed by concatenating 'a64' and -| 'a0' and the 128-bit integer formed by concatenating 'b64' and 'b0'. The -| addition is modulo 2^128, so any carry out is lost. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_add128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - z.v0 = a0 + b0; - z.v64 = a64 + b64 + (z.v0 < a0); - return z; -} -#else -struct uint128 - softfloat_add128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_add256M -/*---------------------------------------------------------------------------- -| Adds the two 256-bit integers pointed to by 'aPtr' and 'bPtr'. The addition -| is modulo 2^256, so any carry out is lost. The sum is stored at the -| location pointed to by 'zPtr'. Each of 'aPtr', 'bPtr', and 'zPtr' points to -| an array of four 64-bit elements that concatenate in the platform's normal -| endian order to form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_add256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ); -#endif - -#ifndef softfloat_sub128 -/*---------------------------------------------------------------------------- -| Returns the difference of the 128-bit integer formed by concatenating 'a64' -| and 'a0' and the 128-bit integer formed by concatenating 'b64' and 'b0'. -| The subtraction is modulo 2^128, so any borrow out (carry out) is lost. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_sub128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - z.v0 = a0 - b0; - z.v64 = a64 - b64; - z.v64 -= (a0 < b0); - return z; -} -#else -struct uint128 - softfloat_sub128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_sub256M -/*---------------------------------------------------------------------------- -| Subtracts the 256-bit integer pointed to by 'bPtr' from the 256-bit integer -| pointed to by 'aPtr'. The addition is modulo 2^256, so any borrow out -| (carry out) is lost. The difference is stored at the location pointed to -| by 'zPtr'. Each of 'aPtr', 'bPtr', and 'zPtr' points to an array of four -| 64-bit elements that concatenate in the platform's normal endian order to -| form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_sub256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ); -#endif - -#ifndef softfloat_mul64ByShifted32To128 -/*---------------------------------------------------------------------------- -| Returns the 128-bit product of 'a', 'b', and 2^32. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ) -{ - uint_fast64_t mid; - struct uint128 z; - mid = (uint_fast64_t) (uint32_t) a * b; - z.v0 = mid<<32; - z.v64 = (uint_fast64_t) (uint32_t) (a>>32) * b + (mid>>32); - return z; -} -#else -struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ); -#endif -#endif - -#ifndef softfloat_mul64To128 -/*---------------------------------------------------------------------------- -| Returns the 128-bit product of 'a' and 'b'. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_mul64To128( uint64_t a, uint64_t b ); -#endif - -#ifndef softfloat_mul128By32 -/*---------------------------------------------------------------------------- -| Returns the product of the 128-bit integer formed by concatenating 'a64' and -| 'a0', multiplied by 'b'. The multiplication is modulo 2^128; any overflow -| bits are discarded. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (4 <= INLINE_LEVEL) -INLINE -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ) -{ - struct uint128 z; - uint_fast64_t mid; - uint_fast32_t carry; - z.v0 = a0 * b; - mid = (uint_fast64_t) (uint32_t) (a0>>32) * b; - carry = (uint32_t) ((uint_fast32_t) (z.v0>>32) - (uint_fast32_t) mid); - z.v64 = a64 * b + (uint_fast32_t) ((mid + carry)>>32); - return z; -} -#else -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ); -#endif -#endif - -#ifndef softfloat_mul128To256M -/*---------------------------------------------------------------------------- -| Multiplies the 128-bit unsigned integer formed by concatenating 'a64' and -| 'a0' by the 128-bit unsigned integer formed by concatenating 'b64' and -| 'b0'. The 256-bit product is stored at the location pointed to by 'zPtr'. -| Argument 'zPtr' points to an array of four 64-bit elements that concatenate -| in the platform's normal endian order to form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_mul128To256M( - uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0, uint64_t *zPtr ); -#endif - -#else - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not -| defined. -*----------------------------------------------------------------------------*/ - -#ifndef softfloat_compare96M -/*---------------------------------------------------------------------------- -| Compares the two 96-bit unsigned integers pointed to by 'aPtr' and 'bPtr'. -| Returns -1 if the first integer (A) is less than the second (B); returns 0 -| if the two integers are equal; and returns +1 if the first integer (A) -| is greater than the second (B). (The result is thus the signum of A - B.) -| Each of 'aPtr' and 'bPtr' points to an array of three 32-bit elements that -| concatenate in the platform's normal endian order to form a 96-bit integer. -*----------------------------------------------------------------------------*/ -int_fast8_t softfloat_compare96M( const uint32_t *aPtr, const uint32_t *bPtr ); -#endif - -#ifndef softfloat_compare128M -/*---------------------------------------------------------------------------- -| Compares the two 128-bit unsigned integers pointed to by 'aPtr' and 'bPtr'. -| Returns -1 if the first integer (A) is less than the second (B); returns 0 -| if the two integers are equal; and returns +1 if the first integer (A) -| is greater than the second (B). (The result is thus the signum of A - B.) -| Each of 'aPtr' and 'bPtr' points to an array of four 32-bit elements that -| concatenate in the platform's normal endian order to form a 128-bit integer. -*----------------------------------------------------------------------------*/ -int_fast8_t - softfloat_compare128M( const uint32_t *aPtr, const uint32_t *bPtr ); -#endif - -#ifndef softfloat_shortShiftLeft64To96M -/*---------------------------------------------------------------------------- -| Extends 'a' to 96 bits and shifts the value left by the number of bits given -| in 'dist', which must be in the range 1 to 31. The result is stored at the -| location pointed to by 'zPtr'. Argument 'zPtr' points to an array of three -| 32-bit elements that concatenate in the platform's normal endian order to -| form a 96-bit integer. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -void - softfloat_shortShiftLeft64To96M( - uint64_t a, uint_fast8_t dist, uint32_t *zPtr ) -{ - zPtr[indexWord( 3, 0 )] = (uint32_t) a<>= 32 - dist; - zPtr[indexWord( 3, 2 )] = a>>32; - zPtr[indexWord( 3, 1 )] = a; -} -#else -void - softfloat_shortShiftLeft64To96M( - uint64_t a, uint_fast8_t dist, uint32_t *zPtr ); -#endif -#endif - -#ifndef softfloat_shortShiftLeftM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' left by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must be in the range 1 to 31. Any nonzero bits shifted off are lost. The -| shifted N-bit result is stored at the location pointed to by 'zPtr'. Each -| of 'aPtr' and 'zPtr' points to a 'size_words'-long array of 32-bit elements -| that concatenate in the platform's normal endian order to form an N-bit -| integer. -*----------------------------------------------------------------------------*/ -void - softfloat_shortShiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shortShiftLeft96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftLeftM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftLeft96M( aPtr, dist, zPtr ) softfloat_shortShiftLeftM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftLeft128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftLeftM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftLeft128M( aPtr, dist, zPtr ) softfloat_shortShiftLeftM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftLeft160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftLeftM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftLeft160M( aPtr, dist, zPtr ) softfloat_shortShiftLeftM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftLeftM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' left by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must not be zero. Any nonzero bits shifted off are lost. The shifted -| N-bit result is stored at the location pointed to by 'zPtr'. Each of 'aPtr' -| and 'zPtr' points to a 'size_words'-long array of 32-bit elements that -| concatenate in the platform's normal endian order to form an N-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than N, the stored result will be 0. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shiftLeft96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftLeftM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftLeft96M( aPtr, dist, zPtr ) softfloat_shiftLeftM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftLeft128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftLeftM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftLeft128M( aPtr, dist, zPtr ) softfloat_shiftLeftM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftLeft160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftLeftM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftLeft160M( aPtr, dist, zPtr ) softfloat_shiftLeftM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftRightM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must be in the range 1 to 31. Any nonzero bits shifted off are lost. The -| shifted N-bit result is stored at the location pointed to by 'zPtr'. Each -| of 'aPtr' and 'zPtr' points to a 'size_words'-long array of 32-bit elements -| that concatenate in the platform's normal endian order to form an N-bit -| integer. -*----------------------------------------------------------------------------*/ -void - softfloat_shortShiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shortShiftRight128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftRightM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftRight128M( aPtr, dist, zPtr ) softfloat_shortShiftRightM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftRight160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftRightM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftRight160M( aPtr, dist, zPtr ) softfloat_shortShiftRightM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftRightJamM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must be in the range 1 to 31. If any nonzero bits are shifted off, they are -| "jammed" into the least-significant bit of the shifted value by setting the -| least-significant bit to 1. This shifted-and-jammed N-bit result is stored -| at the location pointed to by 'zPtr'. Each of 'aPtr' and 'zPtr' points -| to a 'size_words'-long array of 32-bit elements that concatenate in the -| platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_shortShiftRightJamM( - uint_fast8_t, const uint32_t *, uint_fast8_t, uint32_t * ); -#endif - -#ifndef softfloat_shortShiftRightJam160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftRightJamM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftRightJam160M( aPtr, dist, zPtr ) softfloat_shortShiftRightJamM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must not be zero. Any nonzero bits shifted off are lost. The shifted -| N-bit result is stored at the location pointed to by 'zPtr'. Each of 'aPtr' -| and 'zPtr' points to a 'size_words'-long array of 32-bit elements that -| concatenate in the platform's normal endian order to form an N-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than N, the stored result will be 0. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shiftRight96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRight96M( aPtr, dist, zPtr ) softfloat_shiftRightM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightJamM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must not be zero. If any nonzero bits are shifted off, they are "jammed" -| into the least-significant bit of the shifted value by setting the least- -| significant bit to 1. This shifted-and-jammed N-bit result is stored -| at the location pointed to by 'zPtr'. Each of 'aPtr' and 'zPtr' points -| to a 'size_words'-long array of 32-bit elements that concatenate in the -| platform's normal endian order to form an N-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' -| is greater than N, the stored result will be either 0 or 1, depending on -| whether the original N bits are all zeros. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftRightJamM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shiftRightJam96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightJamM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRightJam96M( aPtr, dist, zPtr ) softfloat_shiftRightJamM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightJam128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightJamM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRightJam128M( aPtr, dist, zPtr ) softfloat_shiftRightJamM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightJam160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightJamM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRightJam160M( aPtr, dist, zPtr ) softfloat_shiftRightJamM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_addM -/*---------------------------------------------------------------------------- -| Adds the two N-bit integers pointed to by 'aPtr' and 'bPtr', where N = -| 'size_words' * 32. The addition is modulo 2^N, so any carry out is lost. -| The N-bit sum is stored at the location pointed to by 'zPtr'. Each of -| 'aPtr', 'bPtr', and 'zPtr' points to a 'size_words'-long array of 32-bit -| elements that concatenate in the platform's normal endian order to form an -| N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_addM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_add96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_add96M( aPtr, bPtr, zPtr ) softfloat_addM( 3, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_add128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addM' with 'size_words' -| = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_add128M( aPtr, bPtr, zPtr ) softfloat_addM( 4, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_add160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_add160M( aPtr, bPtr, zPtr ) softfloat_addM( 5, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_addCarryM -/*---------------------------------------------------------------------------- -| Adds the two N-bit unsigned integers pointed to by 'aPtr' and 'bPtr', where -| N = 'size_words' * 32, plus 'carry', which must be either 0 or 1. The N-bit -| sum (modulo 2^N) is stored at the location pointed to by 'zPtr', and any -| carry out is returned as the result. Each of 'aPtr', 'bPtr', and 'zPtr' -| points to a 'size_words'-long array of 32-bit elements that concatenate in -| the platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -uint_fast8_t - softfloat_addCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_addComplCarryM -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addCarryM', except that -| the value of the unsigned integer pointed to by 'bPtr' is bit-wise completed -| before the addition. -*----------------------------------------------------------------------------*/ -uint_fast8_t - softfloat_addComplCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_addComplCarry96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addComplCarryM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_addComplCarry96M( aPtr, bPtr, carry, zPtr ) softfloat_addComplCarryM( 3, aPtr, bPtr, carry, zPtr ) -#endif - -#ifndef softfloat_negXM -/*---------------------------------------------------------------------------- -| Replaces the N-bit unsigned integer pointed to by 'zPtr' by the -| 2s-complement of itself, where N = 'size_words' * 32. Argument 'zPtr' -| points to a 'size_words'-long array of 32-bit elements that concatenate in -| the platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void softfloat_negXM( uint_fast8_t size_words, uint32_t *zPtr ); -#endif - -#ifndef softfloat_negX96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_negX96M( zPtr ) softfloat_negXM( 3, zPtr ) -#endif - -#ifndef softfloat_negX128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_negX128M( zPtr ) softfloat_negXM( 4, zPtr ) -#endif - -#ifndef softfloat_negX160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_negX160M( zPtr ) softfloat_negXM( 5, zPtr ) -#endif - -#ifndef softfloat_negX256M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 8 (N = 256). -*----------------------------------------------------------------------------*/ -#define softfloat_negX256M( zPtr ) softfloat_negXM( 8, zPtr ) -#endif - -#ifndef softfloat_sub1XM -/*---------------------------------------------------------------------------- -| Subtracts 1 from the N-bit integer pointed to by 'zPtr', where N = -| 'size_words' * 32. The subtraction is modulo 2^N, so any borrow out (carry -| out) is lost. Argument 'zPtr' points to a 'size_words'-long array of 32-bit -| elements that concatenate in the platform's normal endian order to form an -| N-bit integer. -*----------------------------------------------------------------------------*/ -void softfloat_sub1XM( uint_fast8_t size_words, uint32_t *zPtr ); -#endif - -#ifndef softfloat_sub1X96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_sub1XM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_sub1X96M( zPtr ) softfloat_sub1XM( 3, zPtr ) -#endif - -#ifndef softfloat_sub1X160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_sub1XM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_sub1X160M( zPtr ) softfloat_sub1XM( 5, zPtr ) -#endif - -#ifndef softfloat_subM -/*---------------------------------------------------------------------------- -| Subtracts the two N-bit integers pointed to by 'aPtr' and 'bPtr', where N = -| 'size_words' * 32. The subtraction is modulo 2^N, so any borrow out (carry -| out) is lost. The N-bit difference is stored at the location pointed to by -| 'zPtr'. Each of 'aPtr', 'bPtr', and 'zPtr' points to a 'size_words'-long -| array of 32-bit elements that concatenate in the platform's normal endian -| order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_subM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_sub96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_subM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_sub96M( aPtr, bPtr, zPtr ) softfloat_subM( 3, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_sub128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_subM' with 'size_words' -| = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_sub128M( aPtr, bPtr, zPtr ) softfloat_subM( 4, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_sub160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_subM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_sub160M( aPtr, bPtr, zPtr ) softfloat_subM( 5, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_mul64To128M -/*---------------------------------------------------------------------------- -| Multiplies 'a' and 'b' and stores the 128-bit product at the location -| pointed to by 'zPtr'. Argument 'zPtr' points to an array of four 32-bit -| elements that concatenate in the platform's normal endian order to form a -| 128-bit integer. -*----------------------------------------------------------------------------*/ -void softfloat_mul64To128M( uint64_t a, uint64_t b, uint32_t *zPtr ); -#endif - -#ifndef softfloat_mul128MTo256M -/*---------------------------------------------------------------------------- -| Multiplies the two 128-bit unsigned integers pointed to by 'aPtr' and -| 'bPtr', and stores the 256-bit product at the location pointed to by 'zPtr'. -| Each of 'aPtr' and 'bPtr' points to an array of four 32-bit elements that -| concatenate in the platform's normal endian order to form a 128-bit integer. -| Argument 'zPtr' points to an array of eight 32-bit elements that concatenate -| to form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_mul128MTo256M( - const uint32_t *aPtr, const uint32_t *bPtr, uint32_t *zPtr ); -#endif - -#ifndef softfloat_remStepMBy32 -/*---------------------------------------------------------------------------- -| Performs a "remainder reduction step" as follows: Arguments 'remPtr' and -| 'bPtr' both point to N-bit unsigned integers, where N = 'size_words' * 32. -| Defining R and B as the values of those integers, the expression (R<<'dist') -| - B * q is computed modulo 2^N, and the N-bit result is stored at the -| location pointed to by 'zPtr'. Each of 'remPtr', 'bPtr', and 'zPtr' points -| to a 'size_words'-long array of 32-bit elements that concatenate in the -| platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_remStepMBy32( - uint_fast8_t size_words, - const uint32_t *remPtr, - uint_fast8_t dist, - const uint32_t *bPtr, - uint32_t q, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_remStep96MBy32 -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_remStepMBy32' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_remStep96MBy32( remPtr, dist, bPtr, q, zPtr ) softfloat_remStepMBy32( 3, remPtr, dist, bPtr, q, zPtr ) -#endif - -#ifndef softfloat_remStep128MBy32 -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_remStepMBy32' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_remStep128MBy32( remPtr, dist, bPtr, q, zPtr ) softfloat_remStepMBy32( 4, remPtr, dist, bPtr, q, zPtr ) -#endif - -#ifndef softfloat_remStep160MBy32 -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_remStepMBy32' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_remStep160MBy32( remPtr, dist, bPtr, q, zPtr ) softfloat_remStepMBy32( 5, remPtr, dist, bPtr, q, zPtr ) -#endif - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/softfloat.h b/addins/SoftFloat-3e/source/include/softfloat.h deleted file mode 100644 index b33374cd6..000000000 --- a/addins/SoftFloat-3e/source/include/softfloat.h +++ /dev/null @@ -1,372 +0,0 @@ - -/*============================================================================ - -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, 2017 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. - -=============================================================================*/ - - -/*============================================================================ -| Note: If SoftFloat is made available as a general library for programs to -| use, it is strongly recommended that a platform-specific version of this -| header, "softfloat.h", be created that folds in "softfloat_types.h" and that -| eliminates all dependencies on compile-time macros. -*============================================================================*/ - - -#ifndef softfloat_h -#define softfloat_h 1 - -#include -#include -#include "softfloat_types.h" - -#ifndef THREAD_LOCAL -#define THREAD_LOCAL -#endif - -/*---------------------------------------------------------------------------- -| Software floating-point underflow tininess-detection mode. -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t softfloat_detectTininess; -enum { - softfloat_tininess_beforeRounding = 0, - softfloat_tininess_afterRounding = 1 -}; - -/*---------------------------------------------------------------------------- -| Software floating-point rounding mode. (Mode "odd" is supported only if -| SoftFloat is compiled with macro 'SOFTFLOAT_ROUND_ODD' defined.) -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t softfloat_roundingMode; -enum { - softfloat_round_near_even = 0, - softfloat_round_minMag = 1, - softfloat_round_min = 2, - softfloat_round_max = 3, - softfloat_round_near_maxMag = 4, - softfloat_round_odd = 6 -}; - -/*---------------------------------------------------------------------------- -| Software floating-point exception flags. -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags; -enum { - softfloat_flag_inexact = 1, - softfloat_flag_underflow = 2, - softfloat_flag_overflow = 4, - softfloat_flag_infinite = 8, - softfloat_flag_invalid = 16 -}; - -/*---------------------------------------------------------------------------- -| Routine to raise any or all of the software floating-point exception flags. -*----------------------------------------------------------------------------*/ -void softfloat_raiseFlags( uint_fast8_t ); - -/*---------------------------------------------------------------------------- -| Integer-to-floating-point conversion routines. -*----------------------------------------------------------------------------*/ -float16_t ui32_to_f16( uint32_t ); -float32_t ui32_to_f32( uint32_t ); -float64_t ui32_to_f64( uint32_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t ui32_to_extF80( uint32_t ); -float128_t ui32_to_f128( uint32_t ); -#endif -void ui32_to_extF80M( uint32_t, extFloat80_t * ); -void ui32_to_f128M( uint32_t, float128_t * ); -float16_t ui64_to_f16( uint64_t ); -float32_t ui64_to_f32( uint64_t ); -float64_t ui64_to_f64( uint64_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t ui64_to_extF80( uint64_t ); -float128_t ui64_to_f128( uint64_t ); -#endif -void ui64_to_extF80M( uint64_t, extFloat80_t * ); -void ui64_to_f128M( uint64_t, float128_t * ); -float16_t i32_to_f16( int32_t ); -float32_t i32_to_f32( int32_t ); -float64_t i32_to_f64( int32_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t i32_to_extF80( int32_t ); -float128_t i32_to_f128( int32_t ); -#endif -void i32_to_extF80M( int32_t, extFloat80_t * ); -void i32_to_f128M( int32_t, float128_t * ); -float16_t i64_to_f16( int64_t ); -float32_t i64_to_f32( int64_t ); -float64_t i64_to_f64( int64_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t i64_to_extF80( int64_t ); -float128_t i64_to_f128( int64_t ); -#endif -void i64_to_extF80M( int64_t, extFloat80_t * ); -void i64_to_f128M( int64_t, float128_t * ); - -/*---------------------------------------------------------------------------- -| 16-bit (half-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -uint_fast32_t f16_to_ui32( float16_t, uint_fast8_t, bool ); -uint_fast64_t f16_to_ui64( float16_t, uint_fast8_t, bool ); -int_fast32_t f16_to_i32( float16_t, uint_fast8_t, bool ); -int_fast64_t f16_to_i64( float16_t, uint_fast8_t, bool ); -uint_fast32_t f16_to_ui32_r_minMag( float16_t, bool ); -uint_fast64_t f16_to_ui64_r_minMag( float16_t, bool ); -int_fast32_t f16_to_i32_r_minMag( float16_t, bool ); -int_fast64_t f16_to_i64_r_minMag( float16_t, bool ); -float32_t f16_to_f32( float16_t ); -float64_t f16_to_f64( float16_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t f16_to_extF80( float16_t ); -float128_t f16_to_f128( float16_t ); -#endif -void f16_to_extF80M( float16_t, extFloat80_t * ); -void f16_to_f128M( float16_t, float128_t * ); -float16_t f16_roundToInt( float16_t, uint_fast8_t, bool ); -float16_t f16_add( float16_t, float16_t ); -float16_t f16_sub( float16_t, float16_t ); -float16_t f16_mul( float16_t, float16_t ); -float16_t f16_mulAdd( float16_t, float16_t, float16_t ); -float16_t f16_div( float16_t, float16_t ); -float16_t f16_rem( float16_t, float16_t ); -float16_t f16_sqrt( float16_t ); -bool f16_eq( float16_t, float16_t ); -bool f16_le( float16_t, float16_t ); -bool f16_lt( float16_t, float16_t ); -bool f16_eq_signaling( float16_t, float16_t ); -bool f16_le_quiet( float16_t, float16_t ); -bool f16_lt_quiet( float16_t, float16_t ); -bool f16_isSignalingNaN( float16_t ); - -/*---------------------------------------------------------------------------- -| 32-bit (single-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -uint_fast32_t f32_to_ui32( float32_t, uint_fast8_t, bool ); -uint_fast64_t f32_to_ui64( float32_t, uint_fast8_t, bool ); -int_fast32_t f32_to_i32( float32_t, uint_fast8_t, bool ); -int_fast64_t f32_to_i64( float32_t, uint_fast8_t, bool ); -uint_fast32_t f32_to_ui32_r_minMag( float32_t, bool ); -uint_fast64_t f32_to_ui64_r_minMag( float32_t, bool ); -int_fast32_t f32_to_i32_r_minMag( float32_t, bool ); -int_fast64_t f32_to_i64_r_minMag( float32_t, bool ); -float16_t f32_to_f16( float32_t ); -float64_t f32_to_f64( float32_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t f32_to_extF80( float32_t ); -float128_t f32_to_f128( float32_t ); -#endif -void f32_to_extF80M( float32_t, extFloat80_t * ); -void f32_to_f128M( float32_t, float128_t * ); -float32_t f32_roundToInt( float32_t, uint_fast8_t, bool ); -float32_t f32_add( float32_t, float32_t ); -float32_t f32_sub( float32_t, float32_t ); -float32_t f32_mul( float32_t, float32_t ); -float32_t f32_mulAdd( float32_t, float32_t, float32_t ); -float32_t f32_div( float32_t, float32_t ); -float32_t f32_rem( float32_t, float32_t ); -float32_t f32_sqrt( float32_t ); -bool f32_eq( float32_t, float32_t ); -bool f32_le( float32_t, float32_t ); -bool f32_lt( float32_t, float32_t ); -bool f32_eq_signaling( float32_t, float32_t ); -bool f32_le_quiet( float32_t, float32_t ); -bool f32_lt_quiet( float32_t, float32_t ); -bool f32_isSignalingNaN( float32_t ); - -/*---------------------------------------------------------------------------- -| 64-bit (double-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -uint_fast32_t f64_to_ui32( float64_t, uint_fast8_t, bool ); -uint_fast64_t f64_to_ui64( float64_t, uint_fast8_t, bool ); -int_fast32_t f64_to_i32( float64_t, uint_fast8_t, bool ); -int_fast64_t f64_to_i64( float64_t, uint_fast8_t, bool ); -uint_fast32_t f64_to_ui32_r_minMag( float64_t, bool ); -uint_fast64_t f64_to_ui64_r_minMag( float64_t, bool ); -int_fast32_t f64_to_i32_r_minMag( float64_t, bool ); -int_fast64_t f64_to_i64_r_minMag( float64_t, bool ); -float16_t f64_to_f16( float64_t ); -float32_t f64_to_f32( float64_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t f64_to_extF80( float64_t ); -float128_t f64_to_f128( float64_t ); -#endif -void f64_to_extF80M( float64_t, extFloat80_t * ); -void f64_to_f128M( float64_t, float128_t * ); -float64_t f64_roundToInt( float64_t, uint_fast8_t, bool ); -float64_t f64_add( float64_t, float64_t ); -float64_t f64_sub( float64_t, float64_t ); -float64_t f64_mul( float64_t, float64_t ); -float64_t f64_mulAdd( float64_t, float64_t, float64_t ); -float64_t f64_div( float64_t, float64_t ); -float64_t f64_rem( float64_t, float64_t ); -float64_t f64_sqrt( float64_t ); -bool f64_eq( float64_t, float64_t ); -bool f64_le( float64_t, float64_t ); -bool f64_lt( float64_t, float64_t ); -bool f64_eq_signaling( float64_t, float64_t ); -bool f64_le_quiet( float64_t, float64_t ); -bool f64_lt_quiet( float64_t, float64_t ); -bool f64_isSignalingNaN( float64_t ); - -/*---------------------------------------------------------------------------- -| Rounding precision for 80-bit extended double-precision floating-point. -| Valid values are 32, 64, and 80. -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t extF80_roundingPrecision; - -/*---------------------------------------------------------------------------- -| 80-bit extended double-precision floating-point operations. -*----------------------------------------------------------------------------*/ -#ifdef SOFTFLOAT_FAST_INT64 -uint_fast32_t extF80_to_ui32( extFloat80_t, uint_fast8_t, bool ); -uint_fast64_t extF80_to_ui64( extFloat80_t, uint_fast8_t, bool ); -int_fast32_t extF80_to_i32( extFloat80_t, uint_fast8_t, bool ); -int_fast64_t extF80_to_i64( extFloat80_t, uint_fast8_t, bool ); -uint_fast32_t extF80_to_ui32_r_minMag( extFloat80_t, bool ); -uint_fast64_t extF80_to_ui64_r_minMag( extFloat80_t, bool ); -int_fast32_t extF80_to_i32_r_minMag( extFloat80_t, bool ); -int_fast64_t extF80_to_i64_r_minMag( extFloat80_t, bool ); -float16_t extF80_to_f16( extFloat80_t ); -float32_t extF80_to_f32( extFloat80_t ); -float64_t extF80_to_f64( extFloat80_t ); -float128_t extF80_to_f128( extFloat80_t ); -extFloat80_t extF80_roundToInt( extFloat80_t, uint_fast8_t, bool ); -extFloat80_t extF80_add( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_sub( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_mul( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_div( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_rem( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_sqrt( extFloat80_t ); -bool extF80_eq( extFloat80_t, extFloat80_t ); -bool extF80_le( extFloat80_t, extFloat80_t ); -bool extF80_lt( extFloat80_t, extFloat80_t ); -bool extF80_eq_signaling( extFloat80_t, extFloat80_t ); -bool extF80_le_quiet( extFloat80_t, extFloat80_t ); -bool extF80_lt_quiet( extFloat80_t, extFloat80_t ); -bool extF80_isSignalingNaN( extFloat80_t ); -#endif -uint_fast32_t extF80M_to_ui32( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast64_t extF80M_to_ui64( const extFloat80_t *, uint_fast8_t, bool ); -int_fast32_t extF80M_to_i32( const extFloat80_t *, uint_fast8_t, bool ); -int_fast64_t extF80M_to_i64( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast32_t extF80M_to_ui32_r_minMag( const extFloat80_t *, bool ); -uint_fast64_t extF80M_to_ui64_r_minMag( const extFloat80_t *, bool ); -int_fast32_t extF80M_to_i32_r_minMag( const extFloat80_t *, bool ); -int_fast64_t extF80M_to_i64_r_minMag( const extFloat80_t *, bool ); -float16_t extF80M_to_f16( const extFloat80_t * ); -float32_t extF80M_to_f32( const extFloat80_t * ); -float64_t extF80M_to_f64( const extFloat80_t * ); -void extF80M_to_f128M( const extFloat80_t *, float128_t * ); -void - extF80M_roundToInt( - const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ); -void extF80M_add( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_sub( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_mul( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_div( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_rem( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_sqrt( const extFloat80_t *, extFloat80_t * ); -bool extF80M_eq( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_le( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_lt( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_eq_signaling( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_le_quiet( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_lt_quiet( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_isSignalingNaN( const extFloat80_t * ); - -/*---------------------------------------------------------------------------- -| 128-bit (quadruple-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -#ifdef SOFTFLOAT_FAST_INT64 -uint_fast32_t f128_to_ui32( float128_t, uint_fast8_t, bool ); -uint_fast64_t f128_to_ui64( float128_t, uint_fast8_t, bool ); -int_fast32_t f128_to_i32( float128_t, uint_fast8_t, bool ); -int_fast64_t f128_to_i64( float128_t, uint_fast8_t, bool ); -uint_fast32_t f128_to_ui32_r_minMag( float128_t, bool ); -uint_fast64_t f128_to_ui64_r_minMag( float128_t, bool ); -int_fast32_t f128_to_i32_r_minMag( float128_t, bool ); -int_fast64_t f128_to_i64_r_minMag( float128_t, bool ); -float16_t f128_to_f16( float128_t ); -float32_t f128_to_f32( float128_t ); -float64_t f128_to_f64( float128_t ); -extFloat80_t f128_to_extF80( float128_t ); -float128_t f128_roundToInt( float128_t, uint_fast8_t, bool ); -float128_t f128_add( float128_t, float128_t ); -float128_t f128_sub( float128_t, float128_t ); -float128_t f128_mul( float128_t, float128_t ); -float128_t f128_mulAdd( float128_t, float128_t, float128_t ); -float128_t f128_div( float128_t, float128_t ); -float128_t f128_rem( float128_t, float128_t ); -float128_t f128_sqrt( float128_t ); -bool f128_eq( float128_t, float128_t ); -bool f128_le( float128_t, float128_t ); -bool f128_lt( float128_t, float128_t ); -bool f128_eq_signaling( float128_t, float128_t ); -bool f128_le_quiet( float128_t, float128_t ); -bool f128_lt_quiet( float128_t, float128_t ); -bool f128_isSignalingNaN( float128_t ); -#endif -uint_fast32_t f128M_to_ui32( const float128_t *, uint_fast8_t, bool ); -uint_fast64_t f128M_to_ui64( const float128_t *, uint_fast8_t, bool ); -int_fast32_t f128M_to_i32( const float128_t *, uint_fast8_t, bool ); -int_fast64_t f128M_to_i64( const float128_t *, uint_fast8_t, bool ); -uint_fast32_t f128M_to_ui32_r_minMag( const float128_t *, bool ); -uint_fast64_t f128M_to_ui64_r_minMag( const float128_t *, bool ); -int_fast32_t f128M_to_i32_r_minMag( const float128_t *, bool ); -int_fast64_t f128M_to_i64_r_minMag( const float128_t *, bool ); -float16_t f128M_to_f16( const float128_t * ); -float32_t f128M_to_f32( const float128_t * ); -float64_t f128M_to_f64( const float128_t * ); -void f128M_to_extF80M( const float128_t *, extFloat80_t * ); -void f128M_roundToInt( const float128_t *, uint_fast8_t, bool, float128_t * ); -void f128M_add( const float128_t *, const float128_t *, float128_t * ); -void f128M_sub( const float128_t *, const float128_t *, float128_t * ); -void f128M_mul( const float128_t *, const float128_t *, float128_t * ); -void - f128M_mulAdd( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -void f128M_div( const float128_t *, const float128_t *, float128_t * ); -void f128M_rem( const float128_t *, const float128_t *, float128_t * ); -void f128M_sqrt( const float128_t *, float128_t * ); -bool f128M_eq( const float128_t *, const float128_t * ); -bool f128M_le( const float128_t *, const float128_t * ); -bool f128M_lt( const float128_t *, const float128_t * ); -bool f128M_eq_signaling( const float128_t *, const float128_t * ); -bool f128M_le_quiet( const float128_t *, const float128_t * ); -bool f128M_lt_quiet( const float128_t *, const float128_t * ); -bool f128M_isSignalingNaN( const float128_t * ); - -#endif - diff --git a/addins/SoftFloat-3e/source/include/softfloat_types.h b/addins/SoftFloat-3e/source/include/softfloat_types.h deleted file mode 100644 index bc30e3144..000000000 --- a/addins/SoftFloat-3e/source/include/softfloat_types.h +++ /dev/null @@ -1,81 +0,0 @@ - -/*============================================================================ - -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, 2017 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 softfloat_types_h -#define softfloat_types_h 1 - -#include - -/*---------------------------------------------------------------------------- -| Types used to pass 16-bit, 32-bit, 64-bit, and 128-bit floating-point -| arguments and results to/from functions. These types must be exactly -| 16 bits, 32 bits, 64 bits, and 128 bits in size, respectively. Where a -| platform has "native" support for IEEE-Standard floating-point formats, -| the types below may, if desired, be defined as aliases for the native types -| (typically 'float' and 'double', and possibly 'long double'). -*----------------------------------------------------------------------------*/ -typedef struct { uint16_t v; } float16_t; -typedef struct { uint32_t v; } float32_t; -typedef struct { uint64_t v; } float64_t; -typedef struct { uint64_t v[2]; } float128_t; - -/*---------------------------------------------------------------------------- -| The format of an 80-bit extended floating-point number in memory. This -| structure must contain a 16-bit field named 'signExp' and a 64-bit field -| named 'signif'. -*----------------------------------------------------------------------------*/ -#ifdef LITTLEENDIAN -struct extFloat80M { uint64_t signif; uint16_t signExp; }; -#else -struct extFloat80M { uint16_t signExp; uint64_t signif; }; -#endif - -/*---------------------------------------------------------------------------- -| The type used to pass 80-bit extended floating-point arguments and -| results to/from functions. This type must have size identical to -| 'struct extFloat80M'. Type 'extFloat80_t' can be defined as an alias for -| 'struct extFloat80M'. Alternatively, if a platform has "native" support -| for IEEE-Standard 80-bit extended floating-point, it may be possible, -| if desired, to define 'extFloat80_t' as an alias for the native type -| (presumably either 'long double' or a nonstandard compiler-intrinsic type). -| In that case, the 'signif' and 'signExp' fields of 'struct extFloat80M' -| must align exactly with the locations in memory of the sign, exponent, and -| significand of the native type. -*----------------------------------------------------------------------------*/ -typedef struct extFloat80M extFloat80_t; - -#endif - diff --git a/addins/SoftFloat-3e/source/s_add128.c b/addins/SoftFloat-3e/source/s_add128.c deleted file mode 100644 index 5a9d5082a..000000000 --- a/addins/SoftFloat-3e/source/s_add128.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_add128 - -struct uint128 - softfloat_add128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - - z.v0 = a0 + b0; - z.v64 = a64 + b64 + (z.v0 < a0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_add256M.c b/addins/SoftFloat-3e/source/s_add256M.c deleted file mode 100644 index 4fb46a174..000000000 --- a/addins/SoftFloat-3e/source/s_add256M.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_add256M - -void - softfloat_add256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ) -{ - unsigned int index; - uint_fast8_t carry; - uint64_t wordA, wordZ; - - index = indexWordLo( 4 ); - carry = 0; - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + bPtr[index] + carry; - zPtr[index] = wordZ; - if ( index == indexWordHi( 4 ) ) break; - if ( wordZ != wordA ) carry = (wordZ < wordA); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addCarryM.c b/addins/SoftFloat-3e/source/s_addCarryM.c deleted file mode 100644 index f0ccf6724..000000000 --- a/addins/SoftFloat-3e/source/s_addCarryM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_addCarryM - -uint_fast8_t - softfloat_addCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordZ; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + bPtr[index] + carry; - zPtr[index] = wordZ; - if ( wordZ != wordA ) carry = (wordZ < wordA); - if ( index == lastIndex ) break; - index += wordIncr; - } - return carry; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addComplCarryM.c b/addins/SoftFloat-3e/source/s_addComplCarryM.c deleted file mode 100644 index e1584c669..000000000 --- a/addins/SoftFloat-3e/source/s_addComplCarryM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_addComplCarryM - -uint_fast8_t - softfloat_addComplCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordZ; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + ~bPtr[index] + carry; - zPtr[index] = wordZ; - if ( wordZ != wordA ) carry = (wordZ < wordA); - if ( index == lastIndex ) break; - index += wordIncr; - } - return carry; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addExtF80M.c b/addins/SoftFloat-3e/source/s_addExtF80M.c deleted file mode 100644 index febfb6577..000000000 --- a/addins/SoftFloat-3e/source/s_addExtF80M.c +++ /dev/null @@ -1,186 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -void - softfloat_addExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr, - bool negateB - ) -{ - uint32_t uiA64; - int32_t expA; - uint32_t uiB64; - int32_t expB; - uint32_t uiZ64; - bool signZ, signB; - const struct extFloat80M *tempSPtr; - uint64_t sigZ, sigB; - void - (*roundPackRoutinePtr)( - bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M * ); - int32_t expDiff; - uint32_t extSigX[3], sigZExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - expB = expExtF80UI64( uiB64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - uiZ64 = uiA64; - if ( expB == 0x7FFF ) { - uiZ64 = uiB64 ^ packToExtF80UI64( negateB, 0 ); - if ( (expA == 0x7FFF) && (uiZ64 != uiA64) ) { - softfloat_invalidExtF80M( zSPtr ); - return; - } - } - zSPtr->signExp = uiZ64; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - return; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signZ = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ) ^ negateB; - negateB = (signZ != signB); - if ( expA < expB ) { - signZ = signB; - expA = expB; - expB = expExtF80UI64( uiA64 ); - tempSPtr = aSPtr; - aSPtr = bSPtr; - bSPtr = tempSPtr; - } - if ( ! expB ) { - expB = 1; - if ( ! expA ) expA = 1; - } - sigZ = aSPtr->signif; - sigB = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundPackRoutinePtr = softfloat_roundPackMToExtF80M; - expDiff = expA - expB; - if ( expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - extSigX[indexWord( 3, 2 )] = sigB>>32; - extSigX[indexWord( 3, 1 )] = sigB; - extSigX[indexWord( 3, 0 )] = 0; - softfloat_shiftRightJam96M( extSigX, expDiff, extSigX ); - sigB = - (uint64_t) extSigX[indexWord( 3, 2 )]<<32 - | extSigX[indexWord( 3, 1 )]; - if ( negateB ) { - sigZ -= sigB; - sigZExtra = extSigX[indexWordLo( 3 )]; - if ( sigZExtra ) { - --sigZ; - sigZExtra = -sigZExtra; - } - if ( ! (sigZ & UINT64_C( 0x8000000000000000 )) ) { - if ( sigZ & UINT64_C( 0x4000000000000000 ) ) { - --expA; - sigZ = sigZ<<1 | sigZExtra>>31; - sigZExtra <<= 1; - } else { - roundPackRoutinePtr = softfloat_normRoundPackMToExtF80M; - } - } - } else { - sigZ += sigB; - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) goto sigZ; - sigZExtra = (uint32_t) sigZ<<31 | (extSigX[indexWordLo( 3 )] != 0); - goto completeNormAfterAdd; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigZExtra = 0; - if ( negateB ) { - if ( sigZ < sigB ) { - signZ = ! signZ; - sigZ = sigB - sigZ; - } else { - sigZ -= sigB; - if ( ! sigZ ) { - signZ = (softfloat_roundingMode == softfloat_round_min); - zSPtr->signExp = packToExtF80UI64( signZ, 0 ); - zSPtr->signif = 0; - return; - } - } - roundPackRoutinePtr = softfloat_normRoundPackMToExtF80M; - } else { - sigZ += sigB; - if ( sigZ < sigB ) { - sigZExtra = (uint32_t) sigZ<<31; - completeNormAfterAdd: - ++expA; - sigZ = UINT64_C( 0x8000000000000000 ) | sigZ>>1; - } else { - if ( ! (sigZ & UINT64_C( 0x8000000000000000 )) ) { - roundPackRoutinePtr = softfloat_normRoundPackMToExtF80M; - } - } - } - } - extSigX[indexWord( 3, 0 )] = sigZExtra; - sigZ: - extSigX[indexWord( 3, 2 )] = sigZ>>32; - extSigX[indexWord( 3, 1 )] = sigZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundPack: - (*roundPackRoutinePtr)( - signZ, expA, extSigX, extF80_roundingPrecision, zSPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_addF128M.c b/addins/SoftFloat-3e/source/s_addF128M.c deleted file mode 100644 index 8ed9d271f..000000000 --- a/addins/SoftFloat-3e/source/s_addF128M.c +++ /dev/null @@ -1,211 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -void - softfloat_addF128M( - const uint32_t *aWPtr, - const uint32_t *bWPtr, - uint32_t *zWPtr, - bool negateB - ) -{ - uint32_t uiA96; - int32_t expA; - uint32_t uiB96; - int32_t expB; - uint32_t uiZ96; - bool signZ, signB; - const uint32_t *tempPtr; - uint32_t sig96A, sig96B; - int32_t expDiff; - uint_fast8_t - (*addCarryMRoutinePtr)( - uint_fast8_t, - const uint32_t *, - const uint32_t *, - uint_fast8_t, - uint32_t * - ); - uint32_t extSigZ[5], wordSigZ; - uint_fast8_t carry; - void (*roundPackRoutinePtr)( bool, int32_t, uint32_t *, uint32_t * ); - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - expB = expF128UI96( uiB96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - uiZ96 = uiA96; - if ( expB == 0x7FFF ) { - uiZ96 = uiB96 ^ packToF128UI96( negateB, 0, 0 ); - if ( (expA == 0x7FFF) && (uiZ96 != uiA96) ) { - softfloat_invalidF128M( zWPtr ); - return; - } - } - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - return; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signZ = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ) ^ negateB; - negateB = (signZ != signB); - if ( (uint32_t) (uiA96<<1) < (uint32_t) (uiB96<<1) ) { - signZ = signB; - expA = expB; - expB = expF128UI96( uiA96 ); - tempPtr = aWPtr; - aWPtr = bWPtr; - bWPtr = tempPtr; - uiA96 = uiB96; - uiB96 = bWPtr[indexWordHi( 4 )]; - } - sig96A = fracF128UI96( uiA96 ); - sig96B = fracF128UI96( uiB96 ); - if ( expA ) { - --expA; - sig96A |= 0x00010000; - if ( expB ) { - --expB; - sig96B |= 0x00010000; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - addCarryMRoutinePtr = - negateB ? softfloat_addComplCarryM : softfloat_addCarryM; - expDiff = expA - expB; - if ( expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - extSigZ[indexWordHi( 5 )] = sig96B; - extSigZ[indexWord( 5, 3 )] = bWPtr[indexWord( 4, 2 )]; - extSigZ[indexWord( 5, 2 )] = bWPtr[indexWord( 4, 1 )]; - extSigZ[indexWord( 5, 1 )] = bWPtr[indexWord( 4, 0 )]; - extSigZ[indexWord( 5, 0 )] = 0; - softfloat_shiftRightJam160M( extSigZ, expDiff, extSigZ ); - sig96B = extSigZ[indexWordHi( 5 )]; - carry = 0; - if ( negateB ) { - sig96B = ~sig96B; - wordSigZ = extSigZ[indexWordLo( 5 )]; - extSigZ[indexWordLo( 5 )] = -wordSigZ; - carry = ! wordSigZ; - } - carry = - (*addCarryMRoutinePtr)( - 3, - &aWPtr[indexMultiwordLo( 4, 3 )], - &extSigZ[indexMultiword( 5, 3, 1 )], - carry, - &extSigZ[indexMultiword( 5, 3, 1 )] - ); - wordSigZ = sig96A + sig96B + carry; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - extSigZ[indexWordLo( 5 )] = 0; - carry = - (*addCarryMRoutinePtr)( - 3, - &aWPtr[indexMultiwordLo( 4, 3 )], - &bWPtr[indexMultiwordLo( 4, 3 )], - negateB, - &extSigZ[indexMultiword( 5, 3, 1 )] - ); - if ( negateB ) { - wordSigZ = sig96A + ~sig96B + carry; - if ( wordSigZ & 0x80000000 ) { - signZ = ! signZ; - carry = - softfloat_addComplCarry96M( - &bWPtr[indexMultiwordLo( 4, 3 )], - &aWPtr[indexMultiwordLo( 4, 3 )], - 1, - &extSigZ[indexMultiword( 5, 3, 1 )] - ); - wordSigZ = sig96B + ~sig96A + carry; - } else { - if ( - ! wordSigZ && ! extSigZ[indexWord( 5, 3 )] - && ! ( extSigZ[indexWord( 5, 2 )] - | extSigZ[indexWord( 5, 1 )] - | extSigZ[indexWord( 5, 0 )] - ) - ) { - signZ = (softfloat_roundingMode == softfloat_round_min); - zWPtr[indexWordHi( 4 )] = packToF128UI96( signZ, 0, 0 ); - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - return; - } - } - } else { - wordSigZ = sig96A + sig96B + carry; - } - } - extSigZ[indexWordHi( 5 )] = wordSigZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundPackRoutinePtr = softfloat_normRoundPackMToF128M; - if ( 0x00010000 <= wordSigZ ) { - if ( 0x00020000 <= wordSigZ ) { - ++expA; - softfloat_shortShiftRightJam160M( extSigZ, 1, extSigZ ); - } - roundPackRoutinePtr = softfloat_roundPackMToF128M; - } - (*roundPackRoutinePtr)( signZ, expA, extSigZ, zWPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_addM.c b/addins/SoftFloat-3e/source/s_addM.c deleted file mode 100644 index c935baaf7..000000000 --- a/addins/SoftFloat-3e/source/s_addM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_addM - -void - softfloat_addM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint_fast8_t carry; - uint32_t wordA, wordZ; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - carry = 0; - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + bPtr[index] + carry; - zPtr[index] = wordZ; - if ( index == lastIndex ) break; - if ( wordZ != wordA ) carry = (wordZ < wordA); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addMagsExtF80.c b/addins/SoftFloat-3e/source/s_addMagsExtF80.c deleted file mode 100644 index b1bb5dbe6..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsExtF80.c +++ /dev/null @@ -1,156 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t - softfloat_addMagsExtF80( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - uint_fast64_t sigA; - int_fast32_t expB; - uint_fast64_t sigB; - int_fast32_t expDiff; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0, sigZ, sigZExtra; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - struct uint64_extra sig64Extra; - struct uint128 uiZ; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - if ( expA == 0x7FFF ) { - if ( (sigA | sigB) & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - goto propagateNaN; - } - uiZ64 = uiA64; - uiZ0 = uiA0; - goto uiZ; - } - sigZ = sigA + sigB; - sigZExtra = 0; - if ( ! expA ) { - normExpSig = softfloat_normSubnormalExtF80Sig( sigZ ); - expZ = normExpSig.exp + 1; - sigZ = normExpSig.sig; - goto roundAndPack; - } - expZ = expA; - goto shiftRight1; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = uiB0; - goto uiZ; - } - expZ = expB; - if ( ! expA ) { - ++expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig64Extra = softfloat_shiftRightJam64Extra( sigA, 0, -expDiff ); - sigA = sig64Extra.v; - sigZExtra = sig64Extra.extra; - } else { - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = uiA64; - uiZ0 = uiA0; - goto uiZ; - } - expZ = expA; - if ( ! expB ) { - --expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig64Extra = softfloat_shiftRightJam64Extra( sigB, 0, expDiff ); - sigB = sig64Extra.v; - sigZExtra = sig64Extra.extra; - } - newlyAligned: - sigZ = sigA + sigB; - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) goto roundAndPack; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftRight1: - sig64Extra = softfloat_shortShiftRightJam64Extra( sigZ, sigZExtra, 1 ); - sigZ = sig64Extra.v | UINT64_C( 0x8000000000000000 ); - sigZExtra = sig64Extra.extra; - ++expZ; - roundAndPack: - return - softfloat_roundPackToExtF80( - signZ, expZ, sigZ, sigZExtra, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF128.c b/addins/SoftFloat-3e/source/s_addMagsF128.c deleted file mode 100644 index 8e5ce5b34..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF128.c +++ /dev/null @@ -1,154 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -float128_t - softfloat_addMagsF128( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - struct uint128 sigA; - int_fast32_t expB; - struct uint128 sigB; - int_fast32_t expDiff; - struct uint128 uiZ, sigZ; - int_fast32_t expZ; - uint_fast64_t sigZExtra; - struct uint128_extra sig128Extra; - union ui128_f128 uZ; - - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - expDiff = expA - expB; - if ( ! expDiff ) { - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 | sigB.v64 | sigB.v0 ) goto propagateNaN; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - goto uiZ; - } - sigZ = softfloat_add128( sigA.v64, sigA.v0, sigB.v64, sigB.v0 ); - if ( ! expA ) { - uiZ.v64 = packToF128UI64( signZ, 0, sigZ.v64 ); - uiZ.v0 = sigZ.v0; - goto uiZ; - } - expZ = expA; - sigZ.v64 |= UINT64_C( 0x0002000000000000 ); - sigZExtra = 0; - goto shiftRight1; - } - if ( expDiff < 0 ) { - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - expZ = expB; - if ( expA ) { - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - } else { - ++expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig128Extra = - softfloat_shiftRightJam128Extra( sigA.v64, sigA.v0, 0, -expDiff ); - sigA = sig128Extra.v; - sigZExtra = sig128Extra.extra; - } else { - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) goto propagateNaN; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - goto uiZ; - } - expZ = expA; - if ( expB ) { - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - } else { - --expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig128Extra = - softfloat_shiftRightJam128Extra( sigB.v64, sigB.v0, 0, expDiff ); - sigB = sig128Extra.v; - sigZExtra = sig128Extra.extra; - } - newlyAligned: - sigZ = - softfloat_add128( - sigA.v64 | UINT64_C( 0x0001000000000000 ), - sigA.v0, - sigB.v64, - sigB.v0 - ); - --expZ; - if ( sigZ.v64 < UINT64_C( 0x0002000000000000 ) ) goto roundAndPack; - ++expZ; - shiftRight1: - sig128Extra = - softfloat_shortShiftRightJam128Extra( - sigZ.v64, sigZ.v0, sigZExtra, 1 ); - sigZ = sig128Extra.v; - sigZExtra = sig128Extra.extra; - roundAndPack: - return - softfloat_roundPackToF128( signZ, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF16.c b/addins/SoftFloat-3e/source/s_addMagsF16.c deleted file mode 100644 index b7fba0928..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF16.c +++ /dev/null @@ -1,183 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t softfloat_addMagsF16( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - int_fast8_t expA; - uint_fast16_t sigA; - int_fast8_t expB; - uint_fast16_t sigB; - int_fast8_t expDiff; - uint_fast16_t uiZ; - bool signZ; - int_fast8_t expZ; - uint_fast16_t sigZ; - uint_fast16_t sigX, sigY; - int_fast8_t shiftDist; - uint_fast32_t sig32Z; - int_fast8_t roundingMode; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! expA ) { - uiZ = uiA + sigB; - goto uiZ; - } - if ( expA == 0x1F ) { - if ( sigA | sigB ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - signZ = signF16UI( uiA ); - expZ = expA; - sigZ = 0x0800 + sigA + sigB; - if ( ! (sigZ & 1) && (expZ < 0x1E) ) { - sigZ >>= 1; - goto pack; - } - sigZ <<= 3; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signF16UI( uiA ); - if ( expDiff < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - uiZ = packToF16UI( signZ, 0x1F, 0 ); - goto uiZ; - } - if ( expDiff <= -13 ) { - uiZ = packToF16UI( signZ, expB, sigB ); - if ( expA | sigA ) goto addEpsilon; - goto uiZ; - } - expZ = expB; - sigX = sigB | 0x0400; - sigY = sigA + (expA ? 0x0400 : sigA); - shiftDist = 19 + expDiff; - } else { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - uiZ = uiA; - if ( expA == 0x1F ) { - if ( sigA ) goto propagateNaN; - goto uiZ; - } - if ( 13 <= expDiff ) { - if ( expB | sigB ) goto addEpsilon; - goto uiZ; - } - expZ = expA; - sigX = sigA | 0x0400; - sigY = sigB + (expB ? 0x0400 : sigB); - shiftDist = 19 - expDiff; - } - sig32Z = - ((uint_fast32_t) sigX<<19) + ((uint_fast32_t) sigY<>16; - if ( sig32Z & 0xFFFF ) { - sigZ |= 1; - } else { - if ( ! (sigZ & 0xF) && (expZ < 0x1E) ) { - sigZ >>= 4; - goto pack; - } - } - } - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - addEpsilon: - roundingMode = softfloat_roundingMode; - if ( roundingMode != softfloat_round_near_even ) { - if ( - roundingMode - == (signF16UI( uiZ ) ? softfloat_round_min - : softfloat_round_max) - ) { - ++uiZ; - if ( (uint16_t) (uiZ<<1) == 0xF800 ) { - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - } - } -#ifdef SOFTFLOAT_ROUND_ODD - else if ( roundingMode == softfloat_round_odd ) { - uiZ |= 1; - } -#endif - } - softfloat_exceptionFlags |= softfloat_flag_inexact; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - pack: - uiZ = packToF16UI( signZ, expZ, sigZ ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF32.c b/addins/SoftFloat-3e/source/s_addMagsF32.c deleted file mode 100644 index b74489dec..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF32.c +++ /dev/null @@ -1,126 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -float32_t softfloat_addMagsF32( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - int_fast16_t expA; - uint_fast32_t sigA; - int_fast16_t expB; - uint_fast32_t sigB; - int_fast16_t expDiff; - uint_fast32_t uiZ; - bool signZ; - int_fast16_t expZ; - uint_fast32_t sigZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! expA ) { - uiZ = uiA + sigB; - goto uiZ; - } - if ( expA == 0xFF ) { - if ( sigA | sigB ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - signZ = signF32UI( uiA ); - expZ = expA; - sigZ = 0x01000000 + sigA + sigB; - if ( ! (sigZ & 1) && (expZ < 0xFE) ) { - uiZ = packToF32UI( signZ, expZ, sigZ>>1 ); - goto uiZ; - } - sigZ <<= 6; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signF32UI( uiA ); - sigA <<= 6; - sigB <<= 6; - if ( expDiff < 0 ) { - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - uiZ = packToF32UI( signZ, 0xFF, 0 ); - goto uiZ; - } - expZ = expB; - sigA += expA ? 0x20000000 : sigA; - sigA = softfloat_shiftRightJam32( sigA, -expDiff ); - } else { - if ( expA == 0xFF ) { - if ( sigA ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - expZ = expA; - sigB += expB ? 0x20000000 : sigB; - sigB = softfloat_shiftRightJam32( sigB, expDiff ); - } - sigZ = 0x20000000 + sigA + sigB; - if ( sigZ < 0x40000000 ) { - --expZ; - sigZ <<= 1; - } - } - return softfloat_roundPackToF32( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF64.c b/addins/SoftFloat-3e/source/s_addMagsF64.c deleted file mode 100644 index e8a489874..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF64.c +++ /dev/null @@ -1,128 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -float64_t - softfloat_addMagsF64( uint_fast64_t uiA, uint_fast64_t uiB, bool signZ ) -{ - int_fast16_t expA; - uint_fast64_t sigA; - int_fast16_t expB; - uint_fast64_t sigB; - int_fast16_t expDiff; - uint_fast64_t uiZ; - int_fast16_t expZ; - uint_fast64_t sigZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! expA ) { - uiZ = uiA + sigB; - goto uiZ; - } - if ( expA == 0x7FF ) { - if ( sigA | sigB ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - expZ = expA; - sigZ = UINT64_C( 0x0020000000000000 ) + sigA + sigB; - sigZ <<= 9; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigA <<= 9; - sigB <<= 9; - if ( expDiff < 0 ) { - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - goto uiZ; - } - expZ = expB; - if ( expA ) { - sigA += UINT64_C( 0x2000000000000000 ); - } else { - sigA <<= 1; - } - sigA = softfloat_shiftRightJam64( sigA, -expDiff ); - } else { - if ( expA == 0x7FF ) { - if ( sigA ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - expZ = expA; - if ( expB ) { - sigB += UINT64_C( 0x2000000000000000 ); - } else { - sigB <<= 1; - } - sigB = softfloat_shiftRightJam64( sigB, expDiff ); - } - sigZ = UINT64_C( 0x2000000000000000 ) + sigA + sigB; - if ( sigZ < UINT64_C( 0x4000000000000000 ) ) { - --expZ; - sigZ <<= 1; - } - } - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_approxRecip32_1.c b/addins/SoftFloat-3e/source/s_approxRecip32_1.c deleted file mode 100644 index 4a326a438..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecip32_1.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_approxRecip32_1 - -extern const uint16_t softfloat_approxRecip_1k0s[16]; -extern const uint16_t softfloat_approxRecip_1k1s[16]; - -uint32_t softfloat_approxRecip32_1( uint32_t a ) -{ - int index; - uint16_t eps, r0; - uint32_t sigma0; - uint_fast32_t r; - uint32_t sqrSigma0; - - index = a>>27 & 0xF; - eps = (uint16_t) (a>>11); - r0 = softfloat_approxRecip_1k0s[index] - - ((softfloat_approxRecip_1k1s[index] * (uint_fast32_t) eps)>>20); - sigma0 = ~(uint_fast32_t) ((r0 * (uint_fast64_t) a)>>7); - r = ((uint_fast32_t) r0<<16) + ((r0 * (uint_fast64_t) sigma0)>>24); - sqrSigma0 = ((uint_fast64_t) sigma0 * sigma0)>>32; - r += ((uint32_t) r * (uint_fast64_t) sqrSigma0)>>48; - return r; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_approxRecipSqrt32_1.c b/addins/SoftFloat-3e/source/s_approxRecipSqrt32_1.c deleted file mode 100644 index b3fdeba68..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecipSqrt32_1.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_approxRecipSqrt32_1 - -extern const uint16_t softfloat_approxRecipSqrt_1k0s[]; -extern const uint16_t softfloat_approxRecipSqrt_1k1s[]; - -uint32_t softfloat_approxRecipSqrt32_1( unsigned int oddExpA, uint32_t a ) -{ - int index; - uint16_t eps, r0; - uint_fast32_t ESqrR0; - uint32_t sigma0; - uint_fast32_t r; - uint32_t sqrSigma0; - - index = (a>>27 & 0xE) + oddExpA; - eps = (uint16_t) (a>>12); - r0 = softfloat_approxRecipSqrt_1k0s[index] - - ((softfloat_approxRecipSqrt_1k1s[index] * (uint_fast32_t) eps) - >>20); - ESqrR0 = (uint_fast32_t) r0 * r0; - if ( ! oddExpA ) ESqrR0 <<= 1; - sigma0 = ~(uint_fast32_t) (((uint32_t) ESqrR0 * (uint_fast64_t) a)>>23); - r = ((uint_fast32_t) r0<<16) + ((r0 * (uint_fast64_t) sigma0)>>25); - sqrSigma0 = ((uint_fast64_t) sigma0 * sigma0)>>32; - r += ((uint32_t) ((r>>1) + (r>>3) - ((uint_fast32_t) r0<<14)) - * (uint_fast64_t) sqrSigma0) - >>48; - if ( ! (r & 0x80000000) ) r = 0x80000000; - return r; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c b/addins/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c deleted file mode 100644 index 38a27985c..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitives.h" - -const uint16_t softfloat_approxRecipSqrt_1k0s[16] = { - 0xB4C9, 0xFFAB, 0xAA7D, 0xF11C, 0xA1C5, 0xE4C7, 0x9A43, 0xDA29, - 0x93B5, 0xD0E5, 0x8DED, 0xC8B7, 0x88C6, 0xC16D, 0x8424, 0xBAE1 -}; -const uint16_t softfloat_approxRecipSqrt_1k1s[16] = { - 0xA5A5, 0xEA42, 0x8C21, 0xC62D, 0x788F, 0xAA7F, 0x6928, 0x94B6, - 0x5CC7, 0x8335, 0x52A6, 0x74E2, 0x4A3E, 0x68FE, 0x432B, 0x5EFD -}; - diff --git a/addins/SoftFloat-3e/source/s_approxRecip_1Ks.c b/addins/SoftFloat-3e/source/s_approxRecip_1Ks.c deleted file mode 100644 index f1fca74e7..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecip_1Ks.c +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitives.h" - -const uint16_t softfloat_approxRecip_1k0s[16] = { - 0xFFC4, 0xF0BE, 0xE363, 0xD76F, 0xCCAD, 0xC2F0, 0xBA16, 0xB201, - 0xAA97, 0xA3C6, 0x9D7A, 0x97A6, 0x923C, 0x8D32, 0x887E, 0x8417 -}; -const uint16_t softfloat_approxRecip_1k1s[16] = { - 0xF0F1, 0xD62C, 0xBFA1, 0xAC77, 0x9C0A, 0x8DDB, 0x8185, 0x76BA, - 0x6D3B, 0x64D4, 0x5D5C, 0x56B1, 0x50B6, 0x4B55, 0x4679, 0x4211 -}; - diff --git a/addins/SoftFloat-3e/source/s_compare128M.c b/addins/SoftFloat-3e/source/s_compare128M.c deleted file mode 100644 index dc97ce9e5..000000000 --- a/addins/SoftFloat-3e/source/s_compare128M.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_compare128M - -int_fast8_t softfloat_compare128M( const uint32_t *aPtr, const uint32_t *bPtr ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordB; - - index = indexWordHi( 4 ); - lastIndex = indexWordLo( 4 ); - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - if ( wordA != wordB ) return (wordA < wordB) ? -1 : 1; - if ( index == lastIndex ) break; - index -= wordIncr; - } - return 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_compare96M.c b/addins/SoftFloat-3e/source/s_compare96M.c deleted file mode 100644 index 2681c4627..000000000 --- a/addins/SoftFloat-3e/source/s_compare96M.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_compare96M - -int_fast8_t softfloat_compare96M( const uint32_t *aPtr, const uint32_t *bPtr ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordB; - - index = indexWordHi( 3 ); - lastIndex = indexWordLo( 3 ); - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - if ( wordA != wordB ) return (wordA < wordB) ? -1 : 1; - if ( index == lastIndex ) break; - index -= wordIncr; - } - return 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_compareNonnormExtF80M.c b/addins/SoftFloat-3e/source/s_compareNonnormExtF80M.c deleted file mode 100644 index 267315304..000000000 --- a/addins/SoftFloat-3e/source/s_compareNonnormExtF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "internals.h" -#include "softfloat_types.h" - -int - softfloat_compareNonnormExtF80M( - const struct extFloat80M *aSPtr, const struct extFloat80M *bSPtr ) -{ - uint_fast16_t uiA64, uiB64; - uint64_t sigA; - bool signB; - uint64_t sigB; - int32_t expA, expB; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiB64 = bSPtr->signExp; - sigA = aSPtr->signif; - signB = signExtF80UI64( uiB64 ); - sigB = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (uiA64 ^ uiB64) & 0x8000 ) { - if ( ! (sigA | sigB) ) return 0; - goto resultFromSignB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expExtF80UI64( uiA64 ); - expB = expExtF80UI64( uiB64 ); - if ( expA == 0x7FFF ) { - if (expB == 0x7FFF) return 0; - signB = ! signB; - goto resultFromSignB; - } - if ( expB == 0x7FFF ) { - goto resultFromSignB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( sigA ) { - expA += softfloat_normExtF80SigM( &sigA ); - } else { - expA = -128; - } - } - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( sigB ) { - expB += softfloat_normExtF80SigM( &sigB ); - } else { - expB = -128; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signB ) { - if ( expA < expB ) return 1; - if ( (expB < expA) || (sigB < sigA) ) return -1; - } else { - if ( expB < expA ) return 1; - if ( (expA < expB) || (sigA < sigB) ) return -1; - } - return (sigA != sigB); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - resultFromSignB: - return signB ? 1 : -1; - -} - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros16.c b/addins/SoftFloat-3e/source/s_countLeadingZeros16.c deleted file mode 100644 index 7a68da52f..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros16.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" - -#ifndef softfloat_countLeadingZeros16 - -#define softfloat_countLeadingZeros16 softfloat_countLeadingZeros16 -#include "primitives.h" - -uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ) -{ - uint_fast8_t count; - - count = 8; - if ( 0x100 <= a ) { - count = 0; - a >>= 8; - } - count += softfloat_countLeadingZeros8[a]; - return count; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros32.c b/addins/SoftFloat-3e/source/s_countLeadingZeros32.c deleted file mode 100644 index 53ab22824..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros32.c +++ /dev/null @@ -1,64 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" - -#ifndef softfloat_countLeadingZeros32 - -#define softfloat_countLeadingZeros32 softfloat_countLeadingZeros32 -#include "primitives.h" - -uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ) -{ - uint_fast8_t count; - - count = 0; - if ( a < 0x10000 ) { - count = 16; - a <<= 16; - } - if ( a < 0x1000000 ) { - count += 8; - a <<= 8; - } - count += softfloat_countLeadingZeros8[a>>24]; - return count; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros64.c b/addins/SoftFloat-3e/source/s_countLeadingZeros64.c deleted file mode 100644 index 13a222463..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros64.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" - -#ifndef softfloat_countLeadingZeros64 - -#define softfloat_countLeadingZeros64 softfloat_countLeadingZeros64 -#include "primitives.h" - -uint_fast8_t softfloat_countLeadingZeros64( uint64_t a ) -{ - uint_fast8_t count; - uint32_t a32; - - count = 0; - a32 = a>>32; - if ( ! a32 ) { - count = 32; - a32 = a; - } - /*------------------------------------------------------------------------ - | From here, result is current count + count leading zeros of `a32'. - *------------------------------------------------------------------------*/ - if ( a32 < 0x10000 ) { - count += 16; - a32 <<= 16; - } - if ( a32 < 0x1000000 ) { - count += 8; - a32 <<= 8; - } - count += softfloat_countLeadingZeros8[a32>>24]; - return count; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros8.c b/addins/SoftFloat-3e/source/s_countLeadingZeros8.c deleted file mode 100644 index a56f5a40c..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros8.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitives.h" - -const uint_least8_t softfloat_countLeadingZeros8[256] = { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - diff --git a/addins/SoftFloat-3e/source/s_eq128.c b/addins/SoftFloat-3e/source/s_eq128.c deleted file mode 100644 index 275b8ae29..000000000 --- a/addins/SoftFloat-3e/source/s_eq128.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" - -#ifndef softfloat_eq128 - -bool softfloat_eq128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - - return (a64 == b64) && (a0 == b0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_invalidExtF80M.c b/addins/SoftFloat-3e/source/s_invalidExtF80M.c deleted file mode 100644 index 237d21721..000000000 --- a/addins/SoftFloat-3e/source/s_invalidExtF80M.c +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -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 "specialize.h" -#include "softfloat.h" - -void softfloat_invalidExtF80M( struct extFloat80M *zSPtr ) -{ - - softfloat_raiseFlags( softfloat_flag_invalid ); - zSPtr->signExp = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; - -} - diff --git a/addins/SoftFloat-3e/source/s_invalidF128M.c b/addins/SoftFloat-3e/source/s_invalidF128M.c deleted file mode 100644 index a20840e5f..000000000 --- a/addins/SoftFloat-3e/source/s_invalidF128M.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -void softfloat_invalidF128M( uint32_t *zWPtr ) -{ - - softfloat_raiseFlags( softfloat_flag_invalid ); - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; - -} - diff --git a/addins/SoftFloat-3e/source/s_isNaNF128M.c b/addins/SoftFloat-3e/source/s_isNaNF128M.c deleted file mode 100644 index 6008cf3eb..000000000 --- a/addins/SoftFloat-3e/source/s_isNaNF128M.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "primitives.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool softfloat_isNaNF128M( const uint32_t *aWPtr ) -{ - uint32_t uiA96; - - uiA96 = aWPtr[indexWordHi( 4 )]; - if ( (~uiA96 & 0x7FFF0000) != 0 ) return false; - return - ((uiA96 & 0x0000FFFF) != 0) - || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - -} - diff --git a/addins/SoftFloat-3e/source/s_le128.c b/addins/SoftFloat-3e/source/s_le128.c deleted file mode 100644 index 1fce7af98..000000000 --- a/addins/SoftFloat-3e/source/s_le128.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" - -#ifndef softfloat_le128 - -bool softfloat_le128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - - return (a64 < b64) || ((a64 == b64) && (a0 <= b0)); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_lt128.c b/addins/SoftFloat-3e/source/s_lt128.c deleted file mode 100644 index d7ce3b997..000000000 --- a/addins/SoftFloat-3e/source/s_lt128.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" - -#ifndef softfloat_lt128 - -bool softfloat_lt128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - - return (a64 < b64) || ((a64 == b64) && (a0 < b0)); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul128By32.c b/addins/SoftFloat-3e/source/s_mul128By32.c deleted file mode 100644 index 7c0fdc867..000000000 --- a/addins/SoftFloat-3e/source/s_mul128By32.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul128By32 - -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ) -{ - struct uint128 z; - uint_fast64_t mid; - uint_fast32_t carry; - - z.v0 = a0 * b; - mid = (uint_fast64_t) (uint32_t) (a0>>32) * b; - carry = (uint32_t) ((uint_fast32_t) (z.v0>>32) - (uint_fast32_t) mid); - z.v64 = a64 * b + (uint_fast32_t) ((mid + carry)>>32); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul128MTo256M.c b/addins/SoftFloat-3e/source/s_mul128MTo256M.c deleted file mode 100644 index ea8865ea3..000000000 --- a/addins/SoftFloat-3e/source/s_mul128MTo256M.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul128MTo256M - -void - softfloat_mul128MTo256M( - const uint32_t *aPtr, const uint32_t *bPtr, uint32_t *zPtr ) -{ - uint32_t *lastZPtr, wordB; - uint64_t dwordProd; - uint32_t wordZ; - uint_fast8_t carry; - - bPtr += indexWordLo( 4 ); - lastZPtr = zPtr + indexMultiwordHi( 8, 5 ); - zPtr += indexMultiwordLo( 8, 5 ); - wordB = *bPtr; - dwordProd = (uint64_t) aPtr[indexWord( 4, 0 )] * wordB; - zPtr[indexWord( 5, 0 )] = dwordProd; - dwordProd = (uint64_t) aPtr[indexWord( 4, 1 )] * wordB + (dwordProd>>32); - zPtr[indexWord( 5, 1 )] = dwordProd; - dwordProd = (uint64_t) aPtr[indexWord( 4, 2 )] * wordB + (dwordProd>>32); - zPtr[indexWord( 5, 2 )] = dwordProd; - dwordProd = (uint64_t) aPtr[indexWord( 4, 3 )] * wordB + (dwordProd>>32); - zPtr[indexWord( 5, 3 )] = dwordProd; - zPtr[indexWord( 5, 4 )] = dwordProd>>32; - do { - bPtr += wordIncr; - zPtr += wordIncr; - wordB = *bPtr; - dwordProd = (uint64_t) aPtr[indexWord( 4, 0 )] * wordB; - wordZ = zPtr[indexWord( 5, 0 )] + (uint32_t) dwordProd; - zPtr[indexWord( 5, 0 )] = wordZ; - carry = (wordZ < (uint32_t) dwordProd); - dwordProd = - (uint64_t) aPtr[indexWord( 4, 1 )] * wordB + (dwordProd>>32); - wordZ = zPtr[indexWord( 5, 1 )] + (uint32_t) dwordProd + carry; - zPtr[indexWord( 5, 1 )] = wordZ; - if ( wordZ != (uint32_t) dwordProd ) { - carry = (wordZ < (uint32_t) dwordProd); - } - dwordProd = - (uint64_t) aPtr[indexWord( 4, 2 )] * wordB + (dwordProd>>32); - wordZ = zPtr[indexWord( 5, 2 )] + (uint32_t) dwordProd + carry; - zPtr[indexWord( 5, 2 )] = wordZ; - if ( wordZ != (uint32_t) dwordProd ) { - carry = (wordZ < (uint32_t) dwordProd); - } - dwordProd = - (uint64_t) aPtr[indexWord( 4, 3 )] * wordB + (dwordProd>>32); - wordZ = zPtr[indexWord( 5, 3 )] + (uint32_t) dwordProd + carry; - zPtr[indexWord( 5, 3 )] = wordZ; - if ( wordZ != (uint32_t) dwordProd ) { - carry = (wordZ < (uint32_t) dwordProd); - } - zPtr[indexWord( 5, 4 )] = (dwordProd>>32) + carry; - } while ( zPtr != lastZPtr ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul128To256M.c b/addins/SoftFloat-3e/source/s_mul128To256M.c deleted file mode 100644 index 7c9d9b584..000000000 --- a/addins/SoftFloat-3e/source/s_mul128To256M.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" - -#ifndef softfloat_mul128To256M - -#define softfloat_mul128To256M softfloat_mul128To256M -#include "primitives.h" - -void - softfloat_mul128To256M( - uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0, uint64_t *zPtr ) -{ - struct uint128 p0, p64, p128; - uint_fast64_t z64, z128, z192; - - p0 = softfloat_mul64To128( a0, b0 ); - zPtr[indexWord( 4, 0 )] = p0.v0; - p64 = softfloat_mul64To128( a64, b0 ); - z64 = p64.v0 + p0.v64; - z128 = p64.v64 + (z64 < p64.v0); - p128 = softfloat_mul64To128( a64, b64 ); - z128 += p128.v0; - z192 = p128.v64 + (z128 < p128.v0); - p64 = softfloat_mul64To128( a0, b64 ); - z64 += p64.v0; - zPtr[indexWord( 4, 1 )] = z64; - p64.v64 += (z64 < p64.v0); - z128 += p64.v64; - zPtr[indexWord( 4, 2 )] = z128; - zPtr[indexWord( 4, 3 )] = z192 + (z128 < p64.v64); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul64ByShifted32To128.c b/addins/SoftFloat-3e/source/s_mul64ByShifted32To128.c deleted file mode 100644 index 57e528888..000000000 --- a/addins/SoftFloat-3e/source/s_mul64ByShifted32To128.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul64ByShifted32To128 - -struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ) -{ - uint_fast64_t mid; - struct uint128 z; - - mid = (uint_fast64_t) (uint32_t) a * b; - z.v0 = mid<<32; - z.v64 = (uint_fast64_t) (uint32_t) (a>>32) * b + (mid>>32); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul64To128.c b/addins/SoftFloat-3e/source/s_mul64To128.c deleted file mode 100644 index 5d360aa4b..000000000 --- a/addins/SoftFloat-3e/source/s_mul64To128.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul64To128 - -struct uint128 softfloat_mul64To128( uint64_t a, uint64_t b ) -{ - uint32_t a32, a0, b32, b0; - struct uint128 z; - uint64_t mid1, mid; - - a32 = a>>32; - a0 = a; - b32 = b>>32; - b0 = b; - z.v0 = (uint_fast64_t) a0 * b0; - mid1 = (uint_fast64_t) a32 * b0; - mid = mid1 + (uint_fast64_t) a0 * b32; - z.v64 = (uint_fast64_t) a32 * b32; - z.v64 += (uint_fast64_t) (mid < mid1)<<32 | mid>>32; - mid <<= 32; - z.v0 += mid; - z.v64 += (z.v0 < mid); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul64To128M.c b/addins/SoftFloat-3e/source/s_mul64To128M.c deleted file mode 100644 index ed10be324..000000000 --- a/addins/SoftFloat-3e/source/s_mul64To128M.c +++ /dev/null @@ -1,68 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul64To128M - -void softfloat_mul64To128M( uint64_t a, uint64_t b, uint32_t *zPtr ) -{ - uint32_t a32, a0, b32, b0; - uint64_t z0, mid1, z64, mid; - - a32 = a>>32; - a0 = a; - b32 = b>>32; - b0 = b; - z0 = (uint64_t) a0 * b0; - mid1 = (uint64_t) a32 * b0; - mid = mid1 + (uint64_t) a0 * b32; - z64 = (uint64_t) a32 * b32; - z64 += (uint64_t) (mid < mid1)<<32 | mid>>32; - mid <<= 32; - z0 += mid; - zPtr[indexWord( 4, 1 )] = z0>>32; - zPtr[indexWord( 4, 0 )] = z0; - z64 += (z0 < mid); - zPtr[indexWord( 4, 3 )] = z64>>32; - zPtr[indexWord( 4, 2 )] = z64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mulAddF128.c b/addins/SoftFloat-3e/source/s_mulAddF128.c deleted file mode 100644 index f6b2b45df..000000000 --- a/addins/SoftFloat-3e/source/s_mulAddF128.c +++ /dev/null @@ -1,350 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t - softfloat_mulAddF128( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0, - uint_fast64_t uiC64, - uint_fast64_t uiC0, - uint_fast8_t op - ) -{ - bool signA; - int_fast32_t expA; - struct uint128 sigA; - bool signB; - int_fast32_t expB; - struct uint128 sigB; - bool signC; - int_fast32_t expC; - struct uint128 sigC; - bool signZ; - uint_fast64_t magBits; - struct uint128 uiZ; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - uint64_t sig256Z[4]; - struct uint128 sigZ; - int_fast32_t shiftDist, expDiff; - struct uint128 x128; - uint64_t sig256C[4]; - static uint64_t zero256[4] = INIT_UINTM4( 0, 0, 0, 0 ); - uint_fast64_t sigZExtra, sig256Z0; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - signB = signF128UI64( uiB64 ); - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - signC = signF128UI64( uiC64 ) ^ (op == softfloat_mulAdd_subC); - expC = expF128UI64( uiC64 ); - sigC.v64 = fracF128UI64( uiC64 ); - sigC.v0 = uiC0; - signZ = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA.v64 | sigA.v0) || ((expB == 0x7FFF) && (sigB.v64 | sigB.v0)) - ) { - goto propagateNaN_ABC; - } - magBits = expB | sigB.v64 | sigB.v0; - goto infProdArg; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN_ABC; - magBits = expA | sigA.v64 | sigA.v0; - goto infProdArg; - } - if ( expC == 0x7FFF ) { - if ( sigC.v64 | sigC.v0 ) { - uiZ.v64 = 0; - uiZ.v0 = 0; - goto propagateNaN_ZC; - } - uiZ.v64 = uiC64; - uiZ.v0 = uiC0; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) goto zeroProd; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) goto zeroProd; - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FFE; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - sigA = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 8 ); - sigB = softfloat_shortShiftLeft128( sigB.v64, sigB.v0, 15 ); - softfloat_mul128To256M( sigA.v64, sigA.v0, sigB.v64, sigB.v0, sig256Z ); - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - shiftDist = 0; - if ( ! (sigZ.v64 & UINT64_C( 0x0100000000000000 )) ) { - --expZ; - shiftDist = -1; - } - if ( ! expC ) { - if ( ! (sigC.v64 | sigC.v0) ) { - shiftDist += 8; - goto sigZ; - } - normExpSig = softfloat_normSubnormalF128Sig( sigC.v64, sigC.v0 ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC.v64 |= UINT64_C( 0x0001000000000000 ); - sigC = softfloat_shortShiftLeft128( sigC.v64, sigC.v0, 8 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expZ - expC; - if ( expDiff < 0 ) { - expZ = expC; - if ( (signZ == signC) || (expDiff < -1) ) { - shiftDist -= expDiff; - if ( shiftDist ) { - sigZ = - softfloat_shiftRightJam128( sigZ.v64, sigZ.v0, shiftDist ); - } - } else { - if ( ! shiftDist ) { - x128 = - softfloat_shortShiftRight128( - sig256Z[indexWord( 4, 1 )], sig256Z[indexWord( 4, 0 )], - 1 - ); - sig256Z[indexWord( 4, 1 )] = (sigZ.v0<<63) | x128.v64; - sig256Z[indexWord( 4, 0 )] = x128.v0; - sigZ = softfloat_shortShiftRight128( sigZ.v64, sigZ.v0, 1 ); - sig256Z[indexWord( 4, 3 )] = sigZ.v64; - sig256Z[indexWord( 4, 2 )] = sigZ.v0; - } - } - } else { - if ( shiftDist ) softfloat_add256M( sig256Z, sig256Z, sig256Z ); - if ( ! expDiff ) { - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - } else { - sig256C[indexWord( 4, 3 )] = sigC.v64; - sig256C[indexWord( 4, 2 )] = sigC.v0; - sig256C[indexWord( 4, 1 )] = 0; - sig256C[indexWord( 4, 0 )] = 0; - softfloat_shiftRightJam256M( sig256C, expDiff, sig256C ); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 8; - if ( signZ == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - sigZ = softfloat_add128( sigC.v64, sigC.v0, sigZ.v64, sigZ.v0 ); - } else { - softfloat_add256M( sig256Z, sig256C, sig256Z ); - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - } - if ( sigZ.v64 & UINT64_C( 0x0200000000000000 ) ) { - ++expZ; - shiftDist = 9; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - signZ = signC; - if ( expDiff < -1 ) { - sigZ = - softfloat_sub128( sigC.v64, sigC.v0, sigZ.v64, sigZ.v0 ); - sigZExtra = - sig256Z[indexWord( 4, 1 )] | sig256Z[indexWord( 4, 0 )]; - if ( sigZExtra ) { - sigZ = softfloat_sub128( sigZ.v64, sigZ.v0, 0, 1 ); - } - if ( ! (sigZ.v64 & UINT64_C( 0x0100000000000000 )) ) { - --expZ; - shiftDist = 7; - } - goto shiftRightRoundPack; - } else { - sig256C[indexWord( 4, 3 )] = sigC.v64; - sig256C[indexWord( 4, 2 )] = sigC.v0; - sig256C[indexWord( 4, 1 )] = 0; - sig256C[indexWord( 4, 0 )] = 0; - softfloat_sub256M( sig256C, sig256Z, sig256Z ); - } - } else if ( ! expDiff ) { - sigZ = softfloat_sub128( sigZ.v64, sigZ.v0, sigC.v64, sigC.v0 ); - if ( - ! (sigZ.v64 | sigZ.v0) && ! sig256Z[indexWord( 4, 1 )] - && ! sig256Z[indexWord( 4, 0 )] - ) { - goto completeCancellation; - } - sig256Z[indexWord( 4, 3 )] = sigZ.v64; - sig256Z[indexWord( 4, 2 )] = sigZ.v0; - if ( sigZ.v64 & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - softfloat_sub256M( zero256, sig256Z, sig256Z ); - } - } else { - softfloat_sub256M( sig256Z, sig256C, sig256Z ); - if ( 1 < expDiff ) { - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - if ( ! (sigZ.v64 & UINT64_C( 0x0100000000000000 )) ) { - --expZ; - shiftDist = 7; - } - goto sigZ; - } - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - sigZExtra = sig256Z[indexWord( 4, 1 )]; - sig256Z0 = sig256Z[indexWord( 4, 0 )]; - if ( sigZ.v64 ) { - if ( sig256Z0 ) sigZExtra |= 1; - } else { - expZ -= 64; - sigZ.v64 = sigZ.v0; - sigZ.v0 = sigZExtra; - sigZExtra = sig256Z0; - if ( ! sigZ.v64 ) { - expZ -= 64; - sigZ.v64 = sigZ.v0; - sigZ.v0 = sigZExtra; - sigZExtra = 0; - if ( ! sigZ.v64 ) { - expZ -= 64; - sigZ.v64 = sigZ.v0; - sigZ.v0 = 0; - } - } - } - shiftDist = softfloat_countLeadingZeros64( sigZ.v64 ); - expZ += 7 - shiftDist; - shiftDist = 15 - shiftDist; - if ( 0 < shiftDist ) goto shiftRightRoundPack; - if ( shiftDist ) { - shiftDist = -shiftDist; - sigZ = softfloat_shortShiftLeft128( sigZ.v64, sigZ.v0, shiftDist ); - x128 = softfloat_shortShiftLeft128( 0, sigZExtra, shiftDist ); - sigZ.v0 |= x128.v64; - sigZExtra = x128.v0; - } - goto roundPack; - } - sigZ: - sigZExtra = sig256Z[indexWord( 4, 1 )] | sig256Z[indexWord( 4, 0 )]; - shiftRightRoundPack: - sigZExtra = (uint64_t) (sigZ.v0<<(64 - shiftDist)) | (sigZExtra != 0); - sigZ = softfloat_shortShiftRight128( sigZ.v64, sigZ.v0, shiftDist ); - roundPack: - return - softfloat_roundPackToF128( - signZ, expZ - 1, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN_ABC: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto propagateNaN_ZC; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infProdArg: - if ( magBits ) { - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - uiZ.v0 = 0; - if ( expC != 0x7FFF ) goto uiZ; - if ( sigC.v64 | sigC.v0 ) goto propagateNaN_ZC; - if ( signZ == signC ) goto uiZ; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - propagateNaN_ZC: - uiZ = softfloat_propagateNaNF128UI( uiZ.v64, uiZ.v0, uiC64, uiC0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - uiZ.v64 = uiC64; - uiZ.v0 = uiC0; - if ( ! (expC | sigC.v64 | sigC.v0) && (signZ != signC) ) { - completeCancellation: - uiZ.v64 = - packToF128UI64( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - uiZ.v0 = 0; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_mulAddF128M.c b/addins/SoftFloat-3e/source/s_mulAddF128M.c deleted file mode 100644 index f51fc71d2..000000000 --- a/addins/SoftFloat-3e/source/s_mulAddF128M.c +++ /dev/null @@ -1,382 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -void - softfloat_mulAddF128M( - const uint32_t *aWPtr, - const uint32_t *bWPtr, - const uint32_t *cWPtr, - uint32_t *zWPtr, - uint_fast8_t op - ) -{ - uint32_t uiA96; - int32_t expA; - uint32_t uiB96; - int32_t expB; - uint32_t uiC96; - bool signC; - int32_t expC; - bool signProd, prodIsInfinite; - uint32_t *ptr, uiZ96, sigA[4]; - uint_fast8_t shiftDist; - uint32_t sigX[5]; - int32_t expProd; - uint32_t sigProd[8], wordSig; - bool doSub; - uint_fast8_t - (*addCarryMRoutinePtr)( - uint_fast8_t, - const uint32_t *, - const uint32_t *, - uint_fast8_t, - uint32_t * - ); - int32_t expDiff; - bool signZ; - int32_t expZ; - uint32_t *extSigPtr; - uint_fast8_t carry; - void (*roundPackRoutinePtr)( bool, int32_t, uint32_t *, uint32_t * ); - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - expB = expF128UI96( uiB96 ); - uiC96 = cWPtr[indexWordHi( 4 )]; - signC = signF128UI96( uiC96 ) ^ (op == softfloat_mulAdd_subC); - expC = expF128UI96( uiC96 ); - signProd = - signF128UI96( uiA96 ) ^ signF128UI96( uiB96 ) - ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - prodIsInfinite = false; - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) { - goto propagateNaN_ZC; - } - ptr = (uint32_t *) aWPtr; - if ( ! (uint32_t) (uiA96<<1) ) goto possibleInvalidProd; - if ( ! (uint32_t) (uiB96<<1) ) { - ptr = (uint32_t *) bWPtr; - possibleInvalidProd: - if ( - ! (ptr[indexWord( 4, 2 )] | ptr[indexWord( 4, 1 )] - | ptr[indexWord( 4, 0 )]) - ) { - goto invalid; - } - } - prodIsInfinite = true; - } - if ( expC == 0x7FFF ) { - if ( - fracF128UI96( uiC96 ) - || (cWPtr[indexWord( 4, 2 )] | cWPtr[indexWord( 4, 1 )] - | cWPtr[indexWord( 4, 0 )]) - ) { - zWPtr[indexWordHi( 4 )] = 0; - goto propagateNaN_ZC; - } - if ( prodIsInfinite && (signProd != signC) ) goto invalid; - goto copyC; - } - if ( prodIsInfinite ) { - uiZ96 = packToF128UI96( signProd, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA ) { - sigA[indexWordHi( 4 )] = fracF128UI96( uiA96 ) | 0x00010000; - sigA[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sigA[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sigA[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - } else { - expA = softfloat_shiftNormSigF128M( aWPtr, 0, sigA ); - if ( expA == -128 ) goto zeroProd; - } - if ( expB ) { - sigX[indexWordHi( 4 )] = fracF128UI96( uiB96 ) | 0x00010000; - sigX[indexWord( 4, 2 )] = bWPtr[indexWord( 4, 2 )]; - sigX[indexWord( 4, 1 )] = bWPtr[indexWord( 4, 1 )]; - sigX[indexWord( 4, 0 )] = bWPtr[indexWord( 4, 0 )]; - } else { - expB = softfloat_shiftNormSigF128M( bWPtr, 0, sigX ); - if ( expB == -128 ) goto zeroProd; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expProd = expA + expB - 0x3FF0; - softfloat_mul128MTo256M( sigA, sigX, sigProd ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - wordSig = fracF128UI96( uiC96 ); - if ( expC ) { - --expC; - wordSig |= 0x00010000; - } - sigX[indexWordHi( 5 )] = wordSig; - sigX[indexWord( 5, 3 )] = cWPtr[indexWord( 4, 2 )]; - sigX[indexWord( 5, 2 )] = cWPtr[indexWord( 4, 1 )]; - sigX[indexWord( 5, 1 )] = cWPtr[indexWord( 4, 0 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - doSub = (signProd != signC); - addCarryMRoutinePtr = - doSub ? softfloat_addComplCarryM : softfloat_addCarryM; - expDiff = expProd - expC; - if ( expDiff <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signC; - expZ = expC; - if ( - sigProd[indexWord( 8, 2 )] - || (sigProd[indexWord( 8, 1 )] | sigProd[indexWord( 8, 0 )]) - ) { - sigProd[indexWord( 8, 3 )] |= 1; - } - extSigPtr = &sigProd[indexMultiwordHi( 8, 5 )]; - if ( expDiff ) { - softfloat_shiftRightJam160M( extSigPtr, -expDiff, extSigPtr ); - } - carry = 0; - if ( doSub ) { - wordSig = extSigPtr[indexWordLo( 5 )]; - extSigPtr[indexWordLo( 5 )] = -wordSig; - carry = ! wordSig; - } - (*addCarryMRoutinePtr)( - 4, - &sigX[indexMultiwordHi( 5, 4 )], - extSigPtr + indexMultiwordHi( 5, 4 ), - carry, - extSigPtr + indexMultiwordHi( 5, 4 ) - ); - wordSig = extSigPtr[indexWordHi( 5 )]; - if ( ! expZ ) { - if ( wordSig & 0x80000000 ) { - signZ = ! signZ; - softfloat_negX160M( extSigPtr ); - wordSig = extSigPtr[indexWordHi( 5 )]; - } - goto checkCancellation; - } - if ( wordSig < 0x00010000 ) { - --expZ; - softfloat_add160M( extSigPtr, extSigPtr, extSigPtr ); - goto roundPack; - } - goto extSigReady_noCancellation; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signProd; - expZ = expProd; - sigX[indexWordLo( 5 )] = 0; - expDiff -= 128; - if ( 0 <= expDiff ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - if ( expDiff ) softfloat_shiftRightJam160M( sigX, expDiff, sigX ); - wordSig = sigX[indexWordLo( 5 )]; - carry = 0; - if ( doSub ) { - carry = ! wordSig; - wordSig = -wordSig; - } - carry = - (*addCarryMRoutinePtr)( - 4, - &sigProd[indexMultiwordLo( 8, 4 )], - &sigX[indexMultiwordHi( 5, 4 )], - carry, - &sigProd[indexMultiwordLo( 8, 4 )] - ); - sigProd[indexWord( 8, 2 )] |= wordSig; - ptr = &sigProd[indexWord( 8, 4 )]; - } else { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - shiftDist = expDiff & 31; - if ( shiftDist ) { - softfloat_shortShiftRight160M( sigX, shiftDist, sigX ); - } - expDiff >>= 5; - extSigPtr = - &sigProd[indexMultiwordLo( 8, 5 )] - wordIncr - + expDiff * -wordIncr; - carry = - (*addCarryMRoutinePtr)( 5, extSigPtr, sigX, doSub, extSigPtr ); - if ( expDiff == -4 ) { - /*------------------------------------------------------------ - *------------------------------------------------------------*/ - wordSig = sigProd[indexWordHi( 8 )]; - if ( wordSig & 0x80000000 ) { - signZ = ! signZ; - softfloat_negX256M( sigProd ); - wordSig = sigProd[indexWordHi( 8 )]; - } - /*------------------------------------------------------------ - *------------------------------------------------------------*/ - if ( wordSig ) goto expProdBigger_noWordShift; - wordSig = sigProd[indexWord( 8, 6 )]; - if ( 0x00040000 <= wordSig ) goto expProdBigger_noWordShift; - expZ -= 32; - extSigPtr = &sigProd[indexMultiwordHi( 8, 5 )] - wordIncr; - for (;;) { - if ( wordSig ) break; - wordSig = extSigPtr[indexWord( 5, 3 )]; - if ( 0x00040000 <= wordSig ) break; - expZ -= 32; - extSigPtr -= wordIncr; - if ( extSigPtr == &sigProd[indexMultiwordLo( 8, 5 )] ) { - goto checkCancellation; - } - } - /*------------------------------------------------------------ - *------------------------------------------------------------*/ - ptr = extSigPtr + indexWordLo( 5 ); - do { - ptr -= wordIncr; - if ( *ptr ) { - extSigPtr[indexWordLo( 5 )] |= 1; - break; - } - } while ( ptr != &sigProd[indexWordLo( 8 )] ); - wordSig = extSigPtr[indexWordHi( 5 )]; - goto extSigReady; - } - ptr = extSigPtr + indexWordHi( 5 ) + wordIncr; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( carry != doSub ) { - if ( doSub ) { - do { - wordSig = *ptr; - *ptr = wordSig - 1; - ptr += wordIncr; - } while ( ! wordSig ); - } else { - do { - wordSig = *ptr + 1; - *ptr = wordSig; - ptr += wordIncr; - } while ( ! wordSig ); - } - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - expProdBigger_noWordShift: - if ( - sigProd[indexWord( 8, 2 )] - || (sigProd[indexWord( 8, 1 )] | sigProd[indexWord( 8, 0 )]) - ) { - sigProd[indexWord( 8, 3 )] |= 1; - } - extSigPtr = &sigProd[indexMultiwordHi( 8, 5 )]; - wordSig = extSigPtr[indexWordHi( 5 )]; - } - extSigReady: - roundPackRoutinePtr = softfloat_normRoundPackMToF128M; - if ( wordSig < 0x00010000 ) goto doRoundPack; - extSigReady_noCancellation: - if ( 0x00020000 <= wordSig ) { - ++expZ; - softfloat_shortShiftRightJam160M( extSigPtr, 1, extSigPtr ); - } - roundPack: - roundPackRoutinePtr = softfloat_roundPackMToF128M; - doRoundPack: - (*roundPackRoutinePtr)( signZ, expZ, extSigPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - propagateNaN_ZC: - softfloat_propagateNaNF128M( zWPtr, cWPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - if ( - ! (uint32_t) (uiC96<<1) && (signProd != signC) - && ! cWPtr[indexWord( 4, 2 )] - && ! (cWPtr[indexWord( 4, 1 )] | cWPtr[indexWord( 4, 0 )]) - ) { - goto completeCancellation; - } - copyC: - zWPtr[indexWordHi( 4 )] = uiC96; - zWPtr[indexWord( 4, 2 )] = cWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = cWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = cWPtr[indexWord( 4, 0 )]; - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - checkCancellation: - if ( - wordSig - || (extSigPtr[indexWord( 5, 3 )] | extSigPtr[indexWord( 5, 2 )]) - || (extSigPtr[indexWord( 5, 1 )] | extSigPtr[indexWord( 5, 0 )]) - ) { - goto extSigReady; - } - completeCancellation: - uiZ96 = - packToF128UI96( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - uiZ: - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - diff --git a/addins/SoftFloat-3e/source/s_mulAddF16.c b/addins/SoftFloat-3e/source/s_mulAddF16.c deleted file mode 100644 index 3a684ac32..000000000 --- a/addins/SoftFloat-3e/source/s_mulAddF16.c +++ /dev/null @@ -1,226 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t - softfloat_mulAddF16( - uint_fast16_t uiA, uint_fast16_t uiB, uint_fast16_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - bool signB; - int_fast8_t expB; - uint_fast16_t sigB; - bool signC; - int_fast8_t expC; - uint_fast16_t sigC; - bool signProd; - uint_fast16_t magBits, uiZ; - struct exp8_sig16 normExpSig; - int_fast8_t expProd; - uint_fast32_t sigProd; - bool signZ; - int_fast8_t expZ; - uint_fast16_t sigZ; - int_fast8_t expDiff; - uint_fast32_t sig32Z, sig32C; - int_fast8_t shiftDist; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - signB = signF16UI( uiB ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - signC = signF16UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF16UI( uiC ); - sigC = fracF16UI( uiC ); - signProd = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA || ((expB == 0x1F) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0x1F ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expProd = expA + expB - 0xE; - sigA = (sigA | 0x0400)<<4; - sigB = (sigB | 0x0400)<<4; - sigProd = (uint_fast32_t) sigA * sigB; - if ( sigProd < 0x20000000 ) { - --expProd; - sigProd <<= 1; - } - signZ = signProd; - if ( ! expC ) { - if ( ! sigC ) { - expZ = expProd - 1; - sigZ = sigProd>>15 | ((sigProd & 0x7FFF) != 0); - goto roundPack; - } - normExpSig = softfloat_normSubnormalF16Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | 0x0400)<<3; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expProd - expC; - if ( signProd == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - expZ = expC; - sigZ = sigC + softfloat_shiftRightJam32( sigProd, 16 - expDiff ); - } else { - expZ = expProd; - sig32Z = - sigProd - + softfloat_shiftRightJam32( - (uint_fast32_t) sigC<<16, expDiff ); - sigZ = sig32Z>>16 | ((sig32Z & 0xFFFF) != 0 ); - } - if ( sigZ < 0x4000 ) { - --expZ; - sigZ <<= 1; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig32C = (uint_fast32_t) sigC<<16; - if ( expDiff < 0 ) { - signZ = signC; - expZ = expC; - sig32Z = sig32C - softfloat_shiftRightJam32( sigProd, -expDiff ); - } else if ( ! expDiff ) { - expZ = expProd; - sig32Z = sigProd - sig32C; - if ( ! sig32Z ) goto completeCancellation; - if ( sig32Z & 0x80000000 ) { - signZ = ! signZ; - sig32Z = -sig32Z; - } - } else { - expZ = expProd; - sig32Z = sigProd - softfloat_shiftRightJam32( sig32C, expDiff ); - } - shiftDist = softfloat_countLeadingZeros32( sig32Z ) - 1; - expZ -= shiftDist; - shiftDist -= 16; - if ( shiftDist < 0 ) { - sigZ = - sig32Z>>(-shiftDist) - | ((uint32_t) (sig32Z<<(shiftDist & 31)) != 0); - } else { - sigZ = (uint_fast16_t) sig32Z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t - softfloat_mulAddF32( - uint_fast32_t uiA, uint_fast32_t uiB, uint_fast32_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - bool signB; - int_fast16_t expB; - uint_fast32_t sigB; - bool signC; - int_fast16_t expC; - uint_fast32_t sigC; - bool signProd; - uint_fast32_t magBits, uiZ; - struct exp16_sig32 normExpSig; - int_fast16_t expProd; - uint_fast64_t sigProd; - bool signZ; - int_fast16_t expZ; - uint_fast32_t sigZ; - int_fast16_t expDiff; - uint_fast64_t sig64Z, sig64C; - int_fast8_t shiftDist; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - signB = signF32UI( uiB ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - signC = signF32UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF32UI( uiC ); - sigC = fracF32UI( uiC ); - signProd = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA || ((expB == 0xFF) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0xFF ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expProd = expA + expB - 0x7E; - sigA = (sigA | 0x00800000)<<7; - sigB = (sigB | 0x00800000)<<7; - sigProd = (uint_fast64_t) sigA * sigB; - if ( sigProd < UINT64_C( 0x2000000000000000 ) ) { - --expProd; - sigProd <<= 1; - } - signZ = signProd; - if ( ! expC ) { - if ( ! sigC ) { - expZ = expProd - 1; - sigZ = softfloat_shortShiftRightJam64( sigProd, 31 ); - goto roundPack; - } - normExpSig = softfloat_normSubnormalF32Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | 0x00800000)<<6; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expProd - expC; - if ( signProd == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - expZ = expC; - sigZ = sigC + softfloat_shiftRightJam64( sigProd, 32 - expDiff ); - } else { - expZ = expProd; - sig64Z = - sigProd - + softfloat_shiftRightJam64( - (uint_fast64_t) sigC<<32, expDiff ); - sigZ = softfloat_shortShiftRightJam64( sig64Z, 32 ); - } - if ( sigZ < 0x40000000 ) { - --expZ; - sigZ <<= 1; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64C = (uint_fast64_t) sigC<<32; - if ( expDiff < 0 ) { - signZ = signC; - expZ = expC; - sig64Z = sig64C - softfloat_shiftRightJam64( sigProd, -expDiff ); - } else if ( ! expDiff ) { - expZ = expProd; - sig64Z = sigProd - sig64C; - if ( ! sig64Z ) goto completeCancellation; - if ( sig64Z & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - sig64Z = -sig64Z; - } - } else { - expZ = expProd; - sig64Z = sigProd - softfloat_shiftRightJam64( sig64C, expDiff ); - } - shiftDist = softfloat_countLeadingZeros64( sig64Z ) - 1; - expZ -= shiftDist; - shiftDist -= 32; - if ( shiftDist < 0 ) { - sigZ = softfloat_shortShiftRightJam64( sig64Z, -shiftDist ); - } else { - sigZ = (uint_fast32_t) sig64Z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float64_t - softfloat_mulAddF64( - uint_fast64_t uiA, uint_fast64_t uiB, uint_fast64_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - bool signB; - int_fast16_t expB; - uint_fast64_t sigB; - bool signC; - int_fast16_t expC; - uint_fast64_t sigC; - bool signZ; - uint_fast64_t magBits, uiZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - struct uint128 sig128Z; - uint_fast64_t sigZ; - int_fast16_t expDiff; - struct uint128 sig128C; - int_fast8_t shiftDist; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signC = signF64UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF64UI( uiC ); - sigC = fracF64UI( uiC ); - signZ = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0x7FF ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FE; - sigA = (sigA | UINT64_C( 0x0010000000000000 ))<<10; - sigB = (sigB | UINT64_C( 0x0010000000000000 ))<<10; - sig128Z = softfloat_mul64To128( sigA, sigB ); - if ( sig128Z.v64 < UINT64_C( 0x2000000000000000 ) ) { - --expZ; - sig128Z = - softfloat_add128( - sig128Z.v64, sig128Z.v0, sig128Z.v64, sig128Z.v0 ); - } - if ( ! expC ) { - if ( ! sigC ) { - --expZ; - sigZ = sig128Z.v64<<1 | (sig128Z.v0 != 0); - goto roundPack; - } - normExpSig = softfloat_normSubnormalF64Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | UINT64_C( 0x0010000000000000 ))<<9; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expZ - expC; - if ( expDiff < 0 ) { - expZ = expC; - if ( (signZ == signC) || (expDiff < -1) ) { - sig128Z.v64 = softfloat_shiftRightJam64( sig128Z.v64, -expDiff ); - } else { - sig128Z = - softfloat_shortShiftRightJam128( sig128Z.v64, sig128Z.v0, 1 ); - } - } else if ( expDiff ) { - sig128C = softfloat_shiftRightJam128( sigC, 0, expDiff ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signZ == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - sigZ = (sigC + sig128Z.v64) | (sig128Z.v0 != 0); - } else { - sig128Z = - softfloat_add128( - sig128Z.v64, sig128Z.v0, sig128C.v64, sig128C.v0 ); - sigZ = sig128Z.v64 | (sig128Z.v0 != 0); - } - if ( sigZ < UINT64_C( 0x4000000000000000 ) ) { - --expZ; - sigZ <<= 1; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - signZ = signC; - sig128Z = softfloat_sub128( sigC, 0, sig128Z.v64, sig128Z.v0 ); - } else if ( ! expDiff ) { - sig128Z.v64 = sig128Z.v64 - sigC; - if ( ! (sig128Z.v64 | sig128Z.v0) ) goto completeCancellation; - if ( sig128Z.v64 & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - sig128Z = softfloat_sub128( 0, 0, sig128Z.v64, sig128Z.v0 ); - } - } else { - sig128Z = - softfloat_sub128( - sig128Z.v64, sig128Z.v0, sig128C.v64, sig128C.v0 ); - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! sig128Z.v64 ) { - expZ -= 64; - sig128Z.v64 = sig128Z.v0; - sig128Z.v0 = 0; - } - shiftDist = softfloat_countLeadingZeros64( sig128Z.v64 ) - 1; - expZ -= shiftDist; - if ( shiftDist < 0 ) { - sigZ = softfloat_shortShiftRightJam64( sig128Z.v64, -shiftDist ); - } else { - sig128Z = - softfloat_shortShiftLeft128( - sig128Z.v64, sig128Z.v0, shiftDist ); - sigZ = sig128Z.v64; - } - sigZ |= (sig128Z.v0 != 0); - } - roundPack: - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN_ABC: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto propagateNaN_ZC; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infProdArg: - if ( magBits ) { - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - if ( expC != 0x7FF ) goto uiZ; - if ( sigC ) goto propagateNaN_ZC; - if ( signZ == signC ) goto uiZ; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - propagateNaN_ZC: - uiZ = softfloat_propagateNaNF64UI( uiZ, uiC ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - uiZ = uiC; - if ( ! (expC | sigC) && (signZ != signC) ) { - completeCancellation: - uiZ = - packToF64UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#else - -float64_t - softfloat_mulAddF64( - uint_fast64_t uiA, uint_fast64_t uiB, uint_fast64_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast16_t expA; - uint64_t sigA; - bool signB; - int_fast16_t expB; - uint64_t sigB; - bool signC; - int_fast16_t expC; - uint64_t sigC; - bool signZ; - uint64_t magBits, uiZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - uint32_t sig128Z[4]; - uint64_t sigZ; - int_fast16_t shiftDist, expDiff; - uint32_t sig128C[4]; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signC = signF64UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF64UI( uiC ); - sigC = fracF64UI( uiC ); - signZ = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0x7FF ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FE; - sigA = (sigA | UINT64_C( 0x0010000000000000 ))<<10; - sigB = (sigB | UINT64_C( 0x0010000000000000 ))<<11; - softfloat_mul64To128M( sigA, sigB, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 | sig128Z[indexWord( 4, 2 )]; - shiftDist = 0; - if ( ! (sigZ & UINT64_C( 0x4000000000000000 )) ) { - --expZ; - shiftDist = -1; - } - if ( ! expC ) { - if ( ! sigC ) { - if ( shiftDist ) sigZ <<= 1; - goto sigZ; - } - normExpSig = softfloat_normSubnormalF64Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | UINT64_C( 0x0010000000000000 ))<<10; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expZ - expC; - if ( expDiff < 0 ) { - expZ = expC; - if ( (signZ == signC) || (expDiff < -1) ) { - shiftDist -= expDiff; - if ( shiftDist) { - sigZ = softfloat_shiftRightJam64( sigZ, shiftDist ); - } - } else { - if ( ! shiftDist ) { - softfloat_shortShiftRight128M( sig128Z, 1, sig128Z ); - } - } - } else { - if ( shiftDist ) softfloat_add128M( sig128Z, sig128Z, sig128Z ); - if ( ! expDiff ) { - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - } else { - sig128C[indexWord( 4, 3 )] = sigC>>32; - sig128C[indexWord( 4, 2 )] = sigC; - sig128C[indexWord( 4, 1 )] = 0; - sig128C[indexWord( 4, 0 )] = 0; - softfloat_shiftRightJam128M( sig128C, expDiff, sig128C ); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signZ == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - sigZ += sigC; - } else { - softfloat_add128M( sig128Z, sig128C, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - } - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) { - ++expZ; - sigZ = softfloat_shortShiftRightJam64( sigZ, 1 ); - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - signZ = signC; - if ( expDiff < -1 ) { - sigZ = sigC - sigZ; - if ( - sig128Z[indexWord( 4, 1 )] || sig128Z[indexWord( 4, 0 )] - ) { - sigZ = (sigZ - 1) | 1; - } - if ( ! (sigZ & UINT64_C( 0x4000000000000000 )) ) { - --expZ; - sigZ <<= 1; - } - goto roundPack; - } else { - sig128C[indexWord( 4, 3 )] = sigC>>32; - sig128C[indexWord( 4, 2 )] = sigC; - sig128C[indexWord( 4, 1 )] = 0; - sig128C[indexWord( 4, 0 )] = 0; - softfloat_sub128M( sig128C, sig128Z, sig128Z ); - } - } else if ( ! expDiff ) { - sigZ -= sigC; - if ( - ! sigZ && ! sig128Z[indexWord( 4, 1 )] - && ! sig128Z[indexWord( 4, 0 )] - ) { - goto completeCancellation; - } - sig128Z[indexWord( 4, 3 )] = sigZ>>32; - sig128Z[indexWord( 4, 2 )] = sigZ; - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - softfloat_negX128M( sig128Z ); - } - } else { - softfloat_sub128M( sig128Z, sig128C, sig128Z ); - if ( 1 < expDiff ) { - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - if ( ! (sigZ & UINT64_C( 0x4000000000000000 )) ) { - --expZ; - sigZ <<= 1; - } - goto sigZ; - } - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - shiftDist = 0; - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - if ( ! sigZ ) { - shiftDist = 64; - sigZ = - (uint64_t) sig128Z[indexWord( 4, 1 )]<<32 - | sig128Z[indexWord( 4, 0 )]; - } - shiftDist += softfloat_countLeadingZeros64( sigZ ) - 1; - if ( shiftDist ) { - expZ -= shiftDist; - softfloat_shiftLeft128M( sig128Z, shiftDist, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - } - } - sigZ: - if ( sig128Z[indexWord( 4, 1 )] || sig128Z[indexWord( 4, 0 )] ) sigZ |= 1; - roundPack: - return softfloat_roundPackToF64( signZ, expZ - 1, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN_ABC: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto propagateNaN_ZC; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infProdArg: - if ( magBits ) { - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - if ( expC != 0x7FF ) goto uiZ; - if ( sigC ) goto propagateNaN_ZC; - if ( signZ == signC ) goto uiZ; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - propagateNaN_ZC: - uiZ = softfloat_propagateNaNF64UI( uiZ, uiC ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - uiZ = uiC; - if ( ! (expC | sigC) && (signZ != signC) ) { - completeCancellation: - uiZ = - packToF64UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_negXM.c b/addins/SoftFloat-3e/source/s_negXM.c deleted file mode 100644 index ec8c92886..000000000 --- a/addins/SoftFloat-3e/source/s_negXM.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_negXM - -void softfloat_negXM( uint_fast8_t size_words, uint32_t *zPtr ) -{ - unsigned int index, lastIndex; - uint_fast8_t carry; - uint32_t word; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - carry = 1; - for (;;) { - word = ~zPtr[index] + carry; - zPtr[index] = word; - if ( index == lastIndex ) break; - index += wordIncr; - if ( word ) carry = 0; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_normExtF80SigM.c b/addins/SoftFloat-3e/source/s_normExtF80SigM.c deleted file mode 100644 index acc54dc63..000000000 --- a/addins/SoftFloat-3e/source/s_normExtF80SigM.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" - -int softfloat_normExtF80SigM( uint64_t *sigPtr ) -{ - uint64_t sig; - int_fast8_t shiftDist; - - sig = *sigPtr; - shiftDist = softfloat_countLeadingZeros64( sig ); - *sigPtr = sig< -#include -#include "platform.h" -#include "internals.h" - -void - softfloat_normRoundPackMToExtF80M( - bool sign, - int32_t exp, - uint32_t *extSigPtr, - uint_fast8_t roundingPrecision, - struct extFloat80M *zSPtr - ) -{ - int_fast16_t shiftDist; - uint32_t wordSig; - - shiftDist = 0; - wordSig = extSigPtr[indexWord( 3, 2 )]; - if ( ! wordSig ) { - shiftDist = 32; - wordSig = extSigPtr[indexWord( 3, 1 )]; - if ( ! wordSig ) { - shiftDist = 64; - wordSig = extSigPtr[indexWord( 3, 0 )]; - if ( ! wordSig ) { - zSPtr->signExp = packToExtF80UI64( sign, 0 ); - zSPtr->signif = 0; - return; - } - } - } - shiftDist += softfloat_countLeadingZeros32( wordSig ); - if ( shiftDist ) { - exp -= shiftDist; - softfloat_shiftLeft96M( extSigPtr, shiftDist, extSigPtr ); - } - softfloat_roundPackMToExtF80M( - sign, exp, extSigPtr, roundingPrecision, zSPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackMToF128M.c b/addins/SoftFloat-3e/source/s_normRoundPackMToF128M.c deleted file mode 100644 index 309455998..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackMToF128M.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" - -void - softfloat_normRoundPackMToF128M( - bool sign, int32_t exp, uint32_t *extSigPtr, uint32_t *zWPtr ) -{ - const uint32_t *ptr; - int_fast16_t shiftDist; - uint32_t wordSig; - - ptr = extSigPtr + indexWordHi( 5 ); - shiftDist = 0; - for (;;) { - wordSig = *ptr; - if ( wordSig ) break; - shiftDist += 32; - if ( 160 <= shiftDist ) { - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, 0, 0 ); - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - return; - } - ptr -= wordIncr; - } - shiftDist += softfloat_countLeadingZeros32( wordSig ) - 15; - if ( shiftDist ) { - exp -= shiftDist; - softfloat_shiftLeft160M( extSigPtr, shiftDist, extSigPtr ); - } - softfloat_roundPackMToF128M( sign, exp, extSigPtr, zWPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackToExtF80.c b/addins/SoftFloat-3e/source/s_normRoundPackToExtF80.c deleted file mode 100644 index 76e791d91..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackToExtF80.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" - -extFloat80_t - softfloat_normRoundPackToExtF80( - bool sign, - int_fast32_t exp, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingPrecision - ) -{ - int_fast8_t shiftDist; - struct uint128 sig128; - - if ( ! sig ) { - exp -= 64; - sig = sigExtra; - sigExtra = 0; - } - shiftDist = softfloat_countLeadingZeros64( sig ); - exp -= shiftDist; - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig, sigExtra, shiftDist ); - sig = sig128.v64; - sigExtra = sig128.v0; - } - return - softfloat_roundPackToExtF80( - sign, exp, sig, sigExtra, roundingPrecision ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackToF128.c b/addins/SoftFloat-3e/source/s_normRoundPackToF128.c deleted file mode 100644 index 67f5b4349..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackToF128.c +++ /dev/null @@ -1,81 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" - -float128_t - softfloat_normRoundPackToF128( - bool sign, int_fast32_t exp, uint_fast64_t sig64, uint_fast64_t sig0 ) -{ - int_fast8_t shiftDist; - struct uint128 sig128; - union ui128_f128 uZ; - uint_fast64_t sigExtra; - struct uint128_extra sig128Extra; - - if ( ! sig64 ) { - exp -= 64; - sig64 = sig0; - sig0 = 0; - } - shiftDist = softfloat_countLeadingZeros64( sig64 ) - 15; - exp -= shiftDist; - if ( 0 <= shiftDist ) { - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig64, sig0, shiftDist ); - sig64 = sig128.v64; - sig0 = sig128.v0; - } - if ( (uint32_t) exp < 0x7FFD ) { - uZ.ui.v64 = packToF128UI64( sign, sig64 | sig0 ? exp : 0, sig64 ); - uZ.ui.v0 = sig0; - return uZ.f; - } - sigExtra = 0; - } else { - sig128Extra = - softfloat_shortShiftRightJam128Extra( sig64, sig0, 0, -shiftDist ); - sig64 = sig128Extra.v.v64; - sig0 = sig128Extra.v.v0; - sigExtra = sig128Extra.extra; - } - return softfloat_roundPackToF128( sign, exp, sig64, sig0, sigExtra ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackToF16.c b/addins/SoftFloat-3e/source/s_normRoundPackToF16.c deleted file mode 100644 index 1d184d58b..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackToF16.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" - -float16_t - softfloat_normRoundPackToF16( bool sign, int_fast16_t exp, uint_fast16_t sig ) -{ - int_fast8_t shiftDist; - union ui16_f16 uZ; - - shiftDist = softfloat_countLeadingZeros16( sig ) - 1; - exp -= shiftDist; - if ( (4 <= shiftDist) && ((unsigned int) exp < 0x1D) ) { - uZ.ui = packToF16UI( sign, sig ? exp : 0, sig<<(shiftDist - 4) ); - return uZ.f; - } else { - return softfloat_roundPackToF16( sign, exp, sig< -#include -#include "platform.h" -#include "internals.h" - -float32_t - softfloat_normRoundPackToF32( bool sign, int_fast16_t exp, uint_fast32_t sig ) -{ - int_fast8_t shiftDist; - union ui32_f32 uZ; - - shiftDist = softfloat_countLeadingZeros32( sig ) - 1; - exp -= shiftDist; - if ( (7 <= shiftDist) && ((unsigned int) exp < 0xFD) ) { - uZ.ui = packToF32UI( sign, sig ? exp : 0, sig<<(shiftDist - 7) ); - return uZ.f; - } else { - return softfloat_roundPackToF32( sign, exp, sig< -#include -#include "platform.h" -#include "internals.h" - -float64_t - softfloat_normRoundPackToF64( bool sign, int_fast16_t exp, uint_fast64_t sig ) -{ - int_fast8_t shiftDist; - union ui64_f64 uZ; - - shiftDist = softfloat_countLeadingZeros64( sig ) - 1; - exp -= shiftDist; - if ( (10 <= shiftDist) && ((unsigned int) exp < 0x7FD) ) { - uZ.ui = packToF64UI( sign, sig ? exp : 0, sig<<(shiftDist - 10) ); - return uZ.f; - } else { - return softfloat_roundPackToF64( sign, exp, sig< -#include "platform.h" -#include "internals.h" - -struct exp32_sig64 softfloat_normSubnormalExtF80Sig( uint_fast64_t sig ) -{ - int_fast8_t shiftDist; - struct exp32_sig64 z; - - shiftDist = softfloat_countLeadingZeros64( sig ); - z.exp = -shiftDist; - z.sig = sig< -#include "platform.h" -#include "internals.h" - -struct exp32_sig128 - softfloat_normSubnormalF128Sig( uint_fast64_t sig64, uint_fast64_t sig0 ) -{ - int_fast8_t shiftDist; - struct exp32_sig128 z; - - if ( ! sig64 ) { - shiftDist = softfloat_countLeadingZeros64( sig0 ) - 15; - z.exp = -63 - shiftDist; - if ( shiftDist < 0 ) { - z.sig.v64 = sig0>>-shiftDist; - z.sig.v0 = sig0<<(shiftDist & 63); - } else { - z.sig.v64 = sig0< -#include "platform.h" -#include "internals.h" - -int softfloat_normSubnormalF128SigM( uint32_t *sigPtr ) -{ - const uint32_t *ptr; - int_fast16_t shiftDist; - uint32_t wordSig; - - ptr = sigPtr + indexWordHi( 4 ); - shiftDist = 0; - for (;;) { - wordSig = *ptr; - if ( wordSig ) break; - shiftDist += 32; - if ( 128 <= shiftDist ) return 1; - ptr -= wordIncr; - } - shiftDist += softfloat_countLeadingZeros32( wordSig ) - 15; - if ( shiftDist ) softfloat_shiftLeft128M( sigPtr, shiftDist, sigPtr ); - return 1 - shiftDist; - -} - diff --git a/addins/SoftFloat-3e/source/s_normSubnormalF16Sig.c b/addins/SoftFloat-3e/source/s_normSubnormalF16Sig.c deleted file mode 100644 index bb92adfea..000000000 --- a/addins/SoftFloat-3e/source/s_normSubnormalF16Sig.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" - -struct exp8_sig16 softfloat_normSubnormalF16Sig( uint_fast16_t sig ) -{ - int_fast8_t shiftDist; - struct exp8_sig16 z; - - shiftDist = softfloat_countLeadingZeros16( sig ) - 5; - z.exp = 1 - shiftDist; - z.sig = sig< -#include "platform.h" -#include "internals.h" - -struct exp16_sig32 softfloat_normSubnormalF32Sig( uint_fast32_t sig ) -{ - int_fast8_t shiftDist; - struct exp16_sig32 z; - - shiftDist = softfloat_countLeadingZeros32( sig ) - 8; - z.exp = 1 - shiftDist; - z.sig = sig< -#include "platform.h" -#include "internals.h" - -struct exp16_sig64 softfloat_normSubnormalF64Sig( uint_fast64_t sig ) -{ - int_fast8_t shiftDist; - struct exp16_sig64 z; - - shiftDist = softfloat_countLeadingZeros64( sig ) - 11; - z.exp = 1 - shiftDist; - z.sig = sig< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_remStepMBy32 - -void - softfloat_remStepMBy32( - uint_fast8_t size_words, - const uint32_t *remPtr, - uint_fast8_t dist, - const uint32_t *bPtr, - uint32_t q, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint64_t dwordProd; - uint32_t wordRem, wordShiftedRem, wordProd; - uint_fast8_t uNegDist, borrow; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - dwordProd = (uint64_t) bPtr[index] * q; - wordRem = remPtr[index]; - wordShiftedRem = wordRem<>(uNegDist & 31); - index += wordIncr; - dwordProd = (uint64_t) bPtr[index] * q + (dwordProd>>32); - wordRem = remPtr[index]; - wordShiftedRem |= wordRem< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t - softfloat_roundMToI64( - bool sign, uint32_t *extSigPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint64_t sig; - uint32_t sigExtra; - union { uint64_t ui; int64_t i; } uZ; - int64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - sigExtra = extSigPtr[indexWordLo( 3 )]; - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( 0x80000000 <= sigExtra ) goto increment; - } else { - if ( - sigExtra - && (sign - ? (roundingMode == softfloat_round_min) -#ifdef SOFTFLOAT_ROUND_ODD - || (roundingMode == softfloat_round_odd) -#endif - : (roundingMode == softfloat_round_max)) - ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == 0x80000000) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - uZ.ui = sign ? -sig : sig; - z = uZ.i; - if ( z && ((z < 0) ^ sign) ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundMToUI64.c b/addins/SoftFloat-3e/source/s_roundMToUI64.c deleted file mode 100644 index 196f53735..000000000 --- a/addins/SoftFloat-3e/source/s_roundMToUI64.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - softfloat_roundMToUI64( - bool sign, uint32_t *extSigPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint64_t sig; - uint32_t sigExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - sigExtra = extSigPtr[indexWordLo( 3 )]; - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( 0x80000000 <= sigExtra ) goto increment; - } else { - if ( sign ) { - if ( !(sig | sigExtra) ) return 0; - if ( roundingMode == softfloat_round_min ) goto invalid; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) goto invalid; -#endif - } else { - if ( (roundingMode == softfloat_round_max) && sigExtra ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == 0x80000000) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - } - if ( sign && sig ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sig |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sig; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackMToExtF80M.c b/addins/SoftFloat-3e/source/s_roundPackMToExtF80M.c deleted file mode 100644 index 08620159f..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackMToExtF80M.c +++ /dev/null @@ -1,256 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -void - softfloat_roundPackMToExtF80M( - bool sign, - int32_t exp, - uint32_t *extSigPtr, - uint_fast8_t roundingPrecision, - struct extFloat80M *zSPtr - ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint64_t sig, roundIncrement, roundMask, roundBits; - bool isTiny; - uint32_t sigExtra; - bool doIncrement; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - if ( roundingPrecision == 80 ) goto precision80; - if ( roundingPrecision == 64 ) { - roundIncrement = UINT64_C( 0x0000000000000400 ); - roundMask = UINT64_C( 0x00000000000007FF ); - } else if ( roundingPrecision == 32 ) { - roundIncrement = UINT64_C( 0x0000008000000000 ); - roundMask = UINT64_C( 0x000000FFFFFFFFFF ); - } else { - goto precision80; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( extSigPtr[indexWordLo( 3 )] ) sig |= 1; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? roundMask - : 0; - } - roundBits = sig & roundMask; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || (sig <= (uint64_t) (sig + roundIncrement)); - sig = softfloat_shiftRightJam64( sig, 1 - exp ); - roundBits = sig & roundMask; - if ( roundBits ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= roundMask + 1; - } -#endif - } - sig += roundIncrement; - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && ((uint64_t) (sig + roundIncrement) < sig)) - ) { - goto overflow; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig = (sig & ~roundMask) | (roundMask + 1); - goto packReturn; - } -#endif - } - sig += roundIncrement; - if ( sig < roundIncrement ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - precision80: - sigExtra = extSigPtr[indexWordLo( 3 )]; - doIncrement = (0x80000000 <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || ! doIncrement - || (sig < UINT64_C( 0xFFFFFFFFFFFFFFFF )); - softfloat_shiftRightJam96M( extSigPtr, 1 - exp, extSigPtr ); - exp = 0; - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - sigExtra = extSigPtr[indexWordLo( 3 )]; - if ( sigExtra ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - doIncrement = (0x80000000 <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - if ( doIncrement ) { - ++sig; - sig &= ~(uint64_t) (! (sigExtra & 0x7FFFFFFF) & roundNearEven); - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - } - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && (sig == UINT64_C( 0xFFFFFFFFFFFFFFFF )) - && doIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - roundMask = 0; - overflow: - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - exp = 0x7FFF; - sig = UINT64_C( 0x8000000000000000 ); - } else { - exp = 0x7FFE; - sig = ~roundMask; - } - goto packReturn; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - if ( doIncrement ) { - ++sig; - if ( ! sig ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } else { - sig &= ~(uint64_t) (! (sigExtra & 0x7FFFFFFF) & roundNearEven); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - zSPtr->signExp = packToExtF80UI64( sign, exp ); - zSPtr->signif = sig; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackMToF128M.c b/addins/SoftFloat-3e/source/s_roundPackMToF128M.c deleted file mode 100644 index 22591b835..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackMToF128M.c +++ /dev/null @@ -1,178 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -void - softfloat_roundPackMToF128M( - bool sign, int32_t exp, uint32_t *extSigPtr, uint32_t *zWPtr ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint32_t sigExtra; - bool doIncrement, isTiny; - static const uint32_t maxSig[4] = - INIT_UINTM4( 0x0001FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF ); - uint32_t ui, uj; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - sigExtra = extSigPtr[indexWordLo( 5 )]; - doIncrement = (0x80000000 <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < -1) - || ! doIncrement - || (softfloat_compare128M( - extSigPtr + indexMultiwordHi( 5, 4 ), maxSig ) - < 0); - softfloat_shiftRightJam160M( extSigPtr, -exp, extSigPtr ); - exp = 0; - sigExtra = extSigPtr[indexWordLo( 5 )]; - if ( isTiny && sigExtra ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - doIncrement = (0x80000000 <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - } else if ( - (0x7FFD < exp) - || ((exp == 0x7FFD) && doIncrement - && (softfloat_compare128M( - extSigPtr + indexMultiwordHi( 5, 4 ), maxSig ) - == 0)) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - ui = packToF128UI96( sign, 0x7FFF, 0 ); - uj = 0; - } else { - ui = packToF128UI96( sign, 0x7FFE, 0x0000FFFF ); - uj = 0xFFFFFFFF; - } - zWPtr[indexWordHi( 4 )] = ui; - zWPtr[indexWord( 4, 2 )] = uj; - zWPtr[indexWord( 4, 1 )] = uj; - zWPtr[indexWord( 4, 0 )] = uj; - return; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uj = extSigPtr[indexWord( 5, 1 )]; - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - uj |= 1; - goto noIncrementPackReturn; - } -#endif - } - if ( doIncrement ) { - ++uj; - if ( uj ) { - if ( ! (sigExtra & 0x7FFFFFFF) && roundNearEven ) uj &= ~1; - zWPtr[indexWord( 4, 2 )] = extSigPtr[indexWord( 5, 3 )]; - zWPtr[indexWord( 4, 1 )] = extSigPtr[indexWord( 5, 2 )]; - zWPtr[indexWord( 4, 0 )] = uj; - ui = extSigPtr[indexWordHi( 5 )]; - } else { - zWPtr[indexWord( 4, 0 )] = uj; - ui = extSigPtr[indexWord( 5, 2 )] + 1; - zWPtr[indexWord( 4, 1 )] = ui; - uj = extSigPtr[indexWord( 5, 3 )]; - if ( ui ) { - zWPtr[indexWord( 4, 2 )] = uj; - ui = extSigPtr[indexWordHi( 5 )]; - } else { - ++uj; - zWPtr[indexWord( 4, 2 )] = uj; - ui = extSigPtr[indexWordHi( 5 )]; - if ( ! uj ) ++ui; - } - } - } else { - noIncrementPackReturn: - zWPtr[indexWord( 4, 0 )] = uj; - ui = extSigPtr[indexWord( 5, 2 )]; - zWPtr[indexWord( 4, 1 )] = ui; - uj |= ui; - ui = extSigPtr[indexWord( 5, 3 )]; - zWPtr[indexWord( 4, 2 )] = ui; - uj |= ui; - ui = extSigPtr[indexWordHi( 5 )]; - uj |= ui; - if ( ! uj ) exp = 0; - } - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, exp, ui ); - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToExtF80.c b/addins/SoftFloat-3e/source/s_roundPackToExtF80.c deleted file mode 100644 index 0cc7af985..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToExtF80.c +++ /dev/null @@ -1,256 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t - softfloat_roundPackToExtF80( - bool sign, - int_fast32_t exp, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingPrecision - ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast64_t roundIncrement, roundMask, roundBits; - bool isTiny, doIncrement; - struct uint64_extra sig64Extra; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - if ( roundingPrecision == 80 ) goto precision80; - if ( roundingPrecision == 64 ) { - roundIncrement = UINT64_C( 0x0000000000000400 ); - roundMask = UINT64_C( 0x00000000000007FF ); - } else if ( roundingPrecision == 32 ) { - roundIncrement = UINT64_C( 0x0000008000000000 ); - roundMask = UINT64_C( 0x000000FFFFFFFFFF ); - } else { - goto precision80; - } - sig |= (sigExtra != 0); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? roundMask - : 0; - } - roundBits = sig & roundMask; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || (sig <= (uint64_t) (sig + roundIncrement)); - sig = softfloat_shiftRightJam64( sig, 1 - exp ); - roundBits = sig & roundMask; - if ( roundBits ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= roundMask + 1; - } -#endif - } - sig += roundIncrement; - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && ((uint64_t) (sig + roundIncrement) < sig)) - ) { - goto overflow; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig = (sig & ~roundMask) | (roundMask + 1); - goto packReturn; - } -#endif - } - sig = (uint64_t) (sig + roundIncrement); - if ( sig < roundIncrement ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - precision80: - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || ! doIncrement - || (sig < UINT64_C( 0xFFFFFFFFFFFFFFFF )); - sig64Extra = - softfloat_shiftRightJam64Extra( sig, sigExtra, 1 - exp ); - exp = 0; - sig = sig64Extra.v; - sigExtra = sig64Extra.extra; - if ( sigExtra ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - if ( doIncrement ) { - ++sig; - sig &= - ~(uint_fast64_t) - (! (sigExtra & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - & roundNearEven); - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - } - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && (sig == UINT64_C( 0xFFFFFFFFFFFFFFFF )) - && doIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - roundMask = 0; - overflow: - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - exp = 0x7FFF; - sig = UINT64_C( 0x8000000000000000 ); - } else { - exp = 0x7FFE; - sig = ~roundMask; - } - goto packReturn; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - if ( doIncrement ) { - ++sig; - if ( ! sig ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } else { - sig &= - ~(uint_fast64_t) - (! (sigExtra & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - & roundNearEven); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uZ.s.signExp = packToExtF80UI64( sign, exp ); - uZ.s.signif = sig; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF128.c b/addins/SoftFloat-3e/source/s_roundPackToF128.c deleted file mode 100644 index 41584316a..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF128.c +++ /dev/null @@ -1,171 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t - softfloat_roundPackToF128( - bool sign, - int_fast32_t exp, - uint_fast64_t sig64, - uint_fast64_t sig0, - uint_fast64_t sigExtra - ) -{ - uint_fast8_t roundingMode; - bool roundNearEven, doIncrement, isTiny; - struct uint128_extra sig128Extra; - uint_fast64_t uiZ64, uiZ0; - struct uint128 sig128; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < -1) - || ! doIncrement - || softfloat_lt128( - sig64, - sig0, - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ) - ); - sig128Extra = - softfloat_shiftRightJam128Extra( sig64, sig0, sigExtra, -exp ); - sig64 = sig128Extra.v.v64; - sig0 = sig128Extra.v.v0; - sigExtra = sig128Extra.extra; - exp = 0; - if ( isTiny && sigExtra ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - } else if ( - (0x7FFD < exp) - || ((exp == 0x7FFD) - && softfloat_eq128( - sig64, - sig0, - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ) - ) - && doIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - uiZ64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ0 = 0; - } else { - uiZ64 = - packToF128UI64( - sign, 0x7FFE, UINT64_C( 0x0000FFFFFFFFFFFF ) ); - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - } - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig0 |= 1; - goto packReturn; - } -#endif - } - if ( doIncrement ) { - sig128 = softfloat_add128( sig64, sig0, 0, 1 ); - sig64 = sig128.v64; - sig0 = - sig128.v0 - & ~(uint64_t) - (! (sigExtra & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - & roundNearEven); - } else { - if ( ! (sig64 | sig0) ) exp = 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ64 = packToF128UI64( sign, exp, sig64 ); - uiZ0 = sig0; - uiZ: - uZ.ui.v64 = uiZ64; - uZ.ui.v0 = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF16.c b/addins/SoftFloat-3e/source/s_roundPackToF16.c deleted file mode 100644 index 2dde55bb4..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF16.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t - softfloat_roundPackToF16( bool sign, int_fast16_t exp, uint_fast16_t sig ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast8_t roundIncrement, roundBits; - bool isTiny; - uint_fast16_t uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - roundIncrement = 0x8; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? 0xF - : 0; - } - roundBits = sig & 0xF; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x1D <= (unsigned int) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess == softfloat_tininess_beforeRounding) - || (exp < -1) || (sig + roundIncrement < 0x8000); - sig = softfloat_shiftRightJam32( sig, -exp ); - exp = 0; - roundBits = sig & 0xF; - if ( isTiny && roundBits ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - } else if ( (0x1D < exp) || (0x8000 <= sig + roundIncrement) ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - uiZ = packToF16UI( sign, 0x1F, 0 ) - ! roundIncrement; - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig + roundIncrement)>>4; - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - sig &= ~(uint_fast16_t) (! (roundBits ^ 8) & roundNearEven); - if ( ! sig ) exp = 0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ = packToF16UI( sign, exp, sig ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF32.c b/addins/SoftFloat-3e/source/s_roundPackToF32.c deleted file mode 100644 index a69b8d4d7..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF32.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t - softfloat_roundPackToF32( bool sign, int_fast16_t exp, uint_fast32_t sig ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast8_t roundIncrement, roundBits; - bool isTiny; - uint_fast32_t uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - roundIncrement = 0x40; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? 0x7F - : 0; - } - roundBits = sig & 0x7F; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0xFD <= (unsigned int) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess == softfloat_tininess_beforeRounding) - || (exp < -1) || (sig + roundIncrement < 0x80000000); - sig = softfloat_shiftRightJam32( sig, -exp ); - exp = 0; - roundBits = sig & 0x7F; - if ( isTiny && roundBits ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - } else if ( (0xFD < exp) || (0x80000000 <= sig + roundIncrement) ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - uiZ = packToF32UI( sign, 0xFF, 0 ) - ! roundIncrement; - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig + roundIncrement)>>7; - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - sig &= ~(uint_fast32_t) (! (roundBits ^ 0x40) & roundNearEven); - if ( ! sig ) exp = 0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ = packToF32UI( sign, exp, sig ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF64.c b/addins/SoftFloat-3e/source/s_roundPackToF64.c deleted file mode 100644 index f7f3abff5..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF64.c +++ /dev/null @@ -1,117 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t - softfloat_roundPackToF64( bool sign, int_fast16_t exp, uint_fast64_t sig ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast16_t roundIncrement, roundBits; - bool isTiny; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - roundIncrement = 0x200; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? 0x3FF - : 0; - } - roundBits = sig & 0x3FF; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FD <= (uint16_t) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess == softfloat_tininess_beforeRounding) - || (exp < -1) - || (sig + roundIncrement < UINT64_C( 0x8000000000000000 )); - sig = softfloat_shiftRightJam64( sig, -exp ); - exp = 0; - roundBits = sig & 0x3FF; - if ( isTiny && roundBits ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - } else if ( - (0x7FD < exp) - || (UINT64_C( 0x8000000000000000 ) <= sig + roundIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - uiZ = packToF64UI( sign, 0x7FF, 0 ) - ! roundIncrement; - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig + roundIncrement)>>10; - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - sig &= ~(uint_fast64_t) (! (roundBits ^ 0x200) & roundNearEven); - if ( ! sig ) exp = 0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ = packToF64UI( sign, exp, sig ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToI32.c b/addins/SoftFloat-3e/source/s_roundToI32.c deleted file mode 100644 index a3e727dc7..000000000 --- a/addins/SoftFloat-3e/source/s_roundToI32.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t - softfloat_roundToI32( - bool sign, uint_fast64_t sig, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast16_t roundIncrement, roundBits; - uint_fast32_t sig32; - union { uint32_t ui; int32_t i; } uZ; - int_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundIncrement = 0x800; - if ( - (roundingMode != softfloat_round_near_maxMag) - && (roundingMode != softfloat_round_near_even) - ) { - roundIncrement = 0; - if ( - sign - ? (roundingMode == softfloat_round_min) -#ifdef SOFTFLOAT_ROUND_ODD - || (roundingMode == softfloat_round_odd) -#endif - : (roundingMode == softfloat_round_max) - ) { - roundIncrement = 0xFFF; - } - } - roundBits = sig & 0xFFF; - sig += roundIncrement; - if ( sig & UINT64_C( 0xFFFFF00000000000 ) ) goto invalid; - sig32 = sig>>12; - if ( - (roundBits == 0x800) && (roundingMode == softfloat_round_near_even) - ) { - sig32 &= ~(uint_fast32_t) 1; - } - uZ.ui = sign ? -sig32 : sig32; - z = uZ.i; - if ( z && ((z < 0) ^ sign) ) goto invalid; - if ( roundBits ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? i32_fromNegOverflow : i32_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToI64.c b/addins/SoftFloat-3e/source/s_roundToI64.c deleted file mode 100644 index 773c82cfc..000000000 --- a/addins/SoftFloat-3e/source/s_roundToI64.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t - softfloat_roundToI64( - bool sign, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingMode, - bool exact - ) -{ - union { uint64_t ui; int64_t i; } uZ; - int_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( UINT64_C( 0x8000000000000000 ) <= sigExtra ) goto increment; - } else { - if ( - sigExtra - && (sign - ? (roundingMode == softfloat_round_min) -#ifdef SOFTFLOAT_ROUND_ODD - || (roundingMode == softfloat_round_odd) -#endif - : (roundingMode == softfloat_round_max)) - ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == UINT64_C( 0x8000000000000000 )) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - uZ.ui = sign ? -sig : sig; - z = uZ.i; - if ( z && ((z < 0) ^ sign) ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToUI32.c b/addins/SoftFloat-3e/source/s_roundToUI32.c deleted file mode 100644 index 059e231e2..000000000 --- a/addins/SoftFloat-3e/source/s_roundToUI32.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t - softfloat_roundToUI32( - bool sign, uint_fast64_t sig, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast16_t roundIncrement, roundBits; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundIncrement = 0x800; - if ( - (roundingMode != softfloat_round_near_maxMag) - && (roundingMode != softfloat_round_near_even) - ) { - roundIncrement = 0; - if ( sign ) { - if ( !sig ) return 0; - if ( roundingMode == softfloat_round_min ) goto invalid; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) goto invalid; -#endif - } else { - if ( roundingMode == softfloat_round_max ) roundIncrement = 0xFFF; - } - } - roundBits = sig & 0xFFF; - sig += roundIncrement; - if ( sig & UINT64_C( 0xFFFFF00000000000 ) ) goto invalid; - z = sig>>12; - if ( - (roundBits == 0x800) && (roundingMode == softfloat_round_near_even) - ) { - z &= ~(uint_fast32_t) 1; - } - if ( sign && z ) goto invalid; - if ( roundBits ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToUI64.c b/addins/SoftFloat-3e/source/s_roundToUI64.c deleted file mode 100644 index 856ad9792..000000000 --- a/addins/SoftFloat-3e/source/s_roundToUI64.c +++ /dev/null @@ -1,97 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - softfloat_roundToUI64( - bool sign, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingMode, - bool exact - ) -{ - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( UINT64_C( 0x8000000000000000 ) <= sigExtra ) goto increment; - } else { - if ( sign ) { - if ( !(sig | sigExtra) ) return 0; - if ( roundingMode == softfloat_round_min ) goto invalid; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) goto invalid; -#endif - } else { - if ( (roundingMode == softfloat_round_max) && sigExtra ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == UINT64_C( 0x8000000000000000 )) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - } - if ( sign && sig ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sig |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sig; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_shiftLeftM.c b/addins/SoftFloat-3e/source/s_shiftLeftM.c deleted file mode 100644 index 71a309919..000000000 --- a/addins/SoftFloat-3e/source/s_shiftLeftM.c +++ /dev/null @@ -1,91 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_shiftLeftM - -#define softfloat_shiftLeftM softfloat_shiftLeftM -#include "primitives.h" - -void - softfloat_shiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ) -{ - uint32_t wordDist; - uint_fast8_t innerDist; - uint32_t *destPtr; - uint_fast8_t i; - - wordDist = dist>>5; - if ( wordDist < size_words ) { - aPtr += indexMultiwordLoBut( size_words, wordDist ); - innerDist = dist & 31; - if ( innerDist ) { - softfloat_shortShiftLeftM( - size_words - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordHiBut( size_words, wordDist ) - ); - if ( ! wordDist ) return; - } else { - aPtr += indexWordHi( size_words - wordDist ); - destPtr = zPtr + indexWordHi( size_words ); - for ( i = size_words - wordDist; i; --i ) { - *destPtr = *aPtr; - aPtr -= wordIncr; - destPtr -= wordIncr; - } - } - zPtr += indexMultiwordLo( size_words, wordDist ); - } else { - wordDist = size_words; - } - do { - *zPtr++ = 0; - --wordDist; - } while ( wordDist ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftNormSigF128M.c b/addins/SoftFloat-3e/source/s_shiftNormSigF128M.c deleted file mode 100644 index fa4976c8e..000000000 --- a/addins/SoftFloat-3e/source/s_shiftNormSigF128M.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" - -int - softfloat_shiftNormSigF128M( - const uint32_t *wPtr, uint_fast8_t shiftDist, uint32_t *sigPtr ) -{ - uint32_t wordSig; - int32_t exp; - uint32_t leadingBit; - - wordSig = wPtr[indexWordHi( 4 )]; - exp = expF128UI96( wordSig ); - if ( exp ) { - softfloat_shortShiftLeft128M( wPtr, shiftDist, sigPtr ); - leadingBit = 0x00010000< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam128 - -struct uint128 - softfloat_shiftRightJam128( uint64_t a64, uint64_t a0, uint_fast32_t dist ) -{ - uint_fast8_t u8NegDist; - struct uint128 z; - - if ( dist < 64 ) { - u8NegDist = -dist; - z.v64 = a64>>dist; - z.v0 = - a64<<(u8NegDist & 63) | a0>>dist - | ((uint64_t) (a0<<(u8NegDist & 63)) != 0); - } else { - z.v64 = 0; - z.v0 = - (dist < 127) - ? a64>>(dist & 63) - | (((a64 & (((uint_fast64_t) 1<<(dist & 63)) - 1)) | a0) - != 0) - : ((a64 | a0) != 0); - } - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam128Extra.c b/addins/SoftFloat-3e/source/s_shiftRightJam128Extra.c deleted file mode 100644 index 75722887b..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam128Extra.c +++ /dev/null @@ -1,77 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam128Extra - -struct uint128_extra - softfloat_shiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast32_t dist ) -{ - uint_fast8_t u8NegDist; - struct uint128_extra z; - - u8NegDist = -dist; - if ( dist < 64 ) { - z.v.v64 = a64>>dist; - z.v.v0 = a64<<(u8NegDist & 63) | a0>>dist; - z.extra = a0<<(u8NegDist & 63); - } else { - z.v.v64 = 0; - if ( dist == 64 ) { - z.v.v0 = a64; - z.extra = a0; - } else { - extra |= a0; - if ( dist < 128 ) { - z.v.v0 = a64>>(dist & 63); - z.extra = a64<<(u8NegDist & 63); - } else { - z.v.v0 = 0; - z.extra = (dist == 128) ? a64 : (a64 != 0); - } - } - } - z.extra |= (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam256M.c b/addins/SoftFloat-3e/source/s_shiftRightJam256M.c deleted file mode 100644 index 433870a81..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam256M.c +++ /dev/null @@ -1,126 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam256M - -static - void - softfloat_shortShiftRightJamM( - uint_fast8_t size_words, - const uint64_t *aPtr, - uint_fast8_t dist, - uint64_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint64_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - wordA = aPtr[index]; - partWordZ = wordA>>dist; - if ( partWordZ<>dist; - } - zPtr[index] = partWordZ; - -} - -void - softfloat_shiftRightJam256M( - const uint64_t *aPtr, uint_fast32_t dist, uint64_t *zPtr ) -{ - uint64_t wordJam; - uint_fast32_t wordDist; - uint64_t *ptr; - uint_fast8_t i, innerDist; - - wordJam = 0; - wordDist = dist>>6; - if ( wordDist ) { - if ( 4 < wordDist ) wordDist = 4; - ptr = (uint64_t *) (aPtr + indexMultiwordLo( 4, wordDist )); - i = wordDist; - do { - wordJam = *ptr++; - if ( wordJam ) break; - --i; - } while ( i ); - ptr = zPtr; - } - if ( wordDist < 4 ) { - aPtr += indexMultiwordHiBut( 4, wordDist ); - innerDist = dist & 63; - if ( innerDist ) { - softfloat_shortShiftRightJamM( - 4 - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordLoBut( 4, wordDist ) - ); - if ( ! wordDist ) goto wordJam; - } else { - aPtr += indexWordLo( 4 - wordDist ); - ptr = zPtr + indexWordLo( 4 ); - for ( i = 4 - wordDist; i; --i ) { - *ptr = *aPtr; - aPtr += wordIncr; - ptr += wordIncr; - } - } - ptr = zPtr + indexMultiwordHi( 4, wordDist ); - } - do { - *ptr++ = 0; - --wordDist; - } while ( wordDist ); - wordJam: - if ( wordJam ) zPtr[indexWordLo( 4 )] |= 1; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam32.c b/addins/SoftFloat-3e/source/s_shiftRightJam32.c deleted file mode 100644 index 2533fcd95..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam32.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_shiftRightJam32 - -uint32_t softfloat_shiftRightJam32( uint32_t a, uint_fast16_t dist ) -{ - - return - (dist < 31) ? a>>dist | ((uint32_t) (a<<(-dist & 31)) != 0) : (a != 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam64.c b/addins/SoftFloat-3e/source/s_shiftRightJam64.c deleted file mode 100644 index 4b40e3de6..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam64.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_shiftRightJam64 - -uint64_t softfloat_shiftRightJam64( uint64_t a, uint_fast32_t dist ) -{ - - return - (dist < 63) ? a>>dist | ((uint64_t) (a<<(-dist & 63)) != 0) : (a != 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam64Extra.c b/addins/SoftFloat-3e/source/s_shiftRightJam64Extra.c deleted file mode 100644 index b93fad39c..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam64Extra.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam64Extra - -struct uint64_extra - softfloat_shiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast32_t dist ) -{ - struct uint64_extra z; - - if ( dist < 64 ) { - z.v = a>>dist; - z.extra = a<<(-dist & 63); - } else { - z.v = 0; - z.extra = (dist == 64) ? a : (a != 0); - } - z.extra |= (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJamM.c b/addins/SoftFloat-3e/source/s_shiftRightJamM.c deleted file mode 100644 index edf5f956b..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJamM.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_shiftRightJamM - -#define softfloat_shiftRightJamM softfloat_shiftRightJamM -#include "primitives.h" - -void - softfloat_shiftRightJamM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ) -{ - uint32_t wordJam, wordDist, *ptr; - uint_fast8_t i, innerDist; - - wordJam = 0; - wordDist = dist>>5; - if ( wordDist ) { - if ( size_words < wordDist ) wordDist = size_words; - ptr = (uint32_t *) (aPtr + indexMultiwordLo( size_words, wordDist )); - i = wordDist; - do { - wordJam = *ptr++; - if ( wordJam ) break; - --i; - } while ( i ); - ptr = zPtr; - } - if ( wordDist < size_words ) { - aPtr += indexMultiwordHiBut( size_words, wordDist ); - innerDist = dist & 31; - if ( innerDist ) { - softfloat_shortShiftRightJamM( - size_words - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordLoBut( size_words, wordDist ) - ); - if ( ! wordDist ) goto wordJam; - } else { - aPtr += indexWordLo( size_words - wordDist ); - ptr = zPtr + indexWordLo( size_words ); - for ( i = size_words - wordDist; i; --i ) { - *ptr = *aPtr; - aPtr += wordIncr; - ptr += wordIncr; - } - } - ptr = zPtr + indexMultiwordHi( size_words, wordDist ); - } - do { - *ptr++ = 0; - --wordDist; - } while ( wordDist ); - wordJam: - if ( wordJam ) zPtr[indexWordLo( size_words )] |= 1; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightM.c b/addins/SoftFloat-3e/source/s_shiftRightM.c deleted file mode 100644 index 00265ea23..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightM.c +++ /dev/null @@ -1,91 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_shiftRightM - -#define softfloat_shiftRightM softfloat_shiftRightM -#include "primitives.h" - -void - softfloat_shiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ) -{ - uint32_t wordDist; - uint_fast8_t innerDist; - uint32_t *destPtr; - uint_fast8_t i; - - wordDist = dist>>5; - if ( wordDist < size_words ) { - aPtr += indexMultiwordHiBut( size_words, wordDist ); - innerDist = dist & 31; - if ( innerDist ) { - softfloat_shortShiftRightM( - size_words - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordLoBut( size_words, wordDist ) - ); - if ( ! wordDist ) return; - } else { - aPtr += indexWordLo( size_words - wordDist ); - destPtr = zPtr + indexWordLo( size_words ); - for ( i = size_words - wordDist; i; --i ) { - *destPtr = *aPtr; - aPtr += wordIncr; - destPtr += wordIncr; - } - } - zPtr += indexMultiwordHi( size_words, wordDist ); - } else { - wordDist = size_words; - } - do { - *zPtr++ = 0; - --wordDist; - } while ( wordDist ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftLeft128.c b/addins/SoftFloat-3e/source/s_shortShiftLeft128.c deleted file mode 100644 index 7513bc627..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftLeft128.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftLeft128 - -struct uint128 - softfloat_shortShiftLeft128( uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - struct uint128 z; - - z.v64 = a64<>(-dist & 63); - z.v0 = a0< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftLeft64To96M - -void - softfloat_shortShiftLeft64To96M( - uint64_t a, uint_fast8_t dist, uint32_t *zPtr ) -{ - - zPtr[indexWord( 3, 0 )] = (uint32_t) a<>= 32 - dist; - zPtr[indexWord( 3, 2 )] = a>>32; - zPtr[indexWord( 3, 1 )] = a; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftLeftM.c b/addins/SoftFloat-3e/source/s_shortShiftLeftM.c deleted file mode 100644 index 48e6e03b5..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftLeftM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftLeftM - -void - softfloat_shortShiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordHi( size_words ); - lastIndex = indexWordLo( size_words ); - partWordZ = aPtr[index]<>(uNegDist & 31); - index -= wordIncr; - partWordZ = wordA< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRight128 - -struct uint128 - softfloat_shortShiftRight128( uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - struct uint128 z; - - z.v64 = a64>>dist; - z.v0 = a64<<(-dist & 63) | a0>>dist; - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightExtendM.c b/addins/SoftFloat-3e/source/s_shortShiftRightExtendM.c deleted file mode 100644 index bc441c731..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightExtendM.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightExtendM - -void - softfloat_shortShiftRightExtendM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int indexA, lastIndexA; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - indexA = indexWordLo( size_words ); - lastIndexA = indexWordHi( size_words ); - zPtr += indexWordLo( size_words + 1 ); - partWordZ = 0; - for (;;) { - wordA = aPtr[indexA]; - *zPtr = wordA<<(uNegDist & 31) | partWordZ; - zPtr += wordIncr; - partWordZ = wordA>>dist; - if ( indexA == lastIndexA ) break; - indexA += wordIncr; - } - *zPtr = partWordZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJam128.c b/addins/SoftFloat-3e/source/s_shortShiftRightJam128.c deleted file mode 100644 index 76008722b..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJam128.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam128 - -struct uint128 - softfloat_shortShiftRightJam128( - uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - uint_fast8_t uNegDist; - struct uint128 z; - - uNegDist = -dist; - z.v64 = a64>>dist; - z.v0 = - a64<<(uNegDist & 63) | a0>>dist - | ((uint64_t) (a0<<(uNegDist & 63)) != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c b/addins/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c deleted file mode 100644 index b0774401d..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam128Extra - -struct uint128_extra - softfloat_shortShiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast8_t dist ) -{ - uint_fast8_t uNegDist; - struct uint128_extra z; - - uNegDist = -dist; - z.v.v64 = a64>>dist; - z.v.v0 = a64<<(uNegDist & 63) | a0>>dist; - z.extra = a0<<(uNegDist & 63) | (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJam64.c b/addins/SoftFloat-3e/source/s_shortShiftRightJam64.c deleted file mode 100644 index d3044c853..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJam64.c +++ /dev/null @@ -1,50 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" - -#ifndef softfloat_shortShiftRightJam64 - -uint64_t softfloat_shortShiftRightJam64( uint64_t a, uint_fast8_t dist ) -{ - - return a>>dist | ((a & (((uint_fast64_t) 1< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam64Extra - -struct uint64_extra - softfloat_shortShiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast8_t dist ) -{ - struct uint64_extra z; - - z.v = a>>dist; - z.extra = a<<(-dist & 63) | (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJamM.c b/addins/SoftFloat-3e/source/s_shortShiftRightJamM.c deleted file mode 100644 index b567e482a..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJamM.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJamM - -void - softfloat_shortShiftRightJamM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - wordA = aPtr[index]; - partWordZ = wordA>>dist; - if ( partWordZ<>dist; - } - zPtr[index] = partWordZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightM.c b/addins/SoftFloat-3e/source/s_shortShiftRightM.c deleted file mode 100644 index 54e0071c7..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightM - -void - softfloat_shortShiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - partWordZ = aPtr[index]>>dist; - while ( index != lastIndex ) { - wordA = aPtr[index + wordIncr]; - zPtr[index] = wordA<<(uNegDist & 31) | partWordZ; - index += wordIncr; - partWordZ = wordA>>dist; - } - zPtr[index] = partWordZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_sub128.c b/addins/SoftFloat-3e/source/s_sub128.c deleted file mode 100644 index 9bf346391..000000000 --- a/addins/SoftFloat-3e/source/s_sub128.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_sub128 - -struct uint128 - softfloat_sub128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - - z.v0 = a0 - b0; - z.v64 = a64 - b64 - (a0 < b0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_sub1XM.c b/addins/SoftFloat-3e/source/s_sub1XM.c deleted file mode 100644 index 30c5d36ee..000000000 --- a/addins/SoftFloat-3e/source/s_sub1XM.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_sub1XM - -void softfloat_sub1XM( uint_fast8_t size_words, uint32_t *zPtr ) -{ - unsigned int index, lastIndex; - uint32_t wordA; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - for (;;) { - wordA = zPtr[index]; - zPtr[index] = wordA - 1; - if ( wordA || (index == lastIndex) ) break; - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_sub256M.c b/addins/SoftFloat-3e/source/s_sub256M.c deleted file mode 100644 index a4af5a1c9..000000000 --- a/addins/SoftFloat-3e/source/s_sub256M.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_sub256M - -void - softfloat_sub256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ) -{ - unsigned int index; - uint_fast8_t borrow; - uint64_t wordA, wordB; - - index = indexWordLo( 4 ); - borrow = 0; - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - zPtr[index] = wordA - wordB - borrow; - if ( index == indexWordHi( 4 ) ) break; - borrow = borrow ? (wordA <= wordB) : (wordA < wordB); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_subM.c b/addins/SoftFloat-3e/source/s_subM.c deleted file mode 100644 index fcccc744c..000000000 --- a/addins/SoftFloat-3e/source/s_subM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -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 -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_subM - -void - softfloat_subM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint_fast8_t borrow; - uint32_t wordA, wordB; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - borrow = 0; - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - zPtr[index] = wordA - wordB - borrow; - if ( index == lastIndex ) break; - borrow = borrow ? (wordA <= wordB) : (wordA < wordB); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_subMagsExtF80.c b/addins/SoftFloat-3e/source/s_subMagsExtF80.c deleted file mode 100644 index 0c46c61a2..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsExtF80.c +++ /dev/null @@ -1,158 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t - softfloat_subMagsExtF80( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - uint_fast64_t sigA; - int_fast32_t expB; - uint_fast64_t sigB; - int_fast32_t expDiff; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - int_fast32_t expZ; - uint_fast64_t sigExtra; - struct uint128 sig128, uiZ; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( 0 < expDiff ) goto expABigger; - if ( expDiff < 0 ) goto expBBigger; - if ( expA == 0x7FFF ) { - if ( (sigA | sigB) & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - goto propagateNaN; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA; - if ( ! expZ ) expZ = 1; - sigExtra = 0; - if ( sigB < sigA ) goto aBigger; - if ( sigA < sigB ) goto bBigger; - uiZ64 = - packToExtF80UI64( (softfloat_roundingMode == softfloat_round_min), 0 ); - uiZ0 = 0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expBBigger: - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = packToExtF80UI64( signZ ^ 1, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - if ( ! expA ) { - ++expDiff; - sigExtra = 0; - if ( ! expDiff ) goto newlyAlignedBBigger; - } - sig128 = softfloat_shiftRightJam128( sigA, 0, -expDiff ); - sigA = sig128.v64; - sigExtra = sig128.v0; - newlyAlignedBBigger: - expZ = expB; - bBigger: - signZ = ! signZ; - sig128 = softfloat_sub128( sigB, 0, sigA, sigExtra ); - goto normRoundPack; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expABigger: - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = uiA64; - uiZ0 = uiA0; - goto uiZ; - } - if ( ! expB ) { - --expDiff; - sigExtra = 0; - if ( ! expDiff ) goto newlyAlignedABigger; - } - sig128 = softfloat_shiftRightJam128( sigB, 0, expDiff ); - sigB = sig128.v64; - sigExtra = sig128.v0; - newlyAlignedABigger: - expZ = expA; - aBigger: - sig128 = softfloat_sub128( sigA, 0, sigB, sigExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - normRoundPack: - return - softfloat_normRoundPackToExtF80( - signZ, expZ, sig128.v64, sig128.v0, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_subMagsF128.c b/addins/SoftFloat-3e/source/s_subMagsF128.c deleted file mode 100644 index e93543f09..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsF128.c +++ /dev/null @@ -1,139 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t - softfloat_subMagsF128( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - struct uint128 sigA; - int_fast32_t expB; - struct uint128 sigB, sigZ; - int_fast32_t expDiff, expZ; - struct uint128 uiZ; - union ui128_f128 uZ; - - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - sigA = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 4 ); - sigB = softfloat_shortShiftLeft128( sigB.v64, sigB.v0, 4 ); - expDiff = expA - expB; - if ( 0 < expDiff ) goto expABigger; - if ( expDiff < 0 ) goto expBBigger; - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 | sigB.v64 | sigB.v0 ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - goto uiZ; - } - expZ = expA; - if ( ! expZ ) expZ = 1; - if ( sigB.v64 < sigA.v64 ) goto aBigger; - if ( sigA.v64 < sigB.v64 ) goto bBigger; - if ( sigB.v0 < sigA.v0 ) goto aBigger; - if ( sigA.v0 < sigB.v0 ) goto bBigger; - uiZ.v64 = - packToF128UI64( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - expBBigger: - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - uiZ.v64 = packToF128UI64( signZ ^ 1, 0x7FFF, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - if ( expA ) { - sigA.v64 |= UINT64_C( 0x0010000000000000 ); - } else { - ++expDiff; - if ( ! expDiff ) goto newlyAlignedBBigger; - } - sigA = softfloat_shiftRightJam128( sigA.v64, sigA.v0, -expDiff ); - newlyAlignedBBigger: - expZ = expB; - sigB.v64 |= UINT64_C( 0x0010000000000000 ); - bBigger: - signZ = ! signZ; - sigZ = softfloat_sub128( sigB.v64, sigB.v0, sigA.v64, sigA.v0 ); - goto normRoundPack; - expABigger: - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) goto propagateNaN; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - goto uiZ; - } - if ( expB ) { - sigB.v64 |= UINT64_C( 0x0010000000000000 ); - } else { - --expDiff; - if ( ! expDiff ) goto newlyAlignedABigger; - } - sigB = softfloat_shiftRightJam128( sigB.v64, sigB.v0, expDiff ); - newlyAlignedABigger: - expZ = expA; - sigA.v64 |= UINT64_C( 0x0010000000000000 ); - aBigger: - sigZ = softfloat_sub128( sigA.v64, sigA.v0, sigB.v64, sigB.v0 ); - normRoundPack: - return softfloat_normRoundPackToF128( signZ, expZ - 5, sigZ.v64, sigZ.v0 ); - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_subMagsF16.c b/addins/SoftFloat-3e/source/s_subMagsF16.c deleted file mode 100644 index ae1417ea9..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsF16.c +++ /dev/null @@ -1,187 +0,0 @@ - -/*============================================================================ - -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, 2017 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t softfloat_subMagsF16( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - int_fast8_t expA; - uint_fast16_t sigA; - int_fast8_t expB; - uint_fast16_t sigB; - int_fast8_t expDiff; - uint_fast16_t uiZ; - int_fast16_t sigDiff; - bool signZ; - int_fast8_t shiftDist, expZ; - uint_fast16_t sigZ, sigX, sigY; - uint_fast32_t sig32Z; - int_fast8_t roundingMode; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA | sigB ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - goto uiZ; - } - sigDiff = sigA - sigB; - if ( ! sigDiff ) { - uiZ = - packToF16UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - goto uiZ; - } - if ( expA ) --expA; - signZ = signF16UI( uiA ); - if ( sigDiff < 0 ) { - signZ = ! signZ; - sigDiff = -sigDiff; - } - shiftDist = softfloat_countLeadingZeros16( sigDiff ) - 5; - expZ = expA - shiftDist; - if ( expZ < 0 ) { - shiftDist = expA; - expZ = 0; - } - sigZ = sigDiff<>16; - if ( sig32Z & 0xFFFF ) { - sigZ |= 1; - } else { - if ( ! (sigZ & 0xF) && ((unsigned int) expZ < 0x1E) ) { - sigZ >>= 4; - goto pack; - } - } - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - subEpsilon: - roundingMode = softfloat_roundingMode; - if ( roundingMode != softfloat_round_near_even ) { - if ( - (roundingMode == softfloat_round_minMag) - || (roundingMode - == (signF16UI( uiZ ) ? softfloat_round_max - : softfloat_round_min)) - ) { - --uiZ; - } -#ifdef SOFTFLOAT_ROUND_ODD - else if ( roundingMode == softfloat_round_odd ) { - uiZ = (uiZ - 1) | 1; - } -#endif - } - softfloat_exceptionFlags |= softfloat_flag_inexact; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - pack: - uiZ = packToF16UI( signZ, expZ, sigZ ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_subMagsF32.c b/addins/SoftFloat-3e/source/s_subMagsF32.c deleted file mode 100644 index 0c1f32ed6..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsF32.c +++ /dev/null @@ -1,143 +0,0 @@ - -/*============================================================================ - -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 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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t softfloat_subMagsF32( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - int_fast16_t expA; - uint_fast32_t sigA; - int_fast16_t expB; - uint_fast32_t sigB; - int_fast16_t expDiff; - uint_fast32_t uiZ; - int_fast32_t sigDiff; - bool signZ; - int_fast8_t shiftDist; - int_fast16_t expZ; - uint_fast32_t sigX, sigY; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA | sigB ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - goto uiZ; - } - sigDiff = sigA - sigB; - if ( ! sigDiff ) { - uiZ = - packToF32UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - goto uiZ; - } - if ( expA ) --expA; - signZ = signF32UI( uiA ); - if ( sigDiff < 0 ) { - signZ = ! signZ; - sigDiff = -sigDiff; - } - shiftDist = softfloat_countLeadingZeros32( sigDiff ) - 8; - expZ = expA - shiftDist; - if ( expZ < 0 ) { - shiftDist = expA; - expZ = 0; - } - uiZ = packToF32UI( signZ, expZ, sigDiff< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t - softfloat_subMagsF64( uint_fast64_t uiA, uint_fast64_t uiB, bool signZ ) -{ - int_fast16_t expA; - uint_fast64_t sigA; - int_fast16_t expB; - uint_fast64_t sigB; - int_fast16_t expDiff; - uint_fast64_t uiZ; - int_fast64_t sigDiff; - int_fast8_t shiftDist; - int_fast16_t expZ; - uint_fast64_t sigZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA | sigB ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - goto uiZ; - } - sigDiff = sigA - sigB; - if ( ! sigDiff ) { - uiZ = - packToF64UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - goto uiZ; - } - if ( expA ) --expA; - if ( sigDiff < 0 ) { - signZ = ! signZ; - sigDiff = -sigDiff; - } - shiftDist = softfloat_countLeadingZeros64( sigDiff ) - 11; - expZ = expA - shiftDist; - if ( expZ < 0 ) { - shiftDist = expA; - expZ = 0; - } - uiZ = packToF64UI( signZ, expZ, sigDiff< -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -bool - softfloat_tryPropagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ) -{ - uint_fast16_t ui64; - uint64_t ui0; - - ui64 = aSPtr->signExp; - ui0 = aSPtr->signif; - if ( isNaNExtF80UI( ui64, ui0 ) ) goto propagateNaN; - ui64 = bSPtr->signExp; - ui0 = bSPtr->signif; - if ( isNaNExtF80UI( ui64, ui0 ) ) goto propagateNaN; - return false; - propagateNaN: - softfloat_propagateNaNExtF80M( aSPtr, bSPtr, zSPtr ); - return true; - -} - diff --git a/addins/SoftFloat-3e/source/s_tryPropagateNaNF128M.c b/addins/SoftFloat-3e/source/s_tryPropagateNaNF128M.c deleted file mode 100644 index bab04a7c0..000000000 --- a/addins/SoftFloat-3e/source/s_tryPropagateNaNF128M.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -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 -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -bool - softfloat_tryPropagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) -{ - - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_propagateNaNF128M( aWPtr, bWPtr, zWPtr ); - return true; - } - return false; - -} - diff --git a/addins/SoftFloat-3e/source/softfloat_state.c b/addins/SoftFloat-3e/source/softfloat_state.c deleted file mode 100644 index 0f296654f..000000000 --- a/addins/SoftFloat-3e/source/softfloat_state.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifndef THREAD_LOCAL -#define THREAD_LOCAL -#endif - -THREAD_LOCAL uint_fast8_t softfloat_roundingMode = softfloat_round_near_even; -THREAD_LOCAL uint_fast8_t softfloat_detectTininess = init_detectTininess; -THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags = 0; - -THREAD_LOCAL uint_fast8_t extF80_roundingPrecision = 80; - diff --git a/addins/SoftFloat-3e/source/ui32_to_extF80.c b/addins/SoftFloat-3e/source/ui32_to_extF80.c deleted file mode 100644 index 34f79368f..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_extF80.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t ui32_to_extF80( uint32_t a ) -{ - uint_fast16_t uiZ64; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ); - uiZ64 = 0x401E - shiftDist; - a <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = (uint_fast64_t) a<<32; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/ui32_to_extF80M.c b/addins/SoftFloat-3e/source/ui32_to_extF80M.c deleted file mode 100644 index 0a0c098c0..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_extF80M.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - - *zPtr = ui32_to_extF80( a ); - -} - -#else - -void ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ); - uiZ64 = packToExtF80UI64( 0, 0x401E - shiftDist ); - sigZ = (uint64_t) (a<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui32_to_f128.c b/addins/SoftFloat-3e/source/ui32_to_f128.c deleted file mode 100644 index c3ab53daf..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_f128.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t ui32_to_f128( uint32_t a ) -{ - uint_fast64_t uiZ64; - int_fast8_t shiftDist; - union ui128_f128 uZ; - - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ) + 17; - uiZ64 = - packToF128UI64( - 0, 0x402E - shiftDist, (uint_fast64_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - - *zPtr = ui32_to_f128( a ); - -} - -#else - -void ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr, uiZ96, uiZ64; - int_fast8_t shiftDist; - uint64_t normA; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ) + 17; - normA = (uint64_t) a<>32 ); - uiZ64 = normA; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui32_to_f16.c b/addins/SoftFloat-3e/source/ui32_to_f16.c deleted file mode 100644 index 6fc377bca..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_f16.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t ui32_to_f16( uint32_t a ) -{ - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - shiftDist = softfloat_countLeadingZeros32( a ) - 21; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - 0, 0x18 - shiftDist, (uint_fast16_t) a<>(-shiftDist) | ((uint32_t) (a<<(shiftDist & 31)) != 0) - : (uint_fast16_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t ui32_to_f32( uint32_t a ) -{ - union ui32_f32 uZ; - - if ( ! a ) { - uZ.ui = 0; - return uZ.f; - } - if ( a & 0x80000000 ) { - return softfloat_roundPackToF32( 0, 0x9D, a>>1 | (a & 1) ); - } else { - return softfloat_normRoundPackToF32( 0, 0x9C, a ); - } - -} - diff --git a/addins/SoftFloat-3e/source/ui32_to_f64.c b/addins/SoftFloat-3e/source/ui32_to_f64.c deleted file mode 100644 index 504f96e6e..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_f64.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t ui32_to_f64( uint32_t a ) -{ - uint_fast64_t uiZ; - int_fast8_t shiftDist; - union ui64_f64 uZ; - - if ( ! a ) { - uiZ = 0; - } else { - shiftDist = softfloat_countLeadingZeros32( a ) + 21; - uiZ = - packToF64UI( 0, 0x432 - shiftDist, (uint_fast64_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t ui64_to_extF80( uint64_t a ) -{ - uint_fast16_t uiZ64; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros64( a ); - uiZ64 = 0x403E - shiftDist; - a <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = a; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/ui64_to_extF80M.c b/addins/SoftFloat-3e/source/ui64_to_extF80M.c deleted file mode 100644 index e676d904a..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_extF80M.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - - *zPtr = ui64_to_extF80( a ); - -} - -#else - -void ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros64( a ); - uiZ64 = packToExtF80UI64( 0, 0x403E - shiftDist ); - sigZ = a<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui64_to_f128.c b/addins/SoftFloat-3e/source/ui64_to_f128.c deleted file mode 100644 index 6ff6a6fcf..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_f128.c +++ /dev/null @@ -1,68 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t ui64_to_f128( uint64_t a ) -{ - uint_fast64_t uiZ64, uiZ0; - int_fast8_t shiftDist; - struct uint128 zSig; - union ui128_f128 uZ; - - if ( ! a ) { - uiZ64 = 0; - uiZ0 = 0; - } else { - shiftDist = softfloat_countLeadingZeros64( a ) + 49; - if ( 64 <= shiftDist ) { - zSig.v64 = a<<(shiftDist - 64); - zSig.v0 = 0; - } else { - zSig = softfloat_shortShiftLeft128( 0, a, shiftDist ); - } - uiZ64 = packToF128UI64( 0, 0x406E - shiftDist, zSig.v64 ); - uiZ0 = zSig.v0; - } - uZ.ui.v64 = uiZ64; - uZ.ui.v0 = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/ui64_to_f128M.c b/addins/SoftFloat-3e/source/ui64_to_f128M.c deleted file mode 100644 index 043406cc4..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_f128M.c +++ /dev/null @@ -1,86 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - - *zPtr = ui64_to_f128( a ); - -} - -#else - -void ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr, uiZ96, uiZ64; - uint_fast8_t shiftDist; - uint32_t *ptr; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros64( a ) + 17; - if ( shiftDist < 32 ) { - ptr = zWPtr + indexMultiwordHi( 4, 3 ); - ptr[indexWord( 3, 2 )] = 0; - ptr[indexWord( 3, 1 )] = a>>32; - ptr[indexWord( 3, 0 )] = a; - softfloat_shortShiftLeft96M( ptr, shiftDist, ptr ); - ptr[indexWordHi( 3 )] = - packToF128UI96( 0, 0x404E - shiftDist, ptr[indexWordHi( 3 )] ); - return; - } - a <<= shiftDist - 32; - uiZ96 = packToF128UI96( 0, 0x404E - shiftDist, a>>32 ); - uiZ64 = a; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui64_to_f16.c b/addins/SoftFloat-3e/source/ui64_to_f16.c deleted file mode 100644 index 3d58e85cf..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_f16.c +++ /dev/null @@ -1,64 +0,0 @@ - -/*============================================================================ - -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 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 -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t ui64_to_f16( uint64_t a ) -{ - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - shiftDist = softfloat_countLeadingZeros64( a ) - 53; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - 0, 0x18 - shiftDist, (uint_fast16_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t ui64_to_f32( uint64_t a ) -{ - int_fast8_t shiftDist; - union ui32_f32 u; - uint_fast32_t sig; - - shiftDist = softfloat_countLeadingZeros64( a ) - 40; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF32UI( - 0, 0x95 - shiftDist, (uint_fast32_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t ui64_to_f64( uint64_t a ) -{ - union ui64_f64 uZ; - - if ( ! a ) { - uZ.ui = 0; - return uZ.f; - } - if ( a & UINT64_C( 0x8000000000000000 ) ) { - return - softfloat_roundPackToF64( - 0, 0x43D, softfloat_shortShiftRightJam64( a, 1 ) ); - } else { - return softfloat_normRoundPackToF64( 0, 0x43C, a ); - } - -} - diff --git a/addins/TestFloat-3e/COPYING.txt b/addins/TestFloat-3e/COPYING.txt deleted file mode 100644 index c7443450e..000000000 --- a/addins/TestFloat-3e/COPYING.txt +++ /dev/null @@ -1,37 +0,0 @@ - -License for Berkeley TestFloat Release 3e - -John R. Hauser -2018 January 20 - -The following applies to the whole of TestFloat Release 3e as well as to -each source file individually. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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. - diff --git a/addins/TestFloat-3e/README.html b/addins/TestFloat-3e/README.html deleted file mode 100644 index 251408cbd..000000000 --- a/addins/TestFloat-3e/README.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -Berkeley TestFloat Package Overview - - - - -

Package Overview for Berkeley TestFloat Release 3e

- -

-John R. Hauser
-2018 January 20
-

- -

-Berkeley TestFloat is a small collection of programs for testing that an -implementation of binary floating-point conforms to the IEEE Standard for -Floating-Point Arithmetic. -TestFloat is distributed in the form of C source code. -

- -

-The TestFloat package is documented in the following files in the -doc subdirectory: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestFloat-general.html -General documentation for understanding and using the TestFloat programs. -
testfloat_gen.html -Specific documentation for the testfloat_gen program. -
testfloat_ver.html -Specific documentation for the testfloat_ver program. -
testfloat.html -Specific documentation for the all-in-one testfloat program. -
testsoftfloat.html -Specific documentation for the testsoftfloat program. -
timesoftfloat.html -Specific documentation for the timesoftfloat program. -
TestFloat-source.html -Documentation for building TestFloat. -
TestFloat-history.html    -History of the major changes to TestFloat. -
-
-Other files in the package comprise the source code for TestFloat. -

- - - diff --git a/addins/TestFloat-3e/README.txt b/addins/TestFloat-3e/README.txt deleted file mode 100644 index f2c33db31..000000000 --- a/addins/TestFloat-3e/README.txt +++ /dev/null @@ -1,26 +0,0 @@ - -Package Overview for Berkeley TestFloat Release 3e - -John R. Hauser -2018 January 20 - -Berkeley TestFloat is a small collection of programs for testing that an -implementation of binary floating-point conforms to the IEEE Standard for -Floating-Point Arithmetic. TestFloat is distributed in the form of C source -code. - -The TestFloat package is documented in the following files in the "doc" -subdirectory: - - TestFloat-general.html General documentation for understanding and using - the TestFloat programs. - testfloat_gen.html \ - testfloat_ver.html | Specific documentation for each TestFloat - testfloat.html | program. - testsoftfloat.html | - timesoftfloat.html / - TestFloat-source.html Documentation for building TestFloat. - TestFloat-history.html History of the major changes to TestFloat. - -Other files in the package comprise the source code for TestFloat. - diff --git a/addins/TestFloat-3e/build/Linux-386-GCC/Makefile b/addins/TestFloat-3e/build/Linux-386-GCC/Makefile deleted file mode 100644 index 440830dea..000000000 --- a/addins/TestFloat-3e/build/Linux-386-GCC/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-386-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-386-GCC/platform.h b/addins/TestFloat-3e/build/Linux-386-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-386-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/Makefile b/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/Makefile deleted file mode 100644 index 2d0a667af..000000000 --- a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-386-SSE2-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration -msse2 -mfpmath=sse \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/platform.h b/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile b/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile deleted file mode 100644 index 37c979c46..000000000 --- a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile +++ /dev/null @@ -1,353 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-ARM-VFPv2-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h b/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Linux-x86_64-GCC/Makefile b/addins/TestFloat-3e/build/Linux-x86_64-GCC/Makefile deleted file mode 100644 index 65ad2d89d..000000000 --- a/addins/TestFloat-3e/build/Linux-x86_64-GCC/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-x86_64-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-x86_64-GCC/platform.h b/addins/TestFloat-3e/build/Linux-x86_64-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-x86_64-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Win32-MinGW/Makefile b/addins/TestFloat-3e/build/Win32-MinGW/Makefile deleted file mode 100644 index bfc0670b6..000000000 --- a/addins/TestFloat-3e/build/Win32-MinGW/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Win32-MinGW - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Win32-MinGW/platform.h b/addins/TestFloat-3e/build/Win32-MinGW/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Win32-MinGW/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/Makefile b/addins/TestFloat-3e/build/Win32-SSE2-MinGW/Makefile deleted file mode 100644 index 5e0acba91..000000000 --- a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Win32-SSE2-MinGW - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration -msse2 -mfpmath=sse \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/platform.h b/addins/TestFloat-3e/build/Win32-SSE2-MinGW/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Win64-MinGW-w64/Makefile b/addins/TestFloat-3e/build/Win64-MinGW-w64/Makefile deleted file mode 100644 index 914266904..000000000 --- a/addins/TestFloat-3e/build/Win64-MinGW-w64/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Win64-MinGW-w64 - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - x86_64-w64-mingw32-gcc -std=c99 -c -Werror-implicit-function-declaration \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - x86_64-w64-mingw32-gcc -std=c99 -c -Werror-implicit-function-declaration \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O3 -o $@ -MAKELIB = x86_64-w64-mingw32-ar crs $@ -LINK = x86_64-w64-mingw32-gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Win64-MinGW-w64/platform.h b/addins/TestFloat-3e/build/Win64-MinGW-w64/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Win64-MinGW-w64/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/template/Makefile b/addins/TestFloat-3e/build/template/Makefile deleted file mode 100644 index f5c3b602f..000000000 --- a/addins/TestFloat-3e/build/template/Makefile +++ /dev/null @@ -1,353 +0,0 @@ - -#============================================================================= -# -# This Makefile template is part of TestFloat, Release 3e, a package of -# programs for testing the correctness of floating-point arithmetic complying -# with the IEEE Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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. -# -#============================================================================= - -# Edit lines marked with `==>'. See "TestFloat-source.html". - -==> SOURCE_DIR ?= ../../source -==> SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -==> PLATFORM ?= Win32-MinGW - -==> SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -==> SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -==> SOFTFLOAT_H = \ -==> $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ -==> $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -==> SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -==> TESTFLOAT_OPTS ?= \ -==> -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ -==> -DLONG_DOUBLE_IS_EXTFLOAT80 - -==> DELETE = rm -f -==> C_INCLUDES = \ -==> -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -==> COMPILE_C = cc -c $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -==> COMPILE_SLOWFLOAT_C = cc -c $(TESTFLOAT_OPTS) $(C_INCLUDES) -O3 -o $@ -==> MAKELIB = ar crs $@ -==> LINK = ld -o $@ -==> OTHER_LIBS = -lm - -==> OBJ = .o -==> LIB = .a -==> EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/template/platform.h b/addins/TestFloat-3e/build/template/platform.h deleted file mode 100644 index 29cb8cc0c..000000000 --- a/addins/TestFloat-3e/build/template/platform.h +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C header template is part of TestFloat, Release 3e, a package of programs -for testing the correctness of floating-point arithmetic complying with the -IEEE Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 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. - -=============================================================================*/ - -// Edit lines marked with `==>'. See "TestFloat-source.html". - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define INLINE inline - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define THREAD_LOCAL _Thread_local - diff --git a/addins/TestFloat-3e/doc/TestFloat-general.html b/addins/TestFloat-3e/doc/TestFloat-general.html deleted file mode 100644 index 730edc4be..000000000 --- a/addins/TestFloat-3e/doc/TestFloat-general.html +++ /dev/null @@ -1,1148 +0,0 @@ - - - - -Berkeley TestFloat General Documentation - - - - -

Berkeley TestFloat Release 3e: General Documentation

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. What TestFloat Does
5. Executing TestFloat
6. Operations Tested by TestFloat
6.1. Conversion Operations
6.2. Basic Arithmetic Operations
6.3. Fused Multiply-Add Operations
6.4. Remainder Operations
6.5. Round-to-Integer Operations
6.6. Comparison Operations
7. Interpreting TestFloat Output
8. Variations Allowed by the IEEE Floating-Point Standard
8.1. Underflow
8.2. NaNs
8.3. Conversions to Integer
9. Contact Information
-
- - -

1. Introduction

- -

-Berkeley TestFloat is a small collection of programs for testing that an -implementation of binary floating-point conforms to the IEEE Standard for -Floating-Point Arithmetic. -All operations required by the original 1985 version of the IEEE Floating-Point -Standard can be tested, except for conversions to and from decimal. -With the current release, the following binary formats can be tested: -16-bit half-precision, 32-bit single-precision, -64-bit double-precision, 80-bit -double-extended-precision, and/or 128-bit quadruple-precision. -TestFloat cannot test decimal floating-point. -

- -

-Included in the TestFloat package are the testsoftfloat and -timesoftfloat programs for testing the Berkeley SoftFloat software -implementation of floating-point and for measuring its speed. -Information about SoftFloat can be found at the SoftFloat Web page, -http://www.jhauser.us/arithmetic/SoftFloat.html. -The testsoftfloat and timesoftfloat programs are -expected to be of interest only to people compiling the SoftFloat sources. -

- -

-This document explains how to use the TestFloat programs. -It does not attempt to define or explain much of the IEEE Floating-Point -Standard. -Details about the standard are available elsewhere. -

- -

-The current version of TestFloat is Release 3e. -This version differs from earlier releases 3b through 3d in only minor ways. -Compared to the original Release 3: -

    -
  • -Release 3b added the ability to test the 16-bit -half-precision format. -
  • -Release 3c added the ability to test a rarely used rounding mode, -round to odd, also known as jamming. -
  • -Release 3d modified the code for testing C arithmetic to -potentially include testing newer library functions sqrtf, -sqrtl, fmaf, fma, and fmal. -
-This release adds a few more small improvements, including modifying the -expected behavior of rounding mode odd and fixing a minor bug in -the all-in-one testfloat program. -

- -

-Compared to Release 2c and earlier, the set of TestFloat programs, as well as -the programs’ arguments and behavior, changed some with -Release 3. -For more about the evolution of TestFloat releases, see -TestFloat-history.html. -

- - -

2. Limitations

- -

-TestFloat output is not always easily interpreted. -Detailed knowledge of the IEEE Floating-Point Standard and its vagaries is -needed to use TestFloat responsibly. -

- -

-TestFloat performs relatively simple tests designed to check the fundamental -soundness of the floating-point under test. -TestFloat may also at times manage to find rarer and more subtle bugs, but it -will probably only find such bugs by chance. -Software that purposefully seeks out various kinds of subtle floating-point -bugs can be found through links posted on the TestFloat Web page, -http://www.jhauser.us/arithmetic/TestFloat.html. -

- - -

3. Acknowledgments and License

- -

-The TestFloat package was written by me, John R. Hauser. -Release 3 of TestFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of TestFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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. -

- - -

4. What TestFloat Does

- -

-TestFloat is designed to test a floating-point implementation by comparing its -behavior with that of TestFloat’s own internal floating-point implemented -in software. -For each operation to be tested, the TestFloat programs can generate a large -number of test cases, made up of simple pattern tests intermixed with weighted -random inputs. -The cases generated should be adequate for testing carry chain propagations, -and the rounding of addition, subtraction, multiplication, and simple -operations like conversions. -TestFloat makes a point of checking all boundary cases of the arithmetic, -including underflows, overflows, invalid operations, subnormal inputs, zeros -(positive and negative), infinities, and NaNs. -For the interesting operations like addition and multiplication, millions of -test cases may be checked. -

- -

-TestFloat is not remarkably good at testing difficult rounding cases for -division and square root. -It also makes no attempt to find bugs specific to SRT division and the like -(such as the infamous Pentium division bug). -Software that tests for such failures can be found through links on the -TestFloat Web page, -http://www.jhauser.us/arithmetic/TestFloat.html. -

- -

-NOTE!
-It is the responsibility of the user to verify that the discrepancies TestFloat -finds actually represent faults in the implementation being tested. -Advice to help with this task is provided later in this document. -Furthermore, even if TestFloat finds no fault with a floating-point -implementation, that in no way guarantees that the implementation is bug-free. -

- -

-For each operation, TestFloat can test all five rounding modes defined by the -IEEE Floating-Point Standard, plus possibly a sixth mode, round to odd -(depending on the options selected when TestFloat was built). -TestFloat verifies not only that the numeric results of an operation are -correct, but also that the proper floating-point exception flags are raised. -All five exception flags are tested, including the inexact flag. -TestFloat does not attempt to verify that the floating-point exception flags -are actually implemented as sticky flags. -

- -

-For the 80-bit double-extended-precision format, TestFloat can -test the addition, subtraction, multiplication, division, and square root -operations at all three of the standard rounding precisions. -The rounding precision can be set to 32 bits, equivalent to -single-precision, to 64 bits, equivalent to double-precision, or -to the full 80 bits of the double-extended-precision. -Rounding precision control can be applied only to the double-extended-precision -format and only for the five basic arithmetic operations: addition, -subtraction, multiplication, division, and square root. -Other operations can be tested only at full precision. -

- -

-As a rule, TestFloat is not particular about the bit patterns of NaNs that -appear as operation results. -Any NaN is considered as good a result as another. -This laxness can be overridden so that TestFloat checks for particular bit -patterns within NaN results. -See section 8 below, Variations Allowed by the IEEE -Floating-Point Standard, plus the -checkNaNs and --checkInvInts options documented for programs -testfloat_ver and testfloat. -

- -

-TestFloat normally compares an implementation of floating-point against the -Berkeley SoftFloat software implementation of floating-point, also created by -me. -The SoftFloat functions are linked into each TestFloat program’s -executable. -Information about SoftFloat can be found at the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- -

-For testing SoftFloat itself, the TestFloat package includes a -testsoftfloat program that compares SoftFloat’s -floating-point against another software floating-point implementation. -The second software floating-point is simpler and slower than SoftFloat, and is -completely independent of SoftFloat. -Although the second software floating-point cannot be guaranteed to be -bug-free, the chance that it would mimic any of SoftFloat’s bugs is low. -Consequently, an error in one or the other floating-point version should appear -as an unexpected difference between the two implementations. -Note that testing SoftFloat should be necessary only when compiling a new -TestFloat executable or when compiling SoftFloat for some other reason. -

- - -

5. Executing TestFloat

- -

-The TestFloat package consists of five programs, all intended to be executed -from a command-line interpreter: -

- - - - - - - - - - - - - - - - - - - - - -
-testfloat_gen    - -Generates test cases for a specific floating-point operation. -
-testfloat_ver - -Verifies whether the results from executing a floating-point operation are as -expected. -
-testfloat - -An all-in-one program that generates test cases, executes floating-point -operations, and verifies whether the results match expectations. -
-testsoftfloat    - -Like testfloat, but for testing SoftFloat. -
-timesoftfloat    - -A program for measuring the speed of SoftFloat (included in the TestFloat -package for convenience). -
-
-Each program has its own page of documentation that can be opened through the -links in the table above. -

- -

-To test a floating-point implementation other than SoftFloat, one of three -different methods can be used. -The first method pipes output from testfloat_gen to a program -that: -(a) reads the incoming test cases, (b) invokes the -floating-point operation being tested, and (c) writes the -operation results to output. -These results can then be piped to testfloat_ver to be checked for -correctness. -Assuming a vertical bar (|) indicates a pipe between programs, the -complete process could be written as a single command like so: -

-
-testfloat_gen ... <type> | <program-that-invokes-op> | testfloat_ver ... <function>
-
-
-The program in the middle is not supplied by TestFloat but must be created -independently. -If for some reason this program cannot take command-line arguments, the --prefix option of testfloat_gen can communicate -parameters through the pipe. -

- -

-A second method for running TestFloat is similar but has -testfloat_gen supply not only the test inputs but also the -expected results for each case. -With this additional information, the job done by testfloat_ver -can be folded into the invoking program to give the following command: -

-
-testfloat_gen ... <function> | <program-that-invokes-op-and-compares-results>
-
-
-Again, the program that actually invokes the floating-point operation is not -supplied by TestFloat but must be created independently. -Depending on circumstance, it may be preferable either to let -testfloat_ver check and report suspected errors (first method) or -to include this step in the invoking program (second method). -

- -

-The third way to use TestFloat is the all-in-one testfloat -program. -This program can perform all the steps of creating test cases, invoking the -floating-point operation, checking the results, and reporting suspected errors. -However, for this to be possible, testfloat must be compiled to -contain the method for invoking the floating-point operations to test. -Each build of testfloat is therefore capable of testing -only the floating-point implementation it was built to invoke. -To test a new implementation of floating-point, a new testfloat -must be created, linked to that specific implementation. -By comparison, the testfloat_gen and testfloat_ver -programs are entirely generic; -one instance is usable for testing any floating-point implementation, because -implementation-specific details are segregated in the custom program that -follows testfloat_gen. -

- -

-Program testsoftfloat is another all-in-one program specifically -for testing SoftFloat. -

- -

-Programs testfloat_ver, testfloat, and -testsoftfloat all report status and error information in a common -way. -As it executes, each of these programs writes status information to the -standard error output, which should be the screen by default. -In order for this status to be displayed properly, the standard error stream -should not be redirected to a file. -Any discrepancies that are found are written to the standard output stream, -which is easily redirected to a file if desired. -Unless redirected, reported errors will appear intermixed with the ongoing -status information in the output. -

- - -

6. Operations Tested by TestFloat

- -

-TestFloat can test all operations required by the original 1985 IEEE -Floating-Point Standard except for conversions to and from decimal. -These operations are: -

    -
  • -conversions among the supported floating-point formats, and also between -integers (32-bit and 64-bit, signed and unsigned) and -any of the floating-point formats; -
  • -for each floating-point format, the usual addition, subtraction, -multiplication, division, and square root operations; -
  • -for each format, the floating-point remainder operation defined by the IEEE -Standard; -
  • -for each format, a “round to integer” operation that rounds to the -nearest integer value in the same format; and -
  • -comparisons between two values in the same floating-point format. -
-In addition, TestFloat can also test -
    -
  • -for each floating-point format except 80-bit -double-extended-precision, the fused multiply-add operation defined by the 2008 -IEEE Standard. -
-

- -

-More information about all these operations is given below. -In the operation names used by TestFloat, 16-bit half-precision is -called f16, 32-bit single-precision is -f32, 64-bit double-precision is f64, -80-bit double-extended-precision is extF80, and -128-bit quadruple-precision is f128. -TestFloat generally uses the same names for operations as Berkeley SoftFloat, -except that TestFloat’s names never include the M that -SoftFloat uses to indicate that values are passed through pointers. -

- -

6.1. Conversion Operations

- -

-All conversions among the floating-point formats and all conversions between a -floating-point format and 32-bit and 64-bit integers -can be tested. -The conversion operations are: -

-
-ui32_to_f16      ui64_to_f16      i32_to_f16       i64_to_f16
-ui32_to_f32      ui64_to_f32      i32_to_f32       i64_to_f32
-ui32_to_f64      ui64_to_f64      i32_to_f64       i64_to_f64
-ui32_to_extF80   ui64_to_extF80   i32_to_extF80    i64_to_extF80
-ui32_to_f128     ui64_to_f128     i32_to_f128      i64_to_f128
-
-f16_to_ui32      f32_to_ui32      f64_to_ui32      extF80_to_ui32    f128_to_ui32
-f16_to_ui64      f32_to_ui64      f64_to_ui64      extF80_to_ui64    f128_to_ui64
-f16_to_i32       f32_to_i32       f64_to_i32       extF80_to_i32     f128_to_i32
-f16_to_i64       f32_to_i64       f64_to_i64       extF80_to_i64     f128_to_i64
-
-f16_to_f32       f32_to_f16       f64_to_f16       extF80_to_f16     f128_to_f16
-f16_to_f64       f32_to_f64       f64_to_f32       extF80_to_f32     f128_to_f32
-f16_to_extF80    f32_to_extF80    f64_to_extF80    extF80_to_f64     f128_to_f64
-f16_to_f128      f32_to_f128      f64_to_f128      extF80_to_f128    f128_to_extF80
-
-
-Abbreviations ui32 and ui64 indicate -32-bit and 64-bit unsigned integer types, while -i32 and i64 indicate their signed counterparts. -These conversions all round according to the current rounding mode as relevant. -Conversions from a smaller to a larger floating-point format are always exact -and so require no rounding. -Likewise, conversions from 32-bit integers to 64-bit -double-precision or to any larger floating-point format are also exact, as are -conversions from 64-bit integers to 80-bit -double-extended-precision and 128-bit quadruple-precision. -

- -

-For the all-in-one testfloat program, this list of conversion -operations requires amendment. -For testfloat only, conversions to an integer type have names that -explicitly specify the rounding mode and treatment of inexactness. -Thus, instead of -

-
-<float>_to_<int>
-
-
-as listed above, operations converting to integer type have names of these -forms: -
-
-<float>_to_<int>_r_<round>
-<float>_to_<int>_rx_<round>
-
-
-The <round> component is one of -‘near_even’, ‘near_maxMag’, -‘minMag’, ‘min’, or -‘max’, choosing the rounding mode. -Any other indication of rounding mode is ignored. -The operations with ‘_r_’ in their names never raise -the inexact exception, while those with ‘_rx_’ -raise the inexact exception whenever the result is not exact. -

- -

-TestFloat assumes that conversions from floating-point to an integer type -should raise the invalid exception if the input cannot be rounded to an -integer representable in the result format. -In such a circumstance: -

    - -
  • -

    -If the result type is an unsigned integer, TestFloat normally expects the -result of the operation to be the type’s largest integer value. -In the case that the input is a negative number (not a NaN), a zero result may -also be accepted. -

    - -
  • -

    -If the result type is a signed integer and the input is a number (not a NaN), -TestFloat expects the result to be the largest-magnitude integer with the same -sign as the input. -When a NaN is converted to a signed integer type, TestFloat allows either the -largest postive or largest-magnitude negative integer to be returned. -

    - -
-Conversions to integer types are expected never to raise the overflow -exception. -

- -

6.2. Basic Arithmetic Operations

- -

-The following standard arithmetic operations can be tested: -

-
-f16_add      f16_sub      f16_mul      f16_div      f16_sqrt
-f32_add      f32_sub      f32_mul      f32_div      f32_sqrt
-f64_add      f64_sub      f64_mul      f64_div      f64_sqrt
-extF80_add   extF80_sub   extF80_mul   extF80_div   extF80_sqrt
-f128_add     f128_sub     f128_mul     f128_div     f128_sqrt
-
-
-The double-extended-precision (extF80) operations can be rounded -to reduced precision under rounding precision control. -

- -

6.3. Fused Multiply-Add Operations

- -

-For all floating-point formats except 80-bit -double-extended-precision, TestFloat can test the fused multiply-add operation -defined by the 2008 IEEE Floating-Point Standard. -The fused multiply-add operations are: -

-
-f16_mulAdd
-f32_mulAdd
-f64_mulAdd
-f128_mulAdd
-
-
-

- -

-If one of the multiplication operands is infinite and the other is zero, -TestFloat expects the fused multiply-add operation to raise the invalid -exception even if the third operand is a quiet NaN. -

- -

6.4. Remainder Operations

- -

-For each format, TestFloat can test the IEEE Standard’s remainder -operation. -These operations are: -

-
-f16_rem
-f32_rem
-f64_rem
-extF80_rem
-f128_rem
-
-
-The remainder operations are always exact and so require no rounding. -

- -

6.5. Round-to-Integer Operations

- -

-For each format, TestFloat can test the IEEE Standard’s round-to-integer -operation. -For most TestFloat programs, these operations are: -

-
-f16_roundToInt
-f32_roundToInt
-f64_roundToInt
-extF80_roundToInt
-f128_roundToInt
-
-
-

- -

-Just as for conversions to integer types (section 6.1 above), the -all-in-one testfloat program is again an exception. -For testfloat only, the round-to-integer operations have names of -these forms: -

-
-<float>_roundToInt_r_<round>
-<float>_roundToInt_x
-
-
-For the ‘_r_’ versions, the inexact exception -is never raised, and the <round> component specifies -the rounding mode as one of ‘near_even’, -‘near_maxMag’, ‘minMag’, -‘min’, or ‘max’. -The usual indication of rounding mode is ignored. -In contrast, the ‘_x’ versions accept the usual -indication of rounding mode and raise the inexact exception whenever the -result is not exact. -This irregular system follows the IEEE Standard’s particular -specification for the round-to-integer operations. -

- -

6.6. Comparison Operations

- -

-The following floating-point comparison operations can be tested: -

-
-f16_eq      f16_le      f16_lt
-f32_eq      f32_le      f32_lt
-f64_eq      f64_le      f64_lt
-extF80_eq   extF80_le   extF80_lt
-f128_eq     f128_le     f128_lt
-
-
-The abbreviation eq stands for “equal” (=), -le stands for “less than or equal” (≤), and -lt stands for “less than” (<). -

- -

-The IEEE Standard specifies that, by default, the less-than-or-equal and -less-than comparisons raise the invalid exception if either input is any -kind of NaN. -The equality comparisons, on the other hand, are defined by default to raise -the invalid exception only for signaling NaNs, not for quiet NaNs. -For completeness, the following additional operations can be tested if -supported: -

-
-f16_eq_signaling      f16_le_quiet      f16_lt_quiet
-f32_eq_signaling      f32_le_quiet      f32_lt_quiet
-f64_eq_signaling      f64_le_quiet      f64_lt_quiet
-extF80_eq_signaling   extF80_le_quiet   extF80_lt_quiet
-f128_eq_signaling     f128_le_quiet     f128_lt_quiet
-
-
-The signaling equality comparisons are identical to the standard -operations except that the invalid exception should be raised for any -NaN input. -Similarly, the quiet comparison operations should be identical to -their counterparts except that the invalid exception is not raised for -quiet NaNs. -

- -

-Obviously, no comparison operations ever require rounding. -Any rounding mode is ignored. -

- - -

7. Interpreting TestFloat Output

- -

-The “errors” reported by TestFloat programs may or may not really -represent errors in the system being tested. -For each test case tried, the results from the floating-point implementation -being tested could differ from the expected results for several reasons: -

    -
  • -The IEEE Floating-Point Standard allows for some variation in how conforming -floating-point behaves. -Two implementations can sometimes give different results without either being -incorrect. -
  • -The trusted floating-point emulation could be faulty. -This could be because there is a bug in the way the emulation is coded, or -because a mistake was made when the code was compiled for the current system. -
  • -The TestFloat program may not work properly, reporting differences that do not -exist. -
  • -Lastly, the floating-point being tested could actually be faulty. -
-It is the responsibility of the user to determine the causes for the -discrepancies that are reported. -Making this determination can require detailed knowledge about the IEEE -Standard. -Assuming TestFloat is working properly, any differences found will be due to -either the first or last of the reasons above. -Variations in the IEEE Standard that could lead to false error reports are -discussed in section 8, Variations Allowed by the IEEE -Floating-Point Standard. -

- -

-For each reported error (or apparent error), a line of text is written to the -default output. -If a line would be longer than 79 characters, it is divided. -The first part of each error line begins in the leftmost column, and any -subsequent “continuation” lines are indented with a tab. -

- -

-Each error reported is of the form: -

-
-<inputs>  => <observed-output>  expected: <expected-output>
-
-
-The <inputs> are the inputs to the operation. -Each output (observed or expected) is shown as a pair: the result value first, -followed by the exception flags. -

- -

-For example, two typical error lines could be -

-
--00.7FFF00  -7F.000100  => +01.000000 ...ux  expected: +01.000000 ....x
-+81.000004  +00.1FFFFF  => +01.000000 ...ux  expected: +01.000000 ....x
-
-
-In the first line, the inputs are -00.7FFF00 and --7F.000100, and the observed result is +01.000000 -with flags ...ux. -The trusted emulation result is the same but with different flags, -....x. -Items such as -00.7FFF00 composed of a sign character -(+/-), hexadecimal digits, and a single -period represent floating-point values (here 32-bit -single-precision). -The two instances above were reported as errors because the exception flag -results differ. -

- -

-Aside from the exception flags, there are ten data types that may be -represented. -Five are floating-point types: 16-bit half-precision, -32-bit single-precision, 64-bit double-precision, -80-bit double-extended-precision, and 128-bit -quadruple-precision. -The remaining five types are 32-bit and 64-bit -unsigned integers, 32-bit and 64-bit -two’s-complement signed integers, and Boolean values (the results of -comparison operations). -Boolean values are represented as a single character, either a 0 -(false) or a 1 (true). -A 32-bit integer is represented as 8 hexadecimal digits. -Thus, for a signed 32-bit integer, FFFFFFFF is -−1, and 7FFFFFFF is the largest positive value. -64-bit integers are the same except with 16 hexadecimal digits. -

- -

-Floating-point values are written decomposed into their sign, encoded exponent, -and encoded significand. -First is the sign character (+ or -), -followed by the encoded exponent in hexadecimal, then a period -(.), and lastly the encoded significand in hexadecimal. -

- -

-For 16-bit half-precision, notable values include: -

- - - - - - - - - - - - - - - -
+00.000    +0
+0F.000 1
+10.000 2
+1E.3FFmaximum finite value
+1F.000+infinity
 
-00.000−0
-0F.000−1
-10.000−2
-1E.3FFminimum finite value (largest magnitude, but negative)
-1F.000−infinity
-
-Certain categories are easily distinguished (assuming the xs are -not all 0): -
- - - - - - - - -
+00.xxx    positive subnormal numbers
+1F.xxxpositive NaNs
-00.xxxnegative subnormal numbers
-1F.xxxnegative NaNs
-
-

- -

-Likewise for other formats: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
32-bit single64-bit double128-bit quadruple
 
+00.000000    +000.0000000000000    +0000.0000000000000000000000000000    +0
+7F.000000+3FF.0000000000000+3FFF.0000000000000000000000000000 1
+80.000000+400.0000000000000+4000.0000000000000000000000000000 2
+FE.7FFFFF+7FE.FFFFFFFFFFFFF+7FFE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFmaximum finite value
+FF.000000+7FF.0000000000000+7FFF.0000000000000000000000000000+infinity
 
-00.000000    -000.0000000000000    -0000.0000000000000000000000000000    −0
-7F.000000-3FF.0000000000000-3FFF.0000000000000000000000000000−1
-80.000000-400.0000000000000-4000.0000000000000000000000000000−2
-FE.7FFFFF-7FE.FFFFFFFFFFFFF-7FFE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFminimum finite value
-FF.000000-7FF.0000000000000-7FFF.0000000000000000000000000000−infinity
 
+00.xxxxxx+000.xxxxxxxxxxxxx+0000.xxxxxxxxxxxxxxxxxxxxxxxxxxxxpositive subnormals
+FF.xxxxxx+7FF.xxxxxxxxxxxxx+7FFF.xxxxxxxxxxxxxxxxxxxxxxxxxxxxpositive NaNs
-00.xxxxxx-000.xxxxxxxxxxxxx-0000.xxxxxxxxxxxxxxxxxxxxxxxxxxxxnegative subnormals
-FF.xxxxxx-7FF.xxxxxxxxxxxxx-7FFF.xxxxxxxxxxxxxxxxxxxxxxxxxxxxnegative NaNs
-
-

- -

-The 80-bit double-extended-precision values are a little unusual -in that the leading bit of precision is not hidden as with other formats. -When canonically encoded, the leading significand bit of an 80-bit -double-extended-precision value will be 0 if the value is zero or subnormal, -and will be 1 otherwise. -Hence, the same values listed above appear in 80-bit -double-extended-precision as follows (note the leading 8 digit in -the significands): -

- - - - - - - - - - - - - - - - - - - - - -
+0000.0000000000000000    +0
+3FFF.8000000000000000 1
+4000.8000000000000000 2
+7FFE.FFFFFFFFFFFFFFFFmaximum finite value
+7FFF.8000000000000000+infinity
 
-0000.0000000000000000−0
-3FFF.8000000000000000−1
-4000.8000000000000000−2
-7FFE.FFFFFFFFFFFFFFFFminimum finite value
-7FFF.8000000000000000−infinity
-
-

- -

-Lastly, exception flag values are represented by five characters, one character -per flag. -Each flag is written as either a letter or a period (.) according -to whether the flag was set or not by the operation. -A period indicates the flag was not set. -The letter used to indicate a set flag depends on the flag: -

- - - - - - - - - - - - -
v    invalid exception
iinfinite exception (“divide by zero”)
ooverflow exception
uunderflow exception
xinexact exception
-
-For example, the notation ...ux indicates that the -underflow and inexact exception flags were set and that the other -three flags (invalid, infinite, and overflow) were not -set. -The exception flags are always written following the value returned as the -result of the operation. -

- - -

8. Variations Allowed by the IEEE Floating-Point Standard

- -

-The IEEE Floating-Point Standard admits some variation among conforming -implementations. -Because TestFloat expects the two implementations being compared to deliver -bit-for-bit identical results under most circumstances, this leeway in the -standard can result in false errors being reported if the two implementations -do not make the same choices everywhere the standard provides an option. -

- -

8.1. Underflow

- -

-The standard specifies that the underflow exception flag is to be raised -when two conditions are met simultaneously: -(1) tininess and (2) loss of accuracy. -

- -

-A result is tiny when its magnitude is nonzero yet smaller than any normalized -floating-point number. -The standard allows tininess to be determined either before or after a result -is rounded to the destination precision. -If tininess is detected before rounding, some borderline cases will be flagged -as underflows even though the result after rounding actually lies within the -normal floating-point range. -By detecting tininess after rounding, a system can avoid some unnecessary -signaling of underflow. -All the TestFloat programs support options -tininessbefore and --tininessafter to control whether TestFloat expects tininess on -underflow to be detected before or after rounding. -One or the other is selected as the default when TestFloat is compiled, but -these command options allow the default to be overridden. -

- -

-Loss of accuracy occurs when the subnormal format is not sufficient to -represent an underflowed result accurately. -The original 1985 version of the IEEE Standard allowed loss of accuracy to be -detected either as an inexact result or as a -denormalization loss; -however, few if any systems ever chose the latter. -The latest standard requires that loss of accuracy be detected as an inexact -result, and TestFloat can test only for this case. -

- -

8.2. NaNs

- -

-The IEEE Standard gives the floating-point formats a large number of NaN -encodings and specifies that NaNs are to be returned as results under certain -conditions. -However, the standard allows an implementation almost complete freedom over -which NaN to return in each situation. -

- -

-By default, TestFloat does not check the bit patterns of NaN results. -When the result of an operation should be a NaN, any NaN is considered as good -as another. -This laxness can be overridden with the -checkNaNs option of -programs testfloat_ver and testfloat. -In order for this option to be sensible, TestFloat must have been compiled so -that its internal floating-point implementation (SoftFloat) generates the -proper NaN results for the system being tested. -

- -

8.3. Conversions to Integer

- -

-Conversion of a floating-point value to an integer format will fail if the -source value is a NaN or if it is too large. -The IEEE Standard does not specify what value should be returned as the integer -result in these cases. -Moreover, according to the standard, the invalid exception can be raised -or an unspecified alternative mechanism may be used to signal such cases. -

- -

-TestFloat assumes that conversions to integer will raise the invalid -exception if the source value cannot be rounded to a representable integer. -In such cases, TestFloat expects the result value to be the largest-magnitude -positive or negative integer or zero, as detailed earlier in -section 6.1, Conversion Operations. -If option -checkInvInts is selected with programs -testfloat_ver and testfloat, integer results of -invalid operations are checked for an exact match. -In order for this option to be sensible, TestFloat must have been compiled so -that its internal floating-point implementation (SoftFloat) generates the -proper integer results for the system being tested. -

- - -

9. Contact Information

- -

-At the time of this writing, the most up-to-date information about TestFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/TestFloat.html. -

- - - - diff --git a/addins/TestFloat-3e/doc/TestFloat-history.html b/addins/TestFloat-3e/doc/TestFloat-history.html deleted file mode 100644 index 8de782cad..000000000 --- a/addins/TestFloat-3e/doc/TestFloat-history.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - -Berkeley TestFloat History - - - - -

History of Berkeley TestFloat, to Release 3e

- -

-John R. Hauser
-2018 January 20
-

- - -

-Releases of Berkeley TestFloat normally parallel those of Berkeley SoftFloat, -on which TestFloat is based. -Each TestFloat release necessarily incorporates all bug fixes from the -corresponding release of SoftFloat. -

- - -

Release 3e (2018 January)

- -
    - -
  • -Fixed a problem with the all-in-one testfloat program whereby -function set -all1 incorrectly also tested the three-operand fused -multiply-add operations. - -
  • -Modified the expected behavior of rounding mode odd (jamming) when -rounding to an integer value (either conversion to an integer format or a -‘roundToInt’ function). -Previously, for those cases only, rounding mode odd was expected -to act the same as rounding to minimum magnitude. -Now, when rounding to an integer value, the nearest odd integer is expected, -consistent with the round-to-odd result of other operations. - -
  • -Added options -checkInvInts and -checkAll to programs -testfloat_ver and testfloat. - -
  • -Improved the checking of integer results of invalid operations. - -
- - -

Release 3d (2017 August)

- -
    - -
  • -When the all-in-one testfloat program is compiled to test the C -language’s arithmetic, added the ability to test library functions -sqrtf, sqrtl, fmaf, fma, -and fmal, which were added to the C Standard in 1999. - -
- - -

Release 3c (2017 February)

- -
    - -
  • -Added support for testing rounding mode odd (jamming). - -
  • -Made support for testing 64-bit double-precistion floating-point -be subject to macro FLOAT64 (akin to macros FLOAT16, -EXTFLOAT80, and FLOAT128 from before). - -
  • -Fixed some bugs that caused compilation to fail with certain combinations of -option macro settings. - -
  • -Corrected the types of two internal variables to be sig_atomic_t -instead of bool. - -
  • -Improved the formatting of some error reports (concerning where lines are -broken when they exceed 79 characters in length). - -
- - -

Release 3b (2016 July)

- -
    - -
  • -Added the ability to test the common 16-bit -“half-precision” floating-point format. - -
  • -Added a -seed option to programs testfloat_gen, -testfloat, and testsoftfloat for setting the seed for -the pseudo-random number generator used to generate test cases. - -
  • -Where a specific choice is needed for how tininess is detected on underflow, -changed the default to be the detection of tininess after rounding -(-tininessafter) instead of before rounding -(-tininessbefore). - -
  • -Modified the format of reported discrepancies to show the signs of -floating-point values using + and - characters. - -
  • -Documented the use of the INLINE macro, and fixed the sources for -the case that function inlining is not supported by the C compiler. - -
  • -Documented the possible need to define macro THREAD_LOCAL to match -how the SoftFloat library was built. - -
  • -Modified the provided Makefiles to allow some options to be overridden from the -make command. - -
- - -

Release 3a (2015 October)

- -
    - -
  • -Replaced the license text supplied by the University of California, Berkeley, -and fixed some minor build problems. - -
- - -

Release 3 (2015 February)

- -
    - -
  • -Complete rewrite, funded by the University of California, Berkeley, and -consequently having a different use license than earlier releases. -Visible changes included different names for testable functions and command -options. - -
  • -Reinstated separate programs for generating test cases -(testfloat_ver) and verifying test results -(testfloat_gen), as alternatives to the all-in-one -testfloat program (which remained supported). - -
  • -Added support for testing conversions between floating-point and unsigned -integers, both 32-bit and 64-bit. - -
  • -Added support for testing a fused multiply-add operation, for all testable -floating-point formats except 80-bit double-extended-precision. - -
  • -Added support for testing a fifth rounding mode, near_maxMag -(round to nearest, with ties to maximum magnitude, away from zero). - -
  • -Added timesoftfloat (previously found in the Berkeley SoftFloat -package). - -
- - -

Release 2c (2015 January)

- -
    - -
  • -Fixed mistakes affecting some 64-bit processors. - -
  • -Made minor updates to the documentation, including improved wording for the -legal restrictions on using TestFloat releases through 2c (not -applicable to Release 3 or later). - -
- - -

-There was never a Release 2b. -

- - -

Release 2a (1998 December)

- -
    - -
  • -Added support for testing conversions between floating-point and -64-bit signed integers. - -
  • -Improved the Makefiles. - -
- - -

Release 2 (1997 June)

- -
    - -
  • -Integrated the generation of test cases and the checking of system results into -a single program. -(Before they were separate programs, normally joined by explicit command-line -pipes.) - -
  • -Improved the sequence of test cases. - -
  • -Added support for testing 80-bit double-extended-precision and -128-bit quadruple precision. - -
  • -Made program output more readable, and added new command arguments. - -
  • -Reduced dependence on the quality of the standard rand function -for generating test cases. -(Previously naively expected rand to be able to generate good -random bits for the entire machine word width.) - -
  • -Created testsoftfloat, with its own simpler complete software -floating-point (“slowfloat”) for comparison purposes. - -
  • -Made some changes to the source file structure, including renaming -environment.h to milieu.h (to avoid confusion with -environment variables). - -
- - -

Release 1a (1996 July)

- -
    - -
  • -Added the -tininessbefore and -tininessafter options -to control whether tininess should be detected before or after rounding. - -
- - -

Release 1 (1996 July)

- -
    - -
  • -Original release. - -
- - - - diff --git a/addins/TestFloat-3e/doc/TestFloat-source.html b/addins/TestFloat-3e/doc/TestFloat-source.html deleted file mode 100644 index ec3a4b47d..000000000 --- a/addins/TestFloat-3e/doc/TestFloat-source.html +++ /dev/null @@ -1,639 +0,0 @@ - - - - -Berkeley TestFloat Source Documentation - - - - -

Berkeley TestFloat Release 3e: Source Documentation

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. TestFloat Package Directory Structure
5. Dependence on Berkeley SoftFloat
6. Issues for Porting TestFloat to a New Target
6.1. Standard Headers <stdbool.h> and - <stdint.h>
6.2. Standard Header <fenv.h>
6.3. Macros for Build Options
6.4. Specializing the testfloat Program
6.5. Improving the Random Number Functions
7. Contact Information
-
- - -

1. Introduction

- -

-This document gives information needed for compiling and/or porting Berkeley -TestFloat, a small collection of programs for testing that an implementation of -binary floating-point conforms to the IEEE Standard for Floating-Point -Arithmetic. -For basic documentation about TestFloat refer to -TestFloat-general.html. -

- -

-The source code for TestFloat is intended to be relatively machine-independent. -Most programs in the TestFloat package should be compilable with any -ISO-Standard C compiler that also supports 64-bit integers. -If the all-in-one testfloat program will be used to test a new -floating-point implementation, additional effort will likely be required to -retarget that program to invoke the new floating-point operations. -TestFloat has been successfully compiled with the GNU C Compiler -(gcc) for several platforms. -

- -

-Release 3 of TestFloat was a complete rewrite relative to -Release 2c or earlier. -The current version of TestFloat is Release 3e. -

- -

-TestFloat depends on Berkeley SoftFloat, which is a software implementation of -binary floating-point that conforms to the IEEE Standard for Floating-Point -Arithmetic. -SoftFloat is not included with the TestFloat sources. -It can be obtained from the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- - -

2. Limitations

- -

-TestFloat assumes the computer has an addressable byte size of either 8 or -16 bits. -(Nearly all computers in use today have 8-bit bytes.) -

- -

-TestFloat is written entirely in C. -The C compiler used must conform at a minimum to the 1989 ANSI standard for the -C language (same as the 1990 ISO standard) and must in addition support basic -arithmetic on 64-bit integers. -Earlier releases of TestFloat were capable of testing 32-bit -single-precision and 64-bit double-precision floating-point -without requiring compiler support for 64-bit integers, but this -option is not supported starting with Release 3. -Since 1999, ISO standards for C have mandated compiler support for -64-bit integers. -A compiler conforming to the 1999 C Standard or later is recommended but not -strictly required. -

- -

-C Standard header files <stdbool.h> and -<stdint.h> are required for defining standard Boolean and -integer types. -If these headers are not supplied with the C compiler, minimal substitutes must -be provided. -TestFloat’s dependence on these headers is detailed later in -section 6.1, Standard Headers <stdbool.h> -and <stdint.h>. -

- - -

3. Acknowledgments and License

- -

-The TestFloat package was written by me, John R. Hauser. -Release 3 of TestFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of TestFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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. -

- - -

4. TestFloat Package Directory Structure

- -

-Because TestFloat is targeted to multiple platforms, its source code is -slightly scattered between target-specific and target-independent directories -and files. -The supplied directory structure is as follows: -

-
-doc
-source
-    subj-C
-build
-    template
-    Linux-386-GCC
-    Linux-386-SSE2-GCC
-    Linux-x86_64-GCC
-    Linux-ARM-VFPv2-GCC
-    Win32-MinGW
-    Win32-SSE2-MinGW
-    Win64-MinGW-w64
-
-
-The majority of the TestFloat sources are provided in the source -directory. -The subj-C subdirectory contains the sources that -configure the all-in-one testfloat program to test the C -compiler’s implementation of the standard C types float, -double, and possibly long double. -The ‘subj’ in subj-C is an -abbreviation of subject, referring to the floating-point that is the -subject of the test. -If testfloat is retargeted to test other floating-point -implementations, the corresponding source files would be expected to be in -other subdirectories alongside subj-C, with names of -the form subj-<target>. -More about retargeting testfloat is found in -section 6.4, Specializing the testfloat -Program. -

- -

-The build directory is intended to contain a subdirectory for each -target platform for which builds of the TestFloat programs may be created. -For each build target, the target’s subdirectory is where all derived -object files and the completed TestFloat executables are created. -The template subdirectory is not an actual build target but -contains sample files for creating new target directories. -

- -

-Ignoring the template directory, the supplied target directories -are intended to follow a naming system of -<execution-environment>-<compiler>. -For the example targets, -<execution-environment> is -Linux-386, Linux-386-SSE2, -Linux-x86_64, -Linux-ARM-VFPv2, Win32, -Win32-SSE2, or Win64, and -<compiler> is GCC, -MinGW, or MinGW-w64. -

- -

-All of the supplied target directories are merely examples that may or may not -be correct for compiling on any particular system. -There are currently no plans to include and maintain in the TestFloat package -the build files needed for a great many users’ compilation environments, -which can span a huge range of operating systems, compilers, and other tools. -

- -

-As supplied, each target directory contains two files: -

-
-Makefile
-platform.h
-
-
-The provided Makefile is written for GNU make. -A build of TestFloat for the specific target is begun by executing the -make command with the target directory as the current directory. -A completely different build tool can be used if an appropriate -Makefile equivalent is created. -

- -

-The platform.h header file exists to provide a location for -additional C declarations specific to the build target. -Every C source file of TestFloat contains a #include for -platform.h. -In many cases, the contents of platform.h can be as simple as one -or two lines of code. -If the target’s compiler or library has bugs or other shortcomings, -workarounds for these issues may be possible with target-specific declarations -in platform.h, without the need to modify the main TestFloat -sources. -

- -

-It may not be necessary to build all of the TestFloat programs. -For testing a floating-point implementation, typically -testfloat_gen and testfloat will not both be used, -and testfloat_ver may not be needed either. -The Makefile (or equivalent) can be modified not to create unneeded programs. -This may be especially relevant for the all-in-one test program -testfloat, which might not build without special attention. -

- - -

5. Dependence on Berkeley SoftFloat

- -

-In addition to the distributed sources, TestFloat depends on the existence of a -compatible Berkeley SoftFloat library and the corresponding header file -softfloat.h. -As mentioned earlier, SoftFloat is a separate package available at Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -The SoftFloat library must be compiled before the TestFloat programs can be -built. -In the example Makefiles, the locations of the SoftFloat header files and -pre-compiled library are specified by these macros: -

-
-
SOFTFLOAT_INCLUDE_DIR -
-The path of the directory containing softfloat.h, as well as other -nonstandard header files referenced by softfloat.h, if any. -
SOFTFLOAT_H -
-A list of the full paths of all SoftFloat header files needed by SoftFloat -clients. This list must include softfloat.h and may also include -other header files referenced by softfloat.h, such as -softfloat_types.h. -This macro is used only to establish build dependencies between the SoftFloat -header files and TestFloat’s source files, in case the SoftFloat header -files are changed. -
SOFTFLOAT_LIB -
-The full path of the compiled SoftFloat library (usually -softfloat.a or libsoftfloat.a). -
-
-

- - -

6. Issues for Porting TestFloat to a New Target

- -

6.1. Standard Headers <stdbool.h> and <stdint.h>

- -

-The TestFloat sources make use of standard headers -<stdbool.h> and <stdint.h>, which have -been part of the ISO C Standard Library since 1999. -With any recent compiler, these standard headers are likely to be supported, -even if the compiler does not claim complete conformance to the latest ISO C -Standard. -For older or nonstandard compilers, substitutes for -<stdbool.h> and <stdint.h> may need to be -created. -TestFloat depends on these names from <stdbool.h>: -

-
-bool
-true
-false
-
-
-and on these names from <stdint.h>: -
-
-uint16_t
-uint32_t
-uint64_t
-int32_t
-int64_t
-UINT64_C
-INT64_C
-uint_least8_t
-uint_fast8_t
-uint_fast16_t
-uint_fast32_t
-uint_fast64_t
-int_fast8_t
-int_fast16_t
-int_fast32_t
-int_fast64_t
-
-
-

- - -

6.2. Standard Header <fenv.h>

- -

-Because the supplied all-in-one testfloat program tests the -floating-point operations of the C language, it uses the facilities provided by -standard C header <fenv.h> to access the floating-point -environment of C, in particular to set the rounding mode and to access the -floating-point exception flags. -Like <stdbool.h> and <stdint.h>, -<fenv.h> has been part of the ISO C Standard Library since -1999, but older or nonstandard C compilers may not support it. -

- -

-Some form of standard header <fenv.h> is needed only if the -testfloat program is wanted and the program will not be -retargeted to invoke a floating-point implementation in a way that bypasses the -standard C environment. -Typically, if testfloat is wanted, it will be retargeted to invoke -a new floating-point implementation directly, making -<fenv.h> irrelevant. -For more about retargeting testfloat, see section 6.4 -below, Specializing the testfloat Program. -

- - -

6.3. Macros for Build Options

- -

-The TestFloat source files are affected by several C preprocessor macros: -

-
-
LITTLEENDIAN -
-Must be defined for little-endian machines; -must not be defined for big-endian machines. -
INLINE -
-Can be defined to a sequence of tokens used to indicate that a C function -should be inlined. -If the compiler does not support the inlining of functions, this macro must not -be defined. -For compilers that conform to the C Standard’s rules for inline -functions, this macro can be defined as the single keyword inline. -For other compilers that follow a convention pre-dating the standardization of -inline, this macro may need to be defined to extern -inline. -
THREAD_LOCAL -
-Can be defined to a sequence of tokens that, when appearing at the start of a -variable declaration, indicates to the C compiler that the variable is -per-thread, meaning that each execution thread gets its own separate -instance of the variable. -This macro is used in the supplied version of Berkeley SoftFloat’s header -softfloat.h, in the declarations of variables -softfloat_roundingMode, softfloat_detectTininess, -extF80_roundingPrecision, and -softfloat_exceptionFlags. -To use the supplied, unmodified header softfloat.h, this macro -must be defined (or not defined) the same as when the SoftFloat library was -built. -
-
-
FLOAT16 -
-Must be defined if the TestFloat programs are to support the -16-bit half-precision floating-point format. -
FLOAT64 -
-Must be defined if the TestFloat programs are to support the -64-bit double-precision floating-point format. -
EXTFLOAT80 -
-Must be defined if the TestFloat programs are to support the -80-bit double-extended-precision floating-point format. -
FLOAT128 -
-Must be defined if the TestFloat programs are to support the -128-bit quadruple-precision floating-point format. -
FLOAT_ROUND_ODD -
-Must be defined if the TestFloat programs are to support rounding to odd -(jamming). -To be useful, this option also requires that the Berkeley SoftFloat library was -compiled with macro SOFTFLOAT_ROUND_ODD defined. -
-
-Following the usual custom for C, for all the macros except -INLINE and THREAD_LOCAL, the content of a -macro’s definition is irrelevant; -what matters is a macro’s effect on #ifdef directives. -

- -

-It is recommended that any definition of macros LITTLEENDIAN, -INLINE, and THREAD_LOCAL be made in a build -target’s platform.h header file, because these macros are -expected to be determined inflexibly by the target machine and compiler. -The other five macros select build options, and hence might be better located -in the target’s Makefile (or its equivalent). -

- - -

6.4. Specializing the testfloat Program

- -

-The supplied sources for the all-in-one testfloat program cause -testfloat to test the C compiler’s float and -double types for C operations +, -, -*, /, etc. -The supplied version is also capable of testing C type long -double if the sources are compiled with one of these macros -defined: -

-
-
LONG_DOUBLE_IS_EXTFLOAT80 -
-Indicates that type long double is -80-bit double-extended-precision floating-point. -
LONG_DOUBLE_IS_FLOAT128 -
-Indicates that type long double is -128-bit quadruple-precision floating-point. -
-
-By default, testfloat assumes that only the IEEE Standard’s -original four rounding modes (near_even, minMag, -min, and max) are supported by the floating-point -being tested. -For other rounding modes, additional macro can be defined: -
-
-
SUBJFLOAT_ROUND_NEAR_MAXMAG -
-Indicates that the subject floating-point supports rounding mode -near_maxMag (nearest/away). -
SUBJFLOAT_ROUND_ODD -
-Indicates that the subject floating-point supports rounding mode -odd (jamming). -
-
-

- -

-To test a new and/or different implementation of floating-point, -testfloat must normally be retargeted to invoke this other -floating-point instead of C’s floating-point. -Two source files define the functions that testfloat uses to -invoke floating-point operations for testing: -

-
-subjfloat_config.h
-subjfloat.c
-
-
-For the default target of testing C’s floating-point, these files are -contained in directory source/subj-C as discussed -earlier. -For a different subject floating-point, it is recommended that appropriate -versions of subjfloat_config.h and subjfloat.c be -stored in a sibling subj-<target> -directory, where <target> names the particular -target. -

- -

-Header file subjfloat_config.h defines a macro of the form -SUBJ_* for each subject function supported. -For example, if function subj_f32_add exists to perform -32-bit floating-point addition, then -subjfloat_config.h should have a definition for macro -SUBJ_F32_ADD. -The actual function subj_f32_add is expected to be defined in -subjfloat.c, along with all other subject functions. -A common header file, subjfloat.h, (not target-specific) provides -prototype declarations for all possible subject functions that -testfloat may be compiled to test, whether actually existing or -not. -(There is no penalty for the header to declare prototypes of nonexistent -functions that are never called.) -For a specific build of testfloat, the -list option -will list all subject functions that the testfloat program is able -to invoke and thus test. -

- -

-In the source code as supplied, macros LONG_DOUBLE_IS_EXTFLOAT80 -and LONG_DOUBLE_IS_FLOAT128 affect only the target-specific source -files in source/subj-C, so these macros can be -ignored for any other subject floating-point that does not depend on them. -On the other hand, macros SUBJFLOAT_ROUND_NEAR_MAXMAG and -SUBJFLOAT_ROUND_ODD always determine whether the -testfloat program attempts to test rounding modes -near_maxMag and odd, regardless of the subject -floating-point. -

- - -

6.5. Improving the Random Number Functions

- -

-If you are serious about using TestFloat for testing floating-point, you should -consider replacing the random number functions in random.c. -The supplied random number functions are built on top of the standard C -rand function. -Because function rand is rather poor on some systems, the -functions in random.c assume very little about the quality of -rand. -As a result, rand is called more frequently than it might need to -be, shortening the time before random number sequences repeat, and possibly -wasting time as well. -If rand is better on a given target platform, or if another, -better random number generator is available (such as rand48 on -UNIX-derived systems), TestFloat can be improved by overriding the given -random.c with a target-specific one. -

- -

-Rather than modifying the supplied file random.c, it is -recommended instead that a new, alternate file be created and the -target’s Makefile be modified to refer to that alternate file in place of -random.c. -

- - -

7. Contact Information

- -

-At the time of this writing, the most up-to-date information about TestFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/TestFloat.html. -

- - - - diff --git a/addins/TestFloat-3e/doc/testfloat.html b/addins/TestFloat-3e/doc/testfloat.html deleted file mode 100644 index 34313cbba..000000000 --- a/addins/TestFloat-3e/doc/testfloat.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - -testfloat - - - - -

Berkeley TestFloat Release 3e: testfloat

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testfloat program tests an implementation of floating-point -arithmetic for conformity to the IEEE Standard for Binary Floating-Point -Arithmetic. -testfloat is part of the Berkeley TestFloat package, a small -collection of programs for performing such tests. -For general information about TestFloat, see file -TestFloat-general.html. -

- -

-The testfloat program is an all-in-one tool for testing -floating-point arithmetic. -It generates test operand values, invokes a floating-point operation with the -generated operands, and examines the corresponding computed results, reporting -unexpected results as likely errors. -While the processes of generating inputs and examining results are generic, a -particular build of testfloat is limited to testing only the one -implementation of floating-point it has been compiled to invoke. -For example, while one instance of testfloat might be compiled to -execute a computer’s hardware instruction for floating-point addition, a -different version might be compiled to call a subroutine called -myAddFloat that is linked into the testfloat program. -To test a new implementation of floating-point (a new set of machine -instructions or a new set of subroutines), a new testfloat must be -compiled containing the code needed to invoke the new floating-point. -

- -

-The default build of testfloat assumes that C types -float and double are 32-bit and -64-bit binary floating-point types conforming to the IEEE -Standard, and tests the C operations of +, -, -*, /, type conversions, etc. -This tests the floating-point arithmetic seen by C programs. -Depending on the compiler and the options selected during compilation, this may -or may not be the same as the computer’s floating-point hardware, if any. -

- -

-The testfloat program will ordinarily test an operation for all -five rounding modes defined by the IEEE Floating-Point Standard, one after the -other, plus possibly a sixth mode, round to odd (depending on the -options selected when testfloat was compiled). -If the rounding mode is not supposed to have any affect on the -results—for instance, some operations do not require rounding—only -the nearest/even rounding mode is checked. -For double-extended-precision operations affected by rounding precision -control, testfloat also tests all three rounding precision modes, -one after the other. -Testing can be limited to a single rounding mode and/or rounding precision with -appropriate command-line options. -

- -

-For more about the operation of testfloat and how to interpret its -output, refer to -TestFloat-general.html. -

- - -

Command Syntax

- -

-The testfloat program is executed as a command with this syntax: -

-
-testfloat [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of either a testable operation -or a function set. -The available options and function sets are documented below. -The -list option can be used to obtain a list of all testable -operations for a given build of testfloat. -If testfloat is executed without any arguments, a summary of usage -is written. -

- - -

Options

- -

-The testfloat program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-list

- -

-The -list option causes a list of testable operations to be -written, after which the program exits. -An operation is testable by testfloat if the program knows some -way to invoke the operation. -

- -

-seed <num>

- -

-The -seed option sets the seed for the pseudo-random number -generator used for generating test cases. -The argument to -seed is a nonnegative integer. -Executing the same compiled testfloat program with the same -arguments (including the same pseudo-random number seed) should always perform -the same sequence of tests, whereas changing the pseudo-random number seed -should result in a different sequence of tests. -The default seed number is 1. -

- -

-level <num>

- -

-The -level option sets the level of testing. -The argument to -level can be either 1 or 2. -The default is level 1. -Level 2 performs many more tests than level 1 and thus can reveal -bugs not found by level 1. -

- -

-errors <num>

- -

-The -errors option instructs testfloat to report no -more than the specified number of errors for any combination of operation, -rounding mode, etc. -The argument to -errors must be a nonnegative decimal integer. -Once the specified number of error reports has been generated, -testfloat ends the current test and begins the next one, if any. -The default is -errors 20. -

- -

-Against intuition, -errors 0 causes -testfloat to report every error it finds. -

- -

-errorstop

- -

-The -errorstop option causes the program to exit after the first -operation for which any errors are reported. -

- -

-forever

- -

-The -forever option causes a single operation to be repeatedly -tested. -Only one rounding mode and/or rounding precision can be tested in a single -execution. -If not specified, the rounding mode defaults to nearest/even. -For 80-bit double-extended-precision operations, the rounding -precision defaults to full double-extended precision. -The testing level is set to 2 by this option. -

- -

-checkNaNs

- -

-The -checkNaNs option causes testfloat to verify the -bitwise correctness of NaN results. -In order for this option to be sensible, testfloat must have been -compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper NaN results for the system being -tested. -

- -

-checkInvInts

- -

-The -checkInvInts option causes testfloat to verify -the bitwise correctness of integer results of invalid operations. -In order for this option to be sensible, testfloat must have been -compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper integer results for the system being -tested. -

- -

-checkAll

- -

-Enables both -checkNaNs and -checkInvInts. -

- -

-precision32, -precision64, -precision80

- -

-For 80-bit double-extended-precision operations affected by -rounding precision control, the -precision32 option restricts -testing to only the cases in which the rounding precision is -32 bits, equivalent to 32-bit single-precision. -The other rounding precision choices are not tested. -Likewise, -precision64 fixes the rounding precision to -64 bits, equivalent to 64-bit double-precision, and --precision80 fixes the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -

- -

-The precision-control options may not be supported at all if no -double-extended-precision operations are testable. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-The -rnear_even option restricts testing to only the cases in -which the rounding mode is nearest/even. -The other rounding mode choices are not tested. -Likewise, -rnear_maxMag forces rounding to nearest/maximum -magnitude (nearest-away), -rminMag forces rounding to minimum -magnitude (toward zero), -rmin forces rounding to minimum (down, -toward negative infinity), -rmax forces rounding to maximum (up, -toward positive infinity), and -rodd, if supported, forces -rounding to odd. -These options are ignored for operations that are exact and thus do not round, -or that have the rounding mode included in the function name (such as -f32_to_i32_r_near_maxMag). -

- -

-tininessbefore, -tininessafter

- -

-The -tininessbefore option indicates that the floating-point -implementation being tested detects tininess on underflow before rounding. -The -tininessafter option indicates that tininess is detected -after rounding. -The testfloat program alters its expectations accordingly. -These options override the default selected when testfloat was -compiled. -Choosing the wrong one of these two options should cause error reports for some -(but not all) operations. -

- - -

Function Sets

- -

-Just as testfloat can test an operation for all five or six -rounding modes in sequence, multiple operations can be tested with a single -execution of testfloat. -Two sets are recognized: -all1 and -all2. -The set -all1 is all one-operand operations, while --all2 is all two-operand operations. -A function set is used in place of an operation name in the -testfloat command line, such as -

-
-testfloat [<option>...] -all1
-
-
-

- - - - diff --git a/addins/TestFloat-3e/doc/testfloat_gen.html b/addins/TestFloat-3e/doc/testfloat_gen.html deleted file mode 100644 index dfc5abe02..000000000 --- a/addins/TestFloat-3e/doc/testfloat_gen.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - -testfloat_gen - - - - -

Berkeley TestFloat Release 3e: testfloat_gen

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testfloat_gen program generates test cases for testing that an -implementation of floating-point arithmetic conforms to the IEEE Standard for -Binary Floating-Point Arithmetic. -testfloat_gen is part of the Berkeley TestFloat package, a small -collection of programs for performing such tests. -For general information about TestFloat, see file -TestFloat-general.html. -

- -

-A single execution of testfloat_gen generates test cases for only -a single floating-point operation and associated options. -The testfloat_gen program must be repeatedly executed to generate -test cases for each operation to be tested. -

- -

-The testfloat_gen program writes the test cases it generates to -standard output. -This output can either be captured in a file through redirection, or be piped -to another program that exercises a floating-point operation using the test -cases as they are supplied. -Depending on use, the total output from testfloat_gen can be -large, so piping to another program may be the best choice to avoid using -inordinate file space. -The format of testfloat_gen’s output is raw hexadecimal -text, described in the section below titled Output Format. -

- - -

Command Syntax

- -

-The testfloat_gen program is executed as a command in one of these -forms: -

-
-testfloat_gen [<option>...] <type>
-testfloat_gen [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, and -<option> is a supported option, documented below. -A testfloat_gen command expects either a -<type> specifying the type and number of outputs or a -<function> naming a floating-point operation. -If testfloat_gen is executed without any arguments, a summary of -usage is written. -

- -

-A <type> can be one of the following: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ui32unsigned 32-bit integers
ui64unsigned 64-bit integers
i32signed 32-bit integers
i64signed 64-bit integers
f16 [<num>]one or more 16-bit half-precision floating-point values
f32 [<num>]one or more 32-bit single-precision floating-point values
f64 [<num>]one or more 64-bit double-precision floating-point values
extF80 [<num>]   one or more 80-bit double-extended-precision floating-point -values
f128 [<num>]one or more 128-bit quadruple-precision floating-point -values
-
-Optional <num> is one of 1, 2, or 3. -If a <type> is given without -<num> (such as ui32 or -f64), testfloat_gen outputs a list of values of the -specified type, one value per line, appropriate for testing a floating-point -operation with exactly one operand of the given type. -If a floating-point type and number are given (such as -f32 2 or -extF80 1), testfloat_gen -outputs the specified number of values per line, appropriate for testing a -floating-point operation with that number of operands. -Although the exact operation being tested is not specified, the test cases -output by testfloat_gen cover all standard floating-point -operations, to the degree explained in -TestFloat-general.html. -

- -

-If a <function> operation name is given, then each -line of output from testfloat_gen contains not only the operands -for that operation (as would be generated by an appropriate -<type> argument) but also the expected results as -determined by testfloat_gen’s internal floating-point -emulation (Berkeley SoftFloat). -The available operation names are listed in -TestFloat-general.html. -In all cases, floating-point operations have two results: -first, a value, which may be floating-point, integer, or Boolean, and, second, -the floating-point exception flags raised by the operation. -If the output from a tested floating-point operation does not match the -expected output specified by testfloat_gen, this may or may not -indicate an error in the floating-point operation. -For further explanation, see -TestFloat-general.html, -especially the section titled Variations Allowed by the IEEE Floating-Point -Standard. -

- - -

Options

- -

-The testfloat_gen program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-prefix <text>

- -

-The -prefix option causes testfloat_gen to write the -supplied text argument verbatim as the first line of output before any test -cases. -This can be used, for example, to indicate to a downstream program what kind of -test to perform for the test cases that follow. -

- -

-seed <num>

- -

-The -seed option sets the seed for the pseudo-random number -generator used for generating test cases. -The argument to -seed is a nonnegative integer. -Executing the same testfloat_gen program with the same arguments -(including the same pseudo-random number seed) should always generate the same -sequence of test cases, whereas changing the pseudo-random number seed should -result in a different sequence of test cases. -The default seed number is 1. -

- -

-level <num>

- -

-The -level option sets the level of testing. -The argument to -level can be either 1 or 2. -The default is level 1. -Level 2 causes many more test cases to be generated, with better -coverage, than level 1. -

- -

-n <num>

- -

-Option -n specifies the number of test cases to generate. -For each <type> or -<function> and each testing level (set by --level), there is a minimum value that testfloat_gen -will accept for <num>. -If no -n option is given, the number of test cases generated by -testfloat_gen equals the minimum value acceptable for the --n argument. -Option -n cannot be used to reduce this number, but can increase -it, without changing the testing level. -

- -

-forever

- -

-The -forever option causes test cases to be generated -indefinitely, without limit (until the program is terminated by some external -cause). -The testing level is set to 2 by this option. -

- -

-precision32, -precision64, -precision80

- -

-When a <function> is specified that is an -80-bit double-extended-precision operation affected by rounding -precision control, the -precision32 option sets the rounding -precision to 32 bits, equivalent to 32-bit -single-precision. -Likewise, -precision64 sets the rounding precision to -64 bits, equivalent to 64-bit double-precision, and --precision80 sets the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -When rounding precision is applicable but not specified, the default is the -full 80 bits, same as -precision80. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-When a <function> is specified that requires -rounding, the -rnear_even option sets the rounding mode to -nearest/even; --rnear_maxMag sets rounding to nearest/maximum magnitude -(nearest-away); --rminMag sets rounding to minimum magnitude (toward zero); --rmin sets rounding to minimum (down, toward negative infinity); --rmax sets rounding to maximum (up, toward positive infinity); -and -rodd, if supported, sets rounding to odd. -These options are ignored for operations that are exact and thus do not round. -When rounding mode is relevant but not specified, the default is to round to -nearest/even, same as -rnear_even. -

- -

-tininessbefore, -tininessafter

- -

-When a <function> is specified that requires -rounding, the -tininessbefore option indicates that tininess on -underflow will be detected before rounding, while -tininessafter -indicates that tininess on underflow will be detected after rounding. -These options are ignored for operations that are exact and thus do not round. -When the method of tininess detection matters but is not specified, the default -is to detect tininess on underflow after rounding, same as --tininessafter. -

- -

-notexact, -exact

- -

-When a <function> is specified that rounds to an -integer (either conversion to an integer type or a roundToInt -operation), the -notexact option indicates that the inexact -exception flag is never raised, while -exact indicates that the -inexact exception flag is to be raised if the result is inexact. -For other operations, these options are ignored. -If neither option is specified, the default is not to raise the inexact -exception flag when rounding to an integer, same as -notexact. -

- - -

Output Format

- -

-For each test case generated, testfloat_gen writes a single line -of text to standard output. -When the testfloat_gen command is given a -<type> argument, each test case consists of either -one integer value or one, two, or three floating-point values. -Each value is written to output as a raw hexadecimal number. -When there is more than one value per line, they are separated by spaces. -For example, output from executing -

-
-testfloat_gen f64 2
-
-
-might look like this: -
-
-3F90EB5825D6851E C3E0080080000000
-41E3C00000000000 C182024F8AE474A8
-7FD80FFFFFFFFFFF 7FEFFFFFFFFFFF80
-3FFFED6A25C534BE 3CA1000000020000
-...
-
-
-with each hexadecimal number being one 64-bit floating-point -value. -Note that, for floating-point values, the sign and exponent are at the -most-significant end of the number. -Thus, for the first number on the first line above, the leading hexadecimal -digits 3F9 are the sign and encoded exponent of the -64-bit floating-point value, and the remaining digits are the -encoded significand. -

- -

-When testfloat_gen is given a <function> -operation name, each line of output has not only the operands for the operation -but also the expected output, consisting of a result value and the exception -flags that are raised. -For example, the output from -

-
-testfloat_gen f64_add
-
-
-could include these lines: -
-
-3F90EB5825D6851E C3E0080080000000 C3E0080080000000 01
-41E3C00000000000 C182024F8AE474A8 41E377F6C1D46E2D 01
-7FD80FFFFFFFFFFF 7FEFFFFFFFFFFF80 7FF0000000000000 05
-3FFFED6A25C534BE 3CA1000000020000 3FFFED6A25C534BF 01
-...
-
-
-On each line, the first two numbers are the operands for the floating-point -addition, and the third and fourth numbers are the expected floating-point -result (the sum) and the exception flags raised. -Exception flags are encoded with one bit per flag as follows: -
- - - - - - - - - - - - -
bit 0   inexact exception
bit 1underflow exception
bit 2overflow exception
bit 3infinite exception (“divide by zero”)
bit 4invalid exception
-
-

- - - - diff --git a/addins/TestFloat-3e/doc/testfloat_ver.html b/addins/TestFloat-3e/doc/testfloat_ver.html deleted file mode 100644 index 83c6ea82d..000000000 --- a/addins/TestFloat-3e/doc/testfloat_ver.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - -testfloat_ver - - - - -

Berkeley TestFloat Release 3e: testfloat_ver

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testfloat_ver program accepts test-case results obtained from -exercising an implementation of floating-point arithmetic and verifies that -those results conform to the IEEE Standard for Binary Floating-Point -Arithmetic. -testfloat_ver is part of the Berkeley TestFloat package, a small -collection of programs for performing such tests. -For general information about TestFloat, see file -TestFloat-general.html. -

- -

-A single execution of testfloat_ver verifies results for only a -single floating-point operation and associated options. -The testfloat_ver program must be repeatedly executed to verify -results for each operation to be tested. -

- -

-The test cases to be verified are read by testfloat_ver from -standard input. -This input will typically be piped from another program that, for each test -case, invokes the floating-point operation and writes out the results. -The format of testfloat_ver’s input is raw hexadecimal text, -described in the section below titled Input Format. -

- -

-For each test case given to it, testfloat_ver examines the -computed results and reports any unexpected results as likely errors. - -For more about the operation of testfloat_ver and how to interpret -its output, refer to -TestFloat-general.html. -

- - -

Command Syntax

- -

-The testfloat_ver program is executed as a command with this -syntax: -

-
-testfloat_ver [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of a testable operation. -The available options are documented below. -The testable operation names are listed in -TestFloat-general.html. -If testfloat_ver is executed without any arguments, a summary of -usage is written. -

- - -

Options

- -

-The testfloat_ver program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-errors <num>

- -

-The -errors option instructs testfloat_ver to report -no more than the specified number of errors. -The argument to -errors must be a nonnegative decimal integer. -Once the specified number of error reports has been generated, the program -exits. -The default is -errors 20. -

- -

-Against intuition, -errors 0 causes -testfloat_ver to continue for any number of errors. -

- -

-checkNaNs

- -

-The -checkNaNs option causes testfloat_ver to verify -the bitwise correctness of NaN results. -In order for this option to be sensible, testfloat_ver must have -been compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper NaN results for the system being -tested. -

- -

-checkInvInts

- -

-The -checkInvInts option causes testfloat_ver to -verify the bitwise correctness of integer results of invalid operations. -In order for this option to be sensible, testfloat_ver must have -been compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper integer results for the system being -tested. -

- -

-checkAll

- -

-Enables both -checkNaNs and -checkInvInts. -

- -

-precision32, -precision64, -precision80

- -

-When <function> is an 80-bit -double-extended-precision operation affected by rounding precision control, the --precision32 option indicates that the rounding precision should -be 32 bits, equivalent to 32-bit single-precision. -Likewise, -precision64 indicates that the rounding precision -should be 64 bits, equivalent to 64-bit -double-precision, and -precision80 indicates that the rounding -precision should be the full 80 bits of the -double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -When rounding precision is applicable but not specified, the default assumption -is the full 80 bits, same as -precision80. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-When <function> is an operation that requires -rounding, the -rnear_even option indicates that rounding should be -to nearest/even, -rnear_maxMag indicates rounding to -nearest/maximum magnitude (nearest-away), -rminMag indicates -rounding to minimum magnitude (toward zero), -rmin indicates -rounding to minimum (down, toward negative infinity), -rmax -indicates rounding to maximum (up, toward positive infinity), and --rodd, if supported, indicates rounding to odd. -These options are ignored for operations that are exact and thus do not round. -When rounding mode is relevant but not specified, the default assumption is -rounding to nearest/even, same as -rnear_even. -

- -

-tininessbefore, -tininessafter

- -

-When <function> is an operation that requires -rounding, the -tininessbefore option indicates that tininess on -underflow should be detected before rounding, while -tininessafter -indicates that tininess on underflow should be detected after rounding. -These options are ignored for operations that are exact and thus do not round. -When the method of tininess detection matters but is not specified, the default -assumption is that tininess should be detected after rounding, same as --tininessafter. -

- -

-notexact, -exact

- -

-When <function> is an operation that rounds to an -integer (either conversion to an integer type or a roundToInt -operation), the -notexact option indicates that the inexact -exception flag should never be raised, while -exact indicates that -the inexact exception flag should be raised when the result is inexact. -For other operations, these options are ignored. -If neither option is specified, the default assumption is that the -inexact exception flag should not be raised when rounding to an integer, -same as -notexact. -

- - -

Input Format

- -

-For a given <function> argument, the input format -expected by testfloat_ver is the same as the output generated by -program -testfloat_gen for -the same argument. -

- -

-Input to testfloat_ver is expected to be text, with each line -containing the data for one test case. -The number of input lines thus equals the number of test cases. -A single test case is organized as follows: first are the operands for the -operation, next is the result value obtained, and last is a number indicating -the exception flags that were raised. -These values are all expected to be provided as raw hexadecimal numbers -separated on the line by spaces. -For example, for the command -

-
-testfloat_ver f64_add
-
-
-valid input could include these lines: -
-
-3F90EB5825D6851E C3E0080080000000 C3E0080080000000 01
-41E3C00000000000 C182024F8AE474A8 41E377F6C1D46E2D 01
-7FD80FFFFFFFFFFF 7FEFFFFFFFFFFF80 7FF0000000000000 05
-3FFFED6A25C534BE 3CA1000000020000 3FFFED6A25C534BF 01
-...
-
-
-On each line above, the first two hexadecimal numbers represent the -64-bit floating-point operands, the third hexadecimal number is -the 64-bit floating-point result of the operation (the sum), and -the last hexadecimal number gives the exception flags that were raised by the -operation. -

- -

-Note that, for floating-point values, the sign and exponent are at the -most-significant end of the number. -Thus, for the first number on the first line above, the leading hexadecimal -digits 3F9 are the sign and encoded exponent of the -64-bit floating-point value, and the remaining digits are the -encoded significand. -

- -

-Exception flags are encoded with one bit per flag as follows: -

- - - - - - - - - - - - -
bit 0   inexact exception
bit 1underflow exception
bit 2overflow exception
bit 3infinite exception (“divide by zero”)
bit 4invalid exception
-
-

- - - - diff --git a/addins/TestFloat-3e/doc/testsoftfloat.html b/addins/TestFloat-3e/doc/testsoftfloat.html deleted file mode 100644 index cd8af6921..000000000 --- a/addins/TestFloat-3e/doc/testsoftfloat.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - -testsoftfloat - - - - -

Berkeley TestFloat Release 3e: testsoftfloat

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testsoftfloat program tests that a build of the Berkeley -SoftFloat library conforms to the IEEE Standard for Binary Floating-Point -Arithmetic as expected. -Program testsoftfloat is part of the Berkeley TestFloat package, a -small collection of programs for performing such tests. -For general information about TestFloat, as well as for basics about the -operation of testsoftfloat and how to interpret its output, see -file -TestFloat-general.html. -

- -

-Note that, even if there are no bugs in the source code for SoftFloat (not -guaranteed), a build of SoftFloat might still fail due to an issue with the -build process, such as an incompatible compiler option or a compiler bug. -

- -

-The testsoftfloat program will ordinarily test a function for all -five rounding modes defined by the IEEE Floating-Point Standard, one after the -other, plus possibly a sixth mode, round to odd (depending on the -options selected when testsoftfloat was compiled). -If an operation is not supposed to require rounding, it will by default be -tested only with the rounding mode set to near_even -(nearest/even). -In the same way, if an operation is affected by the way in which underflow -tininess is detected, testsoftfloat tests the function with -tininess detected both before rounding and after rounding. -For 80-bit double-extended-precision operations affected by -rounding precision control, testsoftfloat also tests the function -for all three rounding precision modes, one after the other. -Testing can be limited to a single rounding mode, a single tininess mode, -and/or a single rounding precision with appropriate command-line options. -

- - -

Command Syntax

- -

-The testsoftfloat program is executed as a command with this -syntax: -

-
-testsoftfloat [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of either a testable function -or a function set. -The available options and function sets are documented below. -If testsoftfloat is executed without any arguments, a summary of -usage is written. -

- - -

Options

- -

-The testsoftfloat program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-seed <num>

- -

-The -seed option sets the seed for the pseudo-random number -generator used for generating test cases. -The argument to -seed is a nonnegative integer. -Executing the same testsoftfloat program with the same arguments -(including the same pseudo-random number seed) should always perform the same -sequence of tests, whereas changing the pseudo-random number seed should result -in a different sequence of tests. -The default seed number is 1. -

- -

-level <num>

- -

-The -level option sets the level of testing. -The argument to -level can be either 1 or 2. -The default is level 1. -Level 2 performs many more tests than level 1 and thus can reveal -bugs not found by level 1. -

- -

-errors <num>

- -

-The -errors option instructs testsoftfloat to report -no more than the specified number of errors for any combination of function, -rounding mode, etc. -The argument to -errors must be a nonnegative decimal integer. -Once the specified number of error reports has been generated, -testsoftfloat ends the current test and begins the next one, if -any. -The default is -errors 20. -

- -

-Against intuition, -errors 0 causes -testsoftfloat to report every error it finds. -

- -

-errorstop

- -

-The -errorstop option causes the program to exit after the first -function for which any errors are reported. -

- -

-forever

- -

-The -forever option causes a single function to be repeatedly -tested. -Only one rounding mode and/or rounding precision can be tested in a single -execution. -If not specified, the rounding mode defaults to nearest/even. -For 80-bit double-extended-precision functions, the rounding -precision defaults to full double-extended precision. -The testing level is set to 2 by this option. -

- -

-precision32, -precision64, -precision80

- -

-For 80-bit double-extended-precision funcions affected by -rounding precision control, the -precision32 option restricts -testing to only the cases in which the rounding precision is -32 bits, equivalent to 32-bit single-precision. -The other rounding precision choices are not tested. -Likewise, -precision64 fixes the rounding precision to -64 bits, equivalent to 64-bit double-precision; -and -precision80 fixes the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-The -rnear_even option restricts testing to only the cases in -which the rounding mode is nearest/even. -The other rounding mode choices are not tested. -Likewise, -rnear_maxMag forces rounding to nearest/maximum -magnitude (nearest-away), -rminMag forces rounding to minimum -magnitude (toward zero), -rmin forces rounding to minimum (down, -toward negative infinity), -rmax forces rounding to maximum (up, -toward positive infinity), and -rodd, if supported, forces -rounding to odd. -These options are ignored for operations that are exact and thus do not round. -

- -

-tininessbefore, -tininessafter

- -

-The -tininessbefore option restricts testing to only the cases in -which tininess on underflow is detected before rounding. -Likewise, -tininessafter restricts testing to only the cases in -which tininess on underflow is detected after rounding. -

- -

-notexact, -exact

- -

-For functions that round to an integer (conversions to integer types and the -roundToInt functions), the -notexact option restricts -testing to only the cases for which the exact operand -(specifying whether the inexact exception flag may be raised) is -false. -Likewise, the -exact option restricts testing to only the cases -for which the exact operand is true. -

- - -

Function Sets

- -

-Just as testsoftfloat can test a function for all five or six -rounding modes in sequence, multiple functions can be tested with a single -execution of testsoftfloat. -Two sets are recognized: -all1 and -all2. -The set -all1 is all one-operand operations, while --all2 is all two-operand operations. -A function set is used in place of a function name in the -testsoftfloat command line, such as -

-
-testsoftfloat [<option>...] -all1
-
-
-

- -

-For the purpose of deciding the number of operands of an operation, any -roundingMode and exact arguments are -ignored. -(Such arguments specify the rounding mode and whether the inexact -exception flag may be raised, respectively.) -Thus, functions that convert to integer type and the roundToInt -functions are included in the set of one-operand operations tested by --all1. -

- - - - diff --git a/addins/TestFloat-3e/doc/timesoftfloat.html b/addins/TestFloat-3e/doc/timesoftfloat.html deleted file mode 100644 index bb7264784..000000000 --- a/addins/TestFloat-3e/doc/timesoftfloat.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - -timesoftfloat - - - - -

Berkeley TestFloat Release 3e: timesoftfloat

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The timesoftfloat program provides a simple way to evaluate the -speed of the floating-point operations of the Berkeley SoftFloat library. -Program timesoftfloat is included with the Berkeley TestFloat -package, a small collection of programs for testing that an implementation of -floating-point conforms to the IEEE Standard for Binary Floating-Point -Arithmetic. -Although timesoftfloat does not test floating-point correctness -like the other TestFloat programs, nevertheless timesoftfloat is a -partner to TestFloat’s testsoftfloat program. -For more about TestFloat generally and testsoftfloat specifically, -see file -TestFloat-general.html. -

- -

-Ordinarily, timesoftfloat will measure a function’s speed -separately for each of the five rounding modes defined by the IEEE -Floating-Point Standard, one after the other, plus possibly a sixth mode, -round to odd (depending on the options selected when -timesoftfloat was compiled). -If an operation is not supposed to require rounding, it will by default be -timed only with the rounding mode set to near_even (nearest/even). -In the same way, if an operation is affected by the way in which underflow -tininess is detected, timesoftfloat times the function with -tininess detected both before rounding and after rounding. -For 80-bit double-extended-precision operations affected by -rounding precision control, timesoftfloat also times the function -for each of the three rounding precision modes, one after the other. -Evaluation of a function can be limited to a single rounding mode, a single -tininess mode, and/or a single rounding precision with appropriate command-line -options. -

- -

-For each function and mode evaluated, timesoftfloat reports the -measured speed of the function in Mop/s, or “millions of operations per -second”. -The speeds reported by timesoftfloat may be affected somewhat by -other software executing at the same time as timesoftfloat. -Be aware also that the exact execution time of any SoftFloat function depends -partly on the values of arguments and the state of the processor’s caches -at the time the function is called. -Your actual experience with SoftFloat may differ from the speeds reported by -timesoftfloat for all these reasons. -

- -

-Note that the remainder operations for larger formats (f64_rem, -extF80_rem, and f128_rem) can be markedly slower than -other operations, particularly for double-extended-precision -(extF80_rem) and quadruple precision (f128_rem). -This is inherent to the remainder operation itself and is not a failing of the -SoftFloat implementation. -

- - -

Command Syntax

- -

-The timesoftfloat program is executed as a command with this -syntax: -

-
-timesoftfloat [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of either a testable function -or a function set. -The available options and function sets are documented below. -If timesoftfloat is executed without any arguments, a summary of -usage is written. -

- - -

Options

- -

-The timesoftfloat program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-precision32, -precision64, -precision80

- -

-For 80-bit double-extended-precision funcions affected by -rounding precision control, the -precision32 option restricts -timing of an operation to only the cases in which the rounding precision is -32 bits, equivalent to 32-bit single-precision. -Other rounding precision choices are not timed. -Likewise, -precision64 fixes the rounding precision to -64 bits, equivalent to 64-bit double-precision; -and -precision80 fixes the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-The -rnear_even option restricts timing of an operation to only -the cases in which the rounding mode is nearest/even. -Other rounding mode choices are not timed. -Likewise, -rnear_maxMag forces rounding to nearest/maximum -magnitude (nearest-away), -rminMag forces rounding to minimum -magnitude (toward zero), -rmin forces rounding to minimum (down, -toward negative infinity), -rmax forces rounding to maximum (up, -toward positive infinity), and -rodd, if supported, forces -rounding to odd. -These options are ignored for operations that are exact and thus do not round. -

- -

-tininessbefore, -tininessafter

- -

-The -tininessbefore option restricts timing of an operation to -only the cases in which tininess on underflow is detected before rounding. -Likewise, -tininessafter restricts measurement to only the cases -in which tininess on underflow is detected after rounding. -

- -

-notexact, -exact

- -

-For functions that round to an integer (conversions to integer types and the -roundToInt functions), the -notexact option restricts -timing of an operation to only the cases for which the -exact operand (specifying whether the inexact -exception flag may be raised) is false. -Likewise, the -exact option restricts measurement to only the -cases for which the exact operand is true. -

- - -

Function Sets

- -

-Just as timesoftfloat can time a function for all five or six -rounding modes in sequence, multiple functions can be timed with a single -execution of timesoftfloat. -Three sets are recognized: --all1, -all2, and -all. -The set -all1 is all one-operand operations, -all2 is -all two-operand operations, and -all is obviously all operations. -A function set is used in place of a function name in the -timesoftfloat command line, such as -

-
-timesoftfloat [<option>...] -all1
-
-
-

- -

-For the purpose of deciding the number of operands of an operation, any -roundingMode and exact arguments are -ignored. -(Such arguments specify the rounding mode and whether the inexact -exception flag may be raised, respectively.) -Thus, functions that convert to integer type and the roundToInt -functions are included in the set of one-operand operations timed by --all1. -

- - - - diff --git a/addins/TestFloat-3e/source/fail.c b/addins/TestFloat-3e/source/fail.c deleted file mode 100644 index dae6c6422..000000000 --- a/addins/TestFloat-3e/source/fail.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include -#include "platform.h" -#include "fail.h" - -char *fail_programName = ""; - -void fail( const char *messagePtr, ... ) -{ - va_list varArgs; - - fflush( 0 ); - fprintf( stderr, "%s: ", fail_programName ); - va_start( varArgs, messagePtr ); - vfprintf( stderr, messagePtr, varArgs ); - va_end( varArgs ); - fputs( ".\n", stderr ); - exit( EXIT_FAILURE ); - -} - diff --git a/addins/TestFloat-3e/source/fail.h b/addins/TestFloat-3e/source/fail.h deleted file mode 100644 index 0f1f48f78..000000000 --- a/addins/TestFloat-3e/source/fail.h +++ /dev/null @@ -1,41 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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. - -=============================================================================*/ - -extern char *fail_programName; - -void fail( const char *, ... ); - diff --git a/addins/TestFloat-3e/source/functionInfos.c b/addins/TestFloat-3e/source/functionInfos.c deleted file mode 100644 index e4d25e3fd..000000000 --- a/addins/TestFloat-3e/source/functionInfos.c +++ /dev/null @@ -1,290 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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 -#include "platform.h" -#include "functions.h" - -#define ARG_1 FUNC_ARG_UNARY -#define ARG_2 FUNC_ARG_BINARY -#define ARG_R FUNC_ARG_ROUNDINGMODE -#define ARG_E FUNC_ARG_EXACT -#define EFF_P FUNC_EFF_ROUNDINGPRECISION -#define EFF_R FUNC_EFF_ROUNDINGMODE -#define EFF_T FUNC_EFF_TININESSMODE -#define EFF_T_REDP FUNC_EFF_TININESSMODE_REDUCEDPREC - -/*---------------------------------------------------------------------------- -| Warning: This array must match the list of macros defined in "functions.h". -*----------------------------------------------------------------------------*/ -const struct functionInfo functionInfos[NUM_FUNCTIONS] = { - { 0, 0 }, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "ui32_to_f16", ARG_1 | EFF_R }, -#endif - { "ui32_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "ui32_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "ui32_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "ui32_to_f128", ARG_1 }, -#endif -#ifdef FLOAT16 - { "ui64_to_f16", ARG_1 | EFF_R }, -#endif - { "ui64_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "ui64_to_f64", ARG_1 | EFF_R }, -#endif -#ifdef EXTFLOAT80 - { "ui64_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "ui64_to_f128", ARG_1 }, -#endif -#ifdef FLOAT16 - { "i32_to_f16", ARG_1 | EFF_R }, -#endif - { "i32_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "i32_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "i32_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "i32_to_f128", ARG_1 }, -#endif -#ifdef FLOAT16 - { "i64_to_f16", ARG_1 | EFF_R }, -#endif - { "i64_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "i64_to_f64", ARG_1 | EFF_R }, -#endif -#ifdef EXTFLOAT80 - { "i64_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "i64_to_f128", ARG_1 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "f16_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f16_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f16_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f16_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f16_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f16_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f16_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f16_to_i64_r_minMag", ARG_1 | ARG_E }, - { "f16_to_f32", ARG_1 }, -#ifdef FLOAT64 - { "f16_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "f16_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "f16_to_f128", ARG_1 }, -#endif - { "f16_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f16_add", ARG_2 | EFF_R }, - { "f16_sub", ARG_2 | EFF_R }, - { "f16_mul", ARG_2 | EFF_R | EFF_T }, - { "f16_mulAdd", EFF_R | EFF_T }, - { "f16_div", ARG_2 | EFF_R }, - { "f16_rem", ARG_2 }, - { "f16_sqrt", ARG_1 | EFF_R }, - { "f16_eq", ARG_2 }, - { "f16_le", ARG_2 }, - { "f16_lt", ARG_2 }, - { "f16_eq_signaling", ARG_2 }, - { "f16_le_quiet", ARG_2 }, - { "f16_lt_quiet", ARG_2 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - { "f32_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f32_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f32_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f32_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f32_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f32_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f32_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f32_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "f32_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif -#ifdef FLOAT64 - { "f32_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "f32_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "f32_to_f128", ARG_1 }, -#endif - { "f32_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f32_add", ARG_2 | EFF_R }, - { "f32_sub", ARG_2 | EFF_R }, - { "f32_mul", ARG_2 | EFF_R | EFF_T }, - { "f32_mulAdd", EFF_R | EFF_T }, - { "f32_div", ARG_2 | EFF_R }, - { "f32_rem", ARG_2 }, - { "f32_sqrt", ARG_1 | EFF_R }, - { "f32_eq", ARG_2 }, - { "f32_le", ARG_2 }, - { "f32_lt", ARG_2 }, - { "f32_eq_signaling", ARG_2 }, - { "f32_le_quiet", ARG_2 }, - { "f32_lt_quiet", ARG_2 }, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 - { "f64_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f64_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f64_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f64_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f64_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f64_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f64_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f64_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "f64_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif - { "f64_to_f32", ARG_1 | EFF_R | EFF_T }, -#ifdef EXTFLOAT80 - { "f64_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "f64_to_f128", ARG_1 }, -#endif - { "f64_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f64_add", ARG_2 | EFF_R }, - { "f64_sub", ARG_2 | EFF_R }, - { "f64_mul", ARG_2 | EFF_R | EFF_T }, - { "f64_mulAdd", EFF_R | EFF_T }, - { "f64_div", ARG_2 | EFF_R }, - { "f64_rem", ARG_2 }, - { "f64_sqrt", ARG_1 | EFF_R }, - { "f64_eq", ARG_2 }, - { "f64_le", ARG_2 }, - { "f64_lt", ARG_2 }, - { "f64_eq_signaling", ARG_2 }, - { "f64_le_quiet", ARG_2 }, - { "f64_lt_quiet", ARG_2 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - { "extF80_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_i32", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_i64", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "extF80_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "extF80_to_i32_r_minMag", ARG_1 | ARG_E }, - { "extF80_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "extF80_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif - { "extF80_to_f32", ARG_1 | EFF_R | EFF_T }, -#ifdef FLOAT64 - { "extF80_to_f64", ARG_1 | EFF_R | EFF_T }, -#endif -#ifdef FLOAT128 - { "extF80_to_f128", ARG_1 }, -#endif - { "extF80_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "extF80_add", ARG_2 | EFF_P | EFF_R | EFF_T_REDP }, - { "extF80_sub", ARG_2 | EFF_P | EFF_R | EFF_T_REDP }, - { "extF80_mul", ARG_2 | EFF_P | EFF_R | EFF_T | EFF_T_REDP }, - { "extF80_div", ARG_2 | EFF_P | EFF_R | EFF_T_REDP }, - { "extF80_rem", ARG_2 }, - { "extF80_sqrt", ARG_1 | EFF_P | EFF_R }, - { "extF80_eq", ARG_2 }, - { "extF80_le", ARG_2 }, - { "extF80_lt", ARG_2 }, - { "extF80_eq_signaling", ARG_2 }, - { "extF80_le_quiet", ARG_2 }, - { "extF80_lt_quiet", ARG_2 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 - { "f128_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f128_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f128_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f128_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f128_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f128_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f128_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f128_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "f128_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif - { "f128_to_f32", ARG_1 | EFF_R | EFF_T }, -#ifdef FLOAT64 - { "f128_to_f64", ARG_1 | EFF_R | EFF_T }, -#endif -#ifdef EXTFLOAT80 - { "f128_to_extF80", ARG_1 | EFF_R | EFF_T }, -#endif - { "f128_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f128_add", ARG_2 | EFF_R }, - { "f128_sub", ARG_2 | EFF_R }, - { "f128_mul", ARG_2 | EFF_R | EFF_T }, - { "f128_mulAdd", EFF_R | EFF_T }, - { "f128_div", ARG_2 | EFF_R }, - { "f128_rem", ARG_2 }, - { "f128_sqrt", ARG_1 | EFF_R }, - { "f128_eq", ARG_2 }, - { "f128_le", ARG_2 }, - { "f128_lt", ARG_2 }, - { "f128_eq_signaling", ARG_2 }, - { "f128_le_quiet", ARG_2 }, - { "f128_lt_quiet", ARG_2 }, -#endif -}; - diff --git a/addins/TestFloat-3e/source/functions.h b/addins/TestFloat-3e/source/functions.h deleted file mode 100644 index 85eaaf8be..000000000 --- a/addins/TestFloat-3e/source/functions.h +++ /dev/null @@ -1,324 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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 - -/*---------------------------------------------------------------------------- -| Warning: This list must match the contents of "functionInfos.c". -*----------------------------------------------------------------------------*/ -enum { - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - UI32_TO_F16 = 1, - UI32_TO_F32, -#else - UI32_TO_F32 = 1, -#endif -#ifdef FLOAT64 - UI32_TO_F64, -#endif -#ifdef EXTFLOAT80 - UI32_TO_EXTF80, -#endif -#ifdef FLOAT128 - UI32_TO_F128, -#endif -#ifdef FLOAT16 - UI64_TO_F16, -#endif - UI64_TO_F32, -#ifdef FLOAT64 - UI64_TO_F64, -#endif -#ifdef EXTFLOAT80 - UI64_TO_EXTF80, -#endif -#ifdef FLOAT128 - UI64_TO_F128, -#endif -#ifdef FLOAT16 - I32_TO_F16, -#endif - I32_TO_F32, -#ifdef FLOAT64 - I32_TO_F64, -#endif -#ifdef EXTFLOAT80 - I32_TO_EXTF80, -#endif -#ifdef FLOAT128 - I32_TO_F128, -#endif -#ifdef FLOAT16 - I64_TO_F16, -#endif - I64_TO_F32, -#ifdef FLOAT64 - I64_TO_F64, -#endif -#ifdef EXTFLOAT80 - I64_TO_EXTF80, -#endif -#ifdef FLOAT128 - I64_TO_F128, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - F16_TO_UI32, - F16_TO_UI64, - F16_TO_I32, - F16_TO_I64, - F16_TO_UI32_R_MINMAG, - F16_TO_UI64_R_MINMAG, - F16_TO_I32_R_MINMAG, - F16_TO_I64_R_MINMAG, - F16_TO_F32, -#ifdef FLOAT64 - F16_TO_F64, -#endif -#ifdef EXTFLOAT80 - F16_TO_EXTF80, -#endif -#ifdef FLOAT128 - F16_TO_F128, -#endif - F16_ROUNDTOINT, - F16_ADD, - F16_SUB, - F16_MUL, - F16_MULADD, - F16_DIV, - F16_REM, - F16_SQRT, - F16_EQ, - F16_LE, - F16_LT, - F16_EQ_SIGNALING, - F16_LE_QUIET, - F16_LT_QUIET, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - F32_TO_UI32, - F32_TO_UI64, - F32_TO_I32, - F32_TO_I64, - F32_TO_UI32_R_MINMAG, - F32_TO_UI64_R_MINMAG, - F32_TO_I32_R_MINMAG, - F32_TO_I64_R_MINMAG, -#ifdef FLOAT16 - F32_TO_F16, -#endif -#ifdef FLOAT64 - F32_TO_F64, -#endif -#ifdef EXTFLOAT80 - F32_TO_EXTF80, -#endif -#ifdef FLOAT128 - F32_TO_F128, -#endif - F32_ROUNDTOINT, - F32_ADD, - F32_SUB, - F32_MUL, - F32_MULADD, - F32_DIV, - F32_REM, - F32_SQRT, - F32_EQ, - F32_LE, - F32_LT, - F32_EQ_SIGNALING, - F32_LE_QUIET, - F32_LT_QUIET, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 - F64_TO_UI32, - F64_TO_UI64, - F64_TO_I32, - F64_TO_I64, - F64_TO_UI32_R_MINMAG, - F64_TO_UI64_R_MINMAG, - F64_TO_I32_R_MINMAG, - F64_TO_I64_R_MINMAG, -#ifdef FLOAT16 - F64_TO_F16, -#endif - F64_TO_F32, -#ifdef EXTFLOAT80 - F64_TO_EXTF80, -#endif -#ifdef FLOAT128 - F64_TO_F128, -#endif - F64_ROUNDTOINT, - F64_ADD, - F64_SUB, - F64_MUL, - F64_MULADD, - F64_DIV, - F64_REM, - F64_SQRT, - F64_EQ, - F64_LE, - F64_LT, - F64_EQ_SIGNALING, - F64_LE_QUIET, - F64_LT_QUIET, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - EXTF80_TO_UI32, - EXTF80_TO_UI64, - EXTF80_TO_I32, - EXTF80_TO_I64, - EXTF80_TO_UI32_R_MINMAG, - EXTF80_TO_UI64_R_MINMAG, - EXTF80_TO_I32_R_MINMAG, - EXTF80_TO_I64_R_MINMAG, -#ifdef FLOAT16 - EXTF80_TO_F16, -#endif - EXTF80_TO_F32, -#ifdef FLOAT64 - EXTF80_TO_F64, -#endif -#ifdef FLOAT128 - EXTF80_TO_F128, -#endif - EXTF80_ROUNDTOINT, - EXTF80_ADD, - EXTF80_SUB, - EXTF80_MUL, - EXTF80_DIV, - EXTF80_REM, - EXTF80_SQRT, - EXTF80_EQ, - EXTF80_LE, - EXTF80_LT, - EXTF80_EQ_SIGNALING, - EXTF80_LE_QUIET, - EXTF80_LT_QUIET, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 - F128_TO_UI32, - F128_TO_UI64, - F128_TO_I32, - F128_TO_I64, - F128_TO_UI32_R_MINMAG, - F128_TO_UI64_R_MINMAG, - F128_TO_I32_R_MINMAG, - F128_TO_I64_R_MINMAG, -#ifdef FLOAT16 - F128_TO_F16, -#endif - F128_TO_F32, -#ifdef FLOAT64 - F128_TO_F64, -#endif -#ifdef EXTFLOAT80 - F128_TO_EXTF80, -#endif - F128_ROUNDTOINT, - F128_ADD, - F128_SUB, - F128_MUL, - F128_MULADD, - F128_DIV, - F128_REM, - F128_SQRT, - F128_EQ, - F128_LE, - F128_LT, - F128_EQ_SIGNALING, - F128_LE_QUIET, - F128_LT_QUIET, -#endif - NUM_FUNCTIONS -}; - -enum { - ROUND_NEAR_EVEN = 1, - ROUND_MINMAG, - ROUND_MIN, - ROUND_MAX, - ROUND_NEAR_MAXMAG, -#ifdef FLOAT_ROUND_ODD - ROUND_ODD, -#endif - NUM_ROUNDINGMODES -}; -enum { - TININESS_BEFORE_ROUNDING = 1, - TININESS_AFTER_ROUNDING, - NUM_TININESSMODES -}; - -extern const uint_fast8_t roundingModes[NUM_ROUNDINGMODES]; -extern const uint_fast8_t tininessModes[NUM_TININESSMODES]; - -enum { - FUNC_ARG_UNARY = 0x01, - FUNC_ARG_BINARY = 0x02, - FUNC_ARG_ROUNDINGMODE = 0x04, - FUNC_ARG_EXACT = 0x08, - FUNC_EFF_ROUNDINGPRECISION = 0x10, - FUNC_EFF_ROUNDINGMODE = 0x20, - FUNC_EFF_TININESSMODE = 0x40, - FUNC_EFF_TININESSMODE_REDUCEDPREC = 0x80 -}; -struct functionInfo { - const char *namePtr; - unsigned char attribs; -}; -extern const struct functionInfo functionInfos[NUM_FUNCTIONS]; - -struct standardFunctionInfo { - const char *namePtr; - unsigned char functionCode; - char roundingCode, exact; -}; -extern const struct standardFunctionInfo standardFunctionInfos[]; - diff --git a/addins/TestFloat-3e/source/functions_common.c b/addins/TestFloat-3e/source/functions_common.c deleted file mode 100644 index 16cf3c72f..000000000 --- a/addins/TestFloat-3e/source/functions_common.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "functions.h" - -const uint_fast8_t roundingModes[NUM_ROUNDINGMODES] = { - 0, - softfloat_round_near_even, - softfloat_round_minMag, - softfloat_round_min, - softfloat_round_max, - softfloat_round_near_maxMag, -#ifdef FLOAT_ROUND_ODD - softfloat_round_odd -#endif -}; - -const uint_fast8_t tininessModes[NUM_TININESSMODES] = { - 0, - softfloat_tininess_beforeRounding, - softfloat_tininess_afterRounding -}; - diff --git a/addins/TestFloat-3e/source/genCases.h b/addins/TestFloat-3e/source/genCases.h deleted file mode 100644 index efea7dd1a..000000000 --- a/addins/TestFloat-3e/source/genCases.h +++ /dev/null @@ -1,114 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include -#include "softfloat.h" - -extern int genCases_level; - -void genCases_setLevel( int ); - -extern uint_fast64_t genCases_total; -extern bool genCases_done; - -void genCases_ui32_a_init( void ); -void genCases_ui32_a_next( void ); -extern uint32_t genCases_ui32_a; - -void genCases_ui64_a_init( void ); -void genCases_ui64_a_next( void ); -extern uint64_t genCases_ui64_a; - -void genCases_i32_a_init( void ); -void genCases_i32_a_next( void ); -extern int32_t genCases_i32_a; - -void genCases_i64_a_init( void ); -void genCases_i64_a_next( void ); -extern int64_t genCases_i64_a; - -#ifdef FLOAT16 -void genCases_f16_a_init( void ); -void genCases_f16_a_next( void ); -void genCases_f16_ab_init( void ); -void genCases_f16_ab_next( void ); -void genCases_f16_abc_init( void ); -void genCases_f16_abc_next( void ); -extern float16_t genCases_f16_a, genCases_f16_b, genCases_f16_c; -#endif - -void genCases_f32_a_init( void ); -void genCases_f32_a_next( void ); -void genCases_f32_ab_init( void ); -void genCases_f32_ab_next( void ); -void genCases_f32_abc_init( void ); -void genCases_f32_abc_next( void ); -extern float32_t genCases_f32_a, genCases_f32_b, genCases_f32_c; - -#ifdef FLOAT64 -void genCases_f64_a_init( void ); -void genCases_f64_a_next( void ); -void genCases_f64_ab_init( void ); -void genCases_f64_ab_next( void ); -void genCases_f64_abc_init( void ); -void genCases_f64_abc_next( void ); -extern float64_t genCases_f64_a, genCases_f64_b, genCases_f64_c; -#endif - -#ifdef EXTFLOAT80 -void genCases_extF80_a_init( void ); -void genCases_extF80_a_next( void ); -void genCases_extF80_ab_init( void ); -void genCases_extF80_ab_next( void ); -void genCases_extF80_abc_init( void ); -void genCases_extF80_abc_next( void ); -extern extFloat80_t genCases_extF80_a, genCases_extF80_b, genCases_extF80_c; -#endif - -#ifdef FLOAT128 -void genCases_f128_a_init( void ); -void genCases_f128_a_next( void ); -void genCases_f128_ab_init( void ); -void genCases_f128_ab_next( void ); -void genCases_f128_abc_init( void ); -void genCases_f128_abc_next( void ); -extern float128_t genCases_f128_a, genCases_f128_b, genCases_f128_c; -#endif - -void genCases_writeTestsTotal( bool ); - diff --git a/addins/TestFloat-3e/source/genCases_common.c b/addins/TestFloat-3e/source/genCases_common.c deleted file mode 100644 index 25e733e45..000000000 --- a/addins/TestFloat-3e/source/genCases_common.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "fail.h" -#include "genCases.h" - -int genCases_level = 0; - -void genCases_setLevel( int newLevel ) -{ - - if ( (newLevel < 1) || (2 < newLevel) ) { - fail( "Invalid testing level %d", newLevel ); - } - genCases_level = newLevel; - -} - -uint_fast64_t genCases_total; -bool genCases_done; - diff --git a/addins/TestFloat-3e/source/genCases_extF80.c b/addins/TestFloat-3e/source/genCases_extF80.c deleted file mode 100644 index 97e455777..000000000 --- a/addins/TestFloat-3e/source/genCases_extF80.c +++ /dev/null @@ -1,920 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef EXTFLOAT80 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -enum { - extF80NumQIn = 22, - extF80NumQOut = 76, - extF80NumP1 = 4, - extF80NumP2 = 248 -}; -static const uint16_t extF80QIn[extF80NumQIn] = { - 0x0000, /* positive, subnormal */ - 0x0001, /* positive, -16382 */ - 0x3FBF, /* positive, -64 */ - 0x3FFD, /* positive, -2 */ - 0x3FFE, /* positive, -1 */ - 0x3FFF, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4001, /* positive, 2 */ - 0x403F, /* positive, 64 */ - 0x7FFE, /* positive, 16383 */ - 0x7FFF, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8001, /* negative, -16382 */ - 0xBFBF, /* negative, -64 */ - 0xBFFD, /* negative, -2 */ - 0xBFFE, /* negative, -1 */ - 0xBFFF, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC001, /* negative, 2 */ - 0xC03F, /* negative, 64 */ - 0xFFFE, /* negative, 16383 */ - 0xFFFF /* negative, infinity or NaN */ -}; -static const uint16_t extF80QOut[extF80NumQOut] = { - 0x0000, /* positive, subnormal */ - 0x0001, /* positive, -16382 */ - 0x0002, /* positive, -16381 */ - 0x3BFE, /* positive, -1025 */ - 0x3BFF, /* positive, -1024 */ - 0x3C00, /* positive, -1023 */ - 0x3C01, /* positive, -1022 */ - 0x3F7E, /* positive, -129 */ - 0x3F7F, /* positive, -128 */ - 0x3F80, /* positive, -127 */ - 0x3F81, /* positive, -126 */ - 0x3FBF, /* positive, -64 */ - 0x3FFB, /* positive, -4 */ - 0x3FFC, /* positive, -3 */ - 0x3FFD, /* positive, -2 */ - 0x3FFE, /* positive, -1 */ - 0x3FFF, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4001, /* positive, 2 */ - 0x4002, /* positive, 3 */ - 0x4003, /* positive, 4 */ - 0x401C, /* positive, 29 */ - 0x401D, /* positive, 30 */ - 0x401E, /* positive, 31 */ - 0x401F, /* positive, 32 */ - 0x403C, /* positive, 61 */ - 0x403D, /* positive, 62 */ - 0x403E, /* positive, 63 */ - 0x403F, /* positive, 64 */ - 0x407E, /* positive, 127 */ - 0x407F, /* positive, 128 */ - 0x4080, /* positive, 129 */ - 0x43FE, /* positive, 1023 */ - 0x43FF, /* positive, 1024 */ - 0x4400, /* positive, 1025 */ - 0x7FFD, /* positive, 16382 */ - 0x7FFE, /* positive, 16383 */ - 0x7FFF, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8001, /* negative, -16382 */ - 0x8002, /* negative, -16381 */ - 0xBBFE, /* negative, -1025 */ - 0xBBFF, /* negative, -1024 */ - 0xBC00, /* negative, -1023 */ - 0xBC01, /* negative, -1022 */ - 0xBF7E, /* negative, -129 */ - 0xBF7F, /* negative, -128 */ - 0xBF80, /* negative, -127 */ - 0xBF81, /* negative, -126 */ - 0xBFBF, /* negative, -64 */ - 0xBFFB, /* negative, -4 */ - 0xBFFC, /* negative, -3 */ - 0xBFFD, /* negative, -2 */ - 0xBFFE, /* negative, -1 */ - 0xBFFF, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC001, /* negative, 2 */ - 0xC002, /* negative, 3 */ - 0xC003, /* negative, 4 */ - 0xC01C, /* negative, 29 */ - 0xC01D, /* negative, 30 */ - 0xC01E, /* negative, 31 */ - 0xC01F, /* negative, 32 */ - 0xC03C, /* negative, 61 */ - 0xC03D, /* negative, 62 */ - 0xC03E, /* negative, 63 */ - 0xC03F, /* negative, 64 */ - 0xC07E, /* negative, 127 */ - 0xC07F, /* negative, 128 */ - 0xC080, /* negative, 129 */ - 0xC3FE, /* negative, 1023 */ - 0xC3FF, /* negative, 1024 */ - 0xC400, /* negative, 1025 */ - 0xFFFD, /* negative, 16382 */ - 0xFFFE, /* negative, 16383 */ - 0xFFFF /* negative, infinity or NaN */ -}; -static const uint64_t extF80P1[extF80NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFE ) -}; -static const uint64_t extF80P2[extF80NumP2] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x0010000000000000 ), - UINT64_C( 0x0020000000000000 ), - UINT64_C( 0x0040000000000000 ), - UINT64_C( 0x0080000000000000 ), - UINT64_C( 0x0100000000000000 ), - UINT64_C( 0x0200000000000000 ), - UINT64_C( 0x0400000000000000 ), - UINT64_C( 0x0800000000000000 ), - UINT64_C( 0x1000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x4000000000000000 ), - UINT64_C( 0x6000000000000000 ), - UINT64_C( 0x7000000000000000 ), - UINT64_C( 0x7800000000000000 ), - UINT64_C( 0x7C00000000000000 ), - UINT64_C( 0x7E00000000000000 ), - UINT64_C( 0x7F00000000000000 ), - UINT64_C( 0x7F80000000000000 ), - UINT64_C( 0x7FC0000000000000 ), - UINT64_C( 0x7FE0000000000000 ), - UINT64_C( 0x7FF0000000000000 ), - UINT64_C( 0x7FF8000000000000 ), - UINT64_C( 0x7FFC000000000000 ), - UINT64_C( 0x7FFE000000000000 ), - UINT64_C( 0x7FFF000000000000 ), - UINT64_C( 0x7FFF800000000000 ), - UINT64_C( 0x7FFFC00000000000 ), - UINT64_C( 0x7FFFE00000000000 ), - UINT64_C( 0x7FFFF00000000000 ), - UINT64_C( 0x7FFFF80000000000 ), - UINT64_C( 0x7FFFFC0000000000 ), - UINT64_C( 0x7FFFFE0000000000 ), - UINT64_C( 0x7FFFFF0000000000 ), - UINT64_C( 0x7FFFFF8000000000 ), - UINT64_C( 0x7FFFFFC000000000 ), - UINT64_C( 0x7FFFFFE000000000 ), - UINT64_C( 0x7FFFFFF000000000 ), - UINT64_C( 0x7FFFFFF800000000 ), - UINT64_C( 0x7FFFFFFC00000000 ), - UINT64_C( 0x7FFFFFFE00000000 ), - UINT64_C( 0x7FFFFFFF00000000 ), - UINT64_C( 0x7FFFFFFF80000000 ), - UINT64_C( 0x7FFFFFFFC0000000 ), - UINT64_C( 0x7FFFFFFFE0000000 ), - UINT64_C( 0x7FFFFFFFF0000000 ), - UINT64_C( 0x7FFFFFFFF8000000 ), - UINT64_C( 0x7FFFFFFFFC000000 ), - UINT64_C( 0x7FFFFFFFFE000000 ), - UINT64_C( 0x7FFFFFFFFF000000 ), - UINT64_C( 0x7FFFFFFFFF800000 ), - UINT64_C( 0x7FFFFFFFFFC00000 ), - UINT64_C( 0x7FFFFFFFFFE00000 ), - UINT64_C( 0x7FFFFFFFFFF00000 ), - UINT64_C( 0x7FFFFFFFFFF80000 ), - UINT64_C( 0x7FFFFFFFFFFC0000 ), - UINT64_C( 0x7FFFFFFFFFFE0000 ), - UINT64_C( 0x7FFFFFFFFFFF0000 ), - UINT64_C( 0x7FFFFFFFFFFF8000 ), - UINT64_C( 0x7FFFFFFFFFFFC000 ), - UINT64_C( 0x7FFFFFFFFFFFE000 ), - UINT64_C( 0x7FFFFFFFFFFFF000 ), - UINT64_C( 0x7FFFFFFFFFFFF800 ), - UINT64_C( 0x7FFFFFFFFFFFFC00 ), - UINT64_C( 0x7FFFFFFFFFFFFE00 ), - UINT64_C( 0x7FFFFFFFFFFFFF00 ), - UINT64_C( 0x7FFFFFFFFFFFFF80 ), - UINT64_C( 0x7FFFFFFFFFFFFFC0 ), - UINT64_C( 0x7FFFFFFFFFFFFFE0 ), - UINT64_C( 0x7FFFFFFFFFFFFFF0 ), - UINT64_C( 0x7FFFFFFFFFFFFFF8 ), - UINT64_C( 0x7FFFFFFFFFFFFFFC ), - UINT64_C( 0x7FFFFFFFFFFFFFFE ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFD ), - UINT64_C( 0x7FFFFFFFFFFFFFFB ), - UINT64_C( 0x7FFFFFFFFFFFFFF7 ), - UINT64_C( 0x7FFFFFFFFFFFFFEF ), - UINT64_C( 0x7FFFFFFFFFFFFFDF ), - UINT64_C( 0x7FFFFFFFFFFFFFBF ), - UINT64_C( 0x7FFFFFFFFFFFFF7F ), - UINT64_C( 0x7FFFFFFFFFFFFEFF ), - UINT64_C( 0x7FFFFFFFFFFFFDFF ), - UINT64_C( 0x7FFFFFFFFFFFFBFF ), - UINT64_C( 0x7FFFFFFFFFFFF7FF ), - UINT64_C( 0x7FFFFFFFFFFFEFFF ), - UINT64_C( 0x7FFFFFFFFFFFDFFF ), - UINT64_C( 0x7FFFFFFFFFFFBFFF ), - UINT64_C( 0x7FFFFFFFFFFF7FFF ), - UINT64_C( 0x7FFFFFFFFFFEFFFF ), - UINT64_C( 0x7FFFFFFFFFFDFFFF ), - UINT64_C( 0x7FFFFFFFFFFBFFFF ), - UINT64_C( 0x7FFFFFFFFFF7FFFF ), - UINT64_C( 0x7FFFFFFFFFEFFFFF ), - UINT64_C( 0x7FFFFFFFFFDFFFFF ), - UINT64_C( 0x7FFFFFFFFFBFFFFF ), - UINT64_C( 0x7FFFFFFFFF7FFFFF ), - UINT64_C( 0x7FFFFFFFFEFFFFFF ), - UINT64_C( 0x7FFFFFFFFDFFFFFF ), - UINT64_C( 0x7FFFFFFFFBFFFFFF ), - UINT64_C( 0x7FFFFFFFF7FFFFFF ), - UINT64_C( 0x7FFFFFFFEFFFFFFF ), - UINT64_C( 0x7FFFFFFFDFFFFFFF ), - UINT64_C( 0x7FFFFFFFBFFFFFFF ), - UINT64_C( 0x7FFFFFFF7FFFFFFF ), - UINT64_C( 0x7FFFFFFEFFFFFFFF ), - UINT64_C( 0x7FFFFFFDFFFFFFFF ), - UINT64_C( 0x7FFFFFFBFFFFFFFF ), - UINT64_C( 0x7FFFFFF7FFFFFFFF ), - UINT64_C( 0x7FFFFFEFFFFFFFFF ), - UINT64_C( 0x7FFFFFDFFFFFFFFF ), - UINT64_C( 0x7FFFFFBFFFFFFFFF ), - UINT64_C( 0x7FFFFF7FFFFFFFFF ), - UINT64_C( 0x7FFFFEFFFFFFFFFF ), - UINT64_C( 0x7FFFFDFFFFFFFFFF ), - UINT64_C( 0x7FFFFBFFFFFFFFFF ), - UINT64_C( 0x7FFFF7FFFFFFFFFF ), - UINT64_C( 0x7FFFEFFFFFFFFFFF ), - UINT64_C( 0x7FFFDFFFFFFFFFFF ), - UINT64_C( 0x7FFFBFFFFFFFFFFF ), - UINT64_C( 0x7FFF7FFFFFFFFFFF ), - UINT64_C( 0x7FFEFFFFFFFFFFFF ), - UINT64_C( 0x7FFDFFFFFFFFFFFF ), - UINT64_C( 0x7FFBFFFFFFFFFFFF ), - UINT64_C( 0x7FF7FFFFFFFFFFFF ), - UINT64_C( 0x7FEFFFFFFFFFFFFF ), - UINT64_C( 0x7FDFFFFFFFFFFFFF ), - UINT64_C( 0x7FBFFFFFFFFFFFFF ), - UINT64_C( 0x7F7FFFFFFFFFFFFF ), - UINT64_C( 0x7EFFFFFFFFFFFFFF ), - UINT64_C( 0x7DFFFFFFFFFFFFFF ), - UINT64_C( 0x7BFFFFFFFFFFFFFF ), - UINT64_C( 0x77FFFFFFFFFFFFFF ), - UINT64_C( 0x6FFFFFFFFFFFFFFF ), - UINT64_C( 0x5FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static const uint_fast32_t extF80NumQInP1 = extF80NumQIn * extF80NumP1; -static const uint_fast32_t extF80NumQOutP1 = extF80NumQOut * extF80NumP1; - -static void extF80NextQInP1( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QIn[expNum]; - uiZ0 = extF80P1[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static - void extF80NextQOutP1( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QOut[expNum]; - uiZ0 = extF80P1[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static const uint_fast32_t extF80NumQInP2 = extF80NumQIn * extF80NumP2; -static const uint_fast32_t extF80NumQOutP2 = extF80NumQOut * extF80NumP2; - -static void extF80NextQInP2( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QIn[expNum]; - uiZ0 = extF80P2[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static - void extF80NextQOutP2( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QOut[expNum]; - uiZ0 = extF80P2[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void extF80RandomQOutP3( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = extF80QOut[randomN_ui8( extF80NumQOut )]; - uiZ0 = - (extF80P2[randomN_ui8( extF80NumP2 )] - + extF80P2[randomN_ui8( extF80NumP2 )]) - & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -static void extF80RandomQOutPInf( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = extF80QOut[randomN_ui8( extF80NumQOut )]; - uiZ0 = random_ui64() & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -enum { extF80NumQInfWeightMasks = 14 }; -static const uint16_t extF80QInfWeightMasks[extF80NumQInfWeightMasks] = { - 0xFFFF, - 0xFFFF, - 0xBFFF, - 0x9FFF, - 0x87FF, - 0x87FF, - 0x83FF, - 0x81FF, - 0x80FF, - 0x807F, - 0x803F, - 0x801F, - 0x800F, - 0x8007 -}; -static const uint16_t extF80QInfWeightOffsets[extF80NumQInfWeightMasks] = { - 0x0000, - 0x0000, - 0x2000, - 0x3000, - 0x3800, - 0x3C00, - 0x3E00, - 0x3F00, - 0x3F80, - 0x3FC0, - 0x3FE0, - 0x3FF0, - 0x3FF8, - 0x3FFC -}; - -static void extF80RandomQInfP3( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int weightMaskNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - weightMaskNum = randomN_ui8( extF80NumQInfWeightMasks ); - uiZ64 = - (random_ui16() & extF80QInfWeightMasks[weightMaskNum]) - + extF80QInfWeightOffsets[weightMaskNum]; - uiZ0 = - (extF80P2[randomN_ui8( extF80NumP2 )] - + extF80P2[randomN_ui8( extF80NumP2 )]) - & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -static void extF80RandomQInfPInf( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int weightMaskNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - weightMaskNum = randomN_ui8( extF80NumQInfWeightMasks ); - uiZ64 = - (random_ui16() & extF80QInfWeightMasks[weightMaskNum]) - + extF80QInfWeightOffsets[weightMaskNum]; - uiZ0 = random_ui64() & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -static void extF80Random( extFloat80_t *zPtr ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - extF80RandomQOutP3( zPtr ); - break; - case 3: - extF80RandomQOutPInf( zPtr ); - break; - case 4: - case 5: - case 6: - extF80RandomQInfP3( zPtr ); - break; - case 7: - extF80RandomQInfPInf( zPtr ); - break; - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static extFloat80_t currentA, currentB, currentC; -static int subcase; - -extFloat80_t genCases_extF80_a, genCases_extF80_b, genCases_extF80_c; - -void genCases_extF80_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * extF80NumQOutP1 : 2 * extF80NumQOutP2; - genCases_done = false; - -} - -void genCases_extF80_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - extF80Random( &genCases_extF80_a ); - break; - case 2: - extF80NextQOutP1( &sequenceA, &genCases_extF80_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - extF80Random( &genCases_extF80_a ); - break; - case 1: - extF80NextQOutP2( &sequenceA, &genCases_extF80_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_extF80_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * extF80NumQInP1 * extF80NumQInP1; - extF80NextQInP1( &sequenceA, ¤tA ); - } else { - genCases_total = 2 * extF80NumQInP2 * extF80NumQInP2; - extF80NextQInP2( &sequenceA, ¤tA ); - } - genCases_done = false; - -} - -void genCases_extF80_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP1( &sequenceA, ¤tA ); - } - extF80NextQInP1( &sequenceB, ¤tB ); - case 2: - case 4: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - break; - case 1: - genCases_extF80_a = currentA; - extF80Random( &genCases_extF80_b ); - break; - case 3: - extF80Random( &genCases_extF80_a ); - genCases_extF80_b = currentB; - break; - case 5: - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP2( &sequenceA, ¤tA ); - } - genCases_extF80_a = currentA; - extF80NextQInP2( &sequenceB, &genCases_extF80_b ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_extF80_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * extF80NumQInP1 * extF80NumQInP1 * extF80NumQInP1; - extF80NextQInP1( &sequenceA, ¤tA ); - extF80NextQInP1( &sequenceB, ¤tB ); - } else { - genCases_total = 2 * extF80NumQInP2 * extF80NumQInP2 * extF80NumQInP2; - extF80NextQInP2( &sequenceA, ¤tA ); - extF80NextQInP2( &sequenceB, ¤tB ); - } - genCases_done = false; - -} - -void genCases_extF80_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP1( &sequenceA, ¤tA ); - } - extF80NextQInP1( &sequenceB, ¤tB ); - } - extF80NextQInP1( &sequenceC, ¤tC ); - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - genCases_extF80_c = currentC; - break; - case 1: - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - extF80Random( &genCases_extF80_c ); - break; - case 2: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 3: - extF80Random( &genCases_extF80_a ); - genCases_extF80_b = currentB; - genCases_extF80_c = currentC; - break; - case 4: - genCases_extF80_a = currentA; - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 5: - extF80Random( &genCases_extF80_a ); - genCases_extF80_b = currentB; - extF80Random( &genCases_extF80_c ); - break; - case 6: - genCases_extF80_a = currentA; - extF80Random( &genCases_extF80_b ); - genCases_extF80_c = currentC; - break; - case 7: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 8: - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - genCases_extF80_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP2( &sequenceA, ¤tA ); - } - extF80NextQInP2( &sequenceB, ¤tB ); - } - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - extF80NextQInP2( &sequenceC, &genCases_extF80_c ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_f128.c b/addins/TestFloat-3e/source/genCases_f128.c deleted file mode 100644 index e20c7a17f..000000000 --- a/addins/TestFloat-3e/source/genCases_f128.c +++ /dev/null @@ -1,1090 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "uint128.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef FLOAT128 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -enum { - f128NumQIn = 22, - f128NumQOut = 78, - f128NumP1 = 4, - f128NumP2 = 443 -}; -static const uint64_t f128QIn[f128NumQIn] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0001000000000000 ), /* positive, -16382 */ - UINT64_C( 0x3F8E000000000000 ), /* positive, -113 */ - UINT64_C( 0x3FFD000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FFE000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FFF000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4001000000000000 ), /* positive, 2 */ - UINT64_C( 0x4070000000000000 ), /* positive, 113 */ - UINT64_C( 0x7FFE000000000000 ), /* positive, 16383 */ - UINT64_C( 0x7FFF000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8001000000000000 ), /* negative, -16382 */ - UINT64_C( 0xBF8E000000000000 ), /* negative, -113 */ - UINT64_C( 0xBFFD000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFFE000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFFF000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC001000000000000 ), /* negative, 2 */ - UINT64_C( 0xC070000000000000 ), /* negative, 113 */ - UINT64_C( 0xFFFE000000000000 ), /* negative, 16383 */ - UINT64_C( 0xFFFF000000000000 ) /* negative, infinity or NaN */ -}; -static const uint64_t f128QOut[f128NumQOut] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0001000000000000 ), /* positive, -16382 */ - UINT64_C( 0x0002000000000000 ), /* positive, -16381 */ - UINT64_C( 0x3BFE000000000000 ), /* positive, -1025 */ - UINT64_C( 0x3BFF000000000000 ), /* positive, -1024 */ - UINT64_C( 0x3C00000000000000 ), /* positive, -1023 */ - UINT64_C( 0x3C01000000000000 ), /* positive, -1022 */ - UINT64_C( 0x3F7E000000000000 ), /* positive, -129 */ - UINT64_C( 0x3F7F000000000000 ), /* positive, -128 */ - UINT64_C( 0x3F80000000000000 ), /* positive, -127 */ - UINT64_C( 0x3F81000000000000 ), /* positive, -126 */ - UINT64_C( 0x3F8E000000000000 ), /* positive, -113 */ - UINT64_C( 0x3FFB000000000000 ), /* positive, -4 */ - UINT64_C( 0x3FFC000000000000 ), /* positive, -3 */ - UINT64_C( 0x3FFD000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FFE000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FFF000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4001000000000000 ), /* positive, 2 */ - UINT64_C( 0x4002000000000000 ), /* positive, 3 */ - UINT64_C( 0x4003000000000000 ), /* positive, 4 */ - UINT64_C( 0x401C000000000000 ), /* positive, 29 */ - UINT64_C( 0x401D000000000000 ), /* positive, 30 */ - UINT64_C( 0x401E000000000000 ), /* positive, 31 */ - UINT64_C( 0x401F000000000000 ), /* positive, 32 */ - UINT64_C( 0x403C000000000000 ), /* positive, 61 */ - UINT64_C( 0x403D000000000000 ), /* positive, 62 */ - UINT64_C( 0x403E000000000000 ), /* positive, 63 */ - UINT64_C( 0x403F000000000000 ), /* positive, 64 */ - UINT64_C( 0x4070000000000000 ), /* positive, 113 */ - UINT64_C( 0x407E000000000000 ), /* positive, 127 */ - UINT64_C( 0x407F000000000000 ), /* positive, 128 */ - UINT64_C( 0x4080000000000000 ), /* positive, 129 */ - UINT64_C( 0x43FE000000000000 ), /* positive, 1023 */ - UINT64_C( 0x43FF000000000000 ), /* positive, 1024 */ - UINT64_C( 0x4400000000000000 ), /* positive, 1025 */ - UINT64_C( 0x7FFD000000000000 ), /* positive, 16382 */ - UINT64_C( 0x7FFE000000000000 ), /* positive, 16383 */ - UINT64_C( 0x7FFF000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8001000000000000 ), /* negative, -16382 */ - UINT64_C( 0x8002000000000000 ), /* negative, -16381 */ - UINT64_C( 0xBBFE000000000000 ), /* negative, -1025 */ - UINT64_C( 0xBBFF000000000000 ), /* negative, -1024 */ - UINT64_C( 0xBC00000000000000 ), /* negative, -1023 */ - UINT64_C( 0xBC01000000000000 ), /* negative, -1022 */ - UINT64_C( 0xBF7E000000000000 ), /* negative, -129 */ - UINT64_C( 0xBF7F000000000000 ), /* negative, -128 */ - UINT64_C( 0xBF80000000000000 ), /* negative, -127 */ - UINT64_C( 0xBF81000000000000 ), /* negative, -126 */ - UINT64_C( 0xBF8E000000000000 ), /* negative, -113 */ - UINT64_C( 0xBFFB000000000000 ), /* negative, -4 */ - UINT64_C( 0xBFFC000000000000 ), /* negative, -3 */ - UINT64_C( 0xBFFD000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFFE000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFFF000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC001000000000000 ), /* negative, 2 */ - UINT64_C( 0xC002000000000000 ), /* negative, 3 */ - UINT64_C( 0xC003000000000000 ), /* negative, 4 */ - UINT64_C( 0xC01C000000000000 ), /* negative, 29 */ - UINT64_C( 0xC01D000000000000 ), /* negative, 30 */ - UINT64_C( 0xC01E000000000000 ), /* negative, 31 */ - UINT64_C( 0xC01F000000000000 ), /* negative, 32 */ - UINT64_C( 0xC03C000000000000 ), /* negative, 61 */ - UINT64_C( 0xC03D000000000000 ), /* negative, 62 */ - UINT64_C( 0xC03E000000000000 ), /* negative, 63 */ - UINT64_C( 0xC03F000000000000 ), /* negative, 64 */ - UINT64_C( 0xC070000000000000 ), /* negative, 113 */ - UINT64_C( 0xC07E000000000000 ), /* negative, 127 */ - UINT64_C( 0xC07F000000000000 ), /* negative, 128 */ - UINT64_C( 0xC080000000000000 ), /* negative, 129 */ - UINT64_C( 0xC3FE000000000000 ), /* negative, 1023 */ - UINT64_C( 0xC3FF000000000000 ), /* negative, 1024 */ - UINT64_C( 0xC400000000000000 ), /* negative, 1025 */ - UINT64_C( 0xFFFD000000000000 ), /* negative, 16382 */ - UINT64_C( 0xFFFE000000000000 ), /* negative, 16383 */ - UINT64_C( 0xFFFF000000000000 ) /* negative, infinity or NaN */ -}; -static const struct { uint64_t v64, v0; } f128P1[f128NumP1] = { - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000001 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFE ) } -}; -static const struct { uint64_t v64, v0; } f128P2[f128NumP2] = { - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000001 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000002 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000004 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000008 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000010 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000020 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000040 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000080 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000100 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000200 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000400 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000800 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000001000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000002000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000004000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000008000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000010000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000020000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000040000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000080000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000100000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000200000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000400000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000800000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000001000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000002000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000004000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000008000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000010000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000020000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000040000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000080000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000100000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000200000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000400000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000800000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000001000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000002000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000004000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000008000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000010000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000020000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000040000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000080000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000100000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000200000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000400000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000800000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0001000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0002000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0004000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0008000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0010000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0020000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0040000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0080000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0100000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0200000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0400000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0800000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x1000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x2000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x4000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x8000000000000000 ) }, - { UINT64_C( 0x0000000000000001 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000002 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000004 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000008 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000010 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000020 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000040 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000080 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000100 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000200 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000400 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000800 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000001000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000002000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000004000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000008000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000010000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000020000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000040000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000080000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000100000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000200000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000400000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000800000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000001000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000002000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000004000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000008000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000010000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000020000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000040000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000080000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000100000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000200000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000400000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000800000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000001000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000002000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000004000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000008000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000010000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000020000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000040000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000080000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000100000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000200000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000400000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000800000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000C00000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000E00000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000F00000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000F80000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FC0000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FE0000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FF0000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FF8000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFC000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFE000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFF000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFF800000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFC00000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFE00000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFF00000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFF80000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFC0000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFE0000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFF0000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFF8000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFC000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFE000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFF000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFF800000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFC00000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFE00000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFF00000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFF80000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFC0000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFE0000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFF0000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFF8000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFC000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFE000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFF000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFF800 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFC00 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFE00 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFF00 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFF80 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFC0 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFE0 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFF0 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFF8 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFC ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFE ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x8000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xC000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xE000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF800000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFC00000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFE00000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF00000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF80000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFC0000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFE0000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF0000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF8000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFC000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFE000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF800000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFC00000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFE00000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF00000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF80000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFC0000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFE0000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF0000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF8000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFC000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFE000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF800000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFC00000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFE00000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF00000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF80000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFC0000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFE0000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF0000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF8000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFC000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFE000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF800000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFC00000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFE00000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF00000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF80000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFC0000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFE0000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF0000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF8000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFC000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFE000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF800 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFC00 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFE00 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF00 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF80 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFC0 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFE0 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF0 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF8 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFC ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFE ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFD ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFB ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF7 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFEF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFDF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFBF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF7F ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFEFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFDFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFBFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF7FF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFEFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFDFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFBFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF7FFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFEFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFDFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFBFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF7FFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFEFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFDFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFBFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF7FFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFEFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFDFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFBFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF7FFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFEFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFDFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFBFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF7FFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFEFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFDFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFBFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF7FFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFEFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFDFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFBFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF7FFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFEFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFDFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFBFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF7FFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFEFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFDFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFBFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF7FFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFEFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFDFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFBFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF7FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFEFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFDFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFBFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF7FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFEFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFDFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFBFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF7FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xEFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xDFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xBFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x7FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFD ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFB ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFF7 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFEF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFDF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFBF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFF7F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFEFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFDFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFBFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFF7FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFEFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFDFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFBFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFF7FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFEFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFDFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFBFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFF7FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFEFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFDFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFBFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFF7FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFEFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFDFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFBFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFF7FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFEFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFDFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFBFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFF7FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFEFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFDFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFBFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFF7FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFEFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFDFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFBFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FF7FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FEFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FDFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FBFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000F7FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000EFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000DFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000BFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00007FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00003FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00001FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000007FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000003FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000001FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000007FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000003FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000001FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000007FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000003FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000001FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000007FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000003FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000001FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000007FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000003FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000001FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000007FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000003FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000001FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000007FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000003FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000001FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000007FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000003FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000001FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000007FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000003FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000001FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000000FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000007F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000003F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000001F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000000F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000007 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000003 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000001 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x7FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x3FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x1FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x07FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x03FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x01FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x007FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x003FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x001FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0007FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0003FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0001FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00007FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00003FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00001FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000007FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000003FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000001FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000007FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000003FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000001FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000007FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000003FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000001FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000007FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000003FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000001FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000007FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000003FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000001FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000007FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000003FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000001FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000007FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000003FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000001FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000007FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000003FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000001FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000007FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000003FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000001FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000000FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000007F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000003F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000001F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000000F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000007 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000003 ) } -}; - -static const uint_fast64_t f128NumQInP1 = f128NumQIn * f128NumP1; -static const uint_fast64_t f128NumQOutP1 = f128NumQOut * f128NumP1; - -static void f128NextQInP1( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QIn[expNum] | f128P1[sigNum].v64; - uiZPtr->v0 = f128P1[sigNum].v0; - ++sigNum; - if ( f128NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void f128NextQOutP1( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QOut[expNum] | f128P1[sigNum].v64; - uiZPtr->v0 = f128P1[sigNum].v0; - ++sigNum; - if ( f128NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static const uint_fast64_t f128NumQInP2 = f128NumQIn * f128NumP2; -static const uint_fast64_t f128NumQOutP2 = f128NumQOut * f128NumP2; - -static void f128NextQInP2( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QIn[expNum] | f128P2[sigNum].v64; - uiZPtr->v0 = f128P2[sigNum].v0; - ++sigNum; - if ( f128NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void f128NextQOutP2( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QOut[expNum] | f128P2[sigNum].v64; - uiZPtr->v0 = f128P2[sigNum].v0; - ++sigNum; - if ( f128NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void f128RandomQOutP3( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int sigNum1, sigNum2; - uint_fast64_t sig1_0; - - uiZPtr = (struct uint128 *) zPtr; - sigNum1 = randomN_ui16( f128NumP2 ); - sigNum2 = randomN_ui16( f128NumP2 ); - sig1_0 = f128P2[sigNum1].v0; - uiZPtr->v0 = sig1_0 + f128P2[sigNum2].v0; - uiZPtr->v64 = - f128QOut[randomN_ui8( f128NumQOut )] - | ((f128P2[sigNum1].v64 + f128P2[sigNum2].v64 + (uiZPtr->v0 < sig1_0)) - & UINT64_C( 0x0000FFFFFFFFFFFF )); - -} - -static void f128RandomQOutPInf( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - - uiZPtr = (struct uint128 *) zPtr; - uiZPtr->v64 = - f128QOut[randomN_ui8( f128NumQOut )] - | (random_ui64() & UINT64_C( 0x0000FFFFFFFFFFFF )); - uiZPtr->v0 = random_ui64(); - -} - -enum { f128NumQInfWeightMasks = 14 }; -static const uint64_t f128QInfWeightMasks[f128NumQInfWeightMasks] = { - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xBFFF000000000000 ), - UINT64_C( 0x9FFF000000000000 ), - UINT64_C( 0x87FF000000000000 ), - UINT64_C( 0x87FF000000000000 ), - UINT64_C( 0x83FF000000000000 ), - UINT64_C( 0x81FF000000000000 ), - UINT64_C( 0x80FF000000000000 ), - UINT64_C( 0x807F000000000000 ), - UINT64_C( 0x803F000000000000 ), - UINT64_C( 0x801F000000000000 ), - UINT64_C( 0x800F000000000000 ), - UINT64_C( 0x8007000000000000 ) -}; -static const uint64_t f128QInfWeightOffsets[f128NumQInfWeightMasks] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x3000000000000000 ), - UINT64_C( 0x3800000000000000 ), - UINT64_C( 0x3C00000000000000 ), - UINT64_C( 0x3E00000000000000 ), - UINT64_C( 0x3F00000000000000 ), - UINT64_C( 0x3F80000000000000 ), - UINT64_C( 0x3FC0000000000000 ), - UINT64_C( 0x3FE0000000000000 ), - UINT64_C( 0x3FF0000000000000 ), - UINT64_C( 0x3FF8000000000000 ), - UINT64_C( 0x3FFC000000000000 ) -}; - -static void f128RandomQInfP3( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int sigNum1, sigNum2; - uint_fast64_t sig1_0; - int weightMaskNum; - - uiZPtr = (struct uint128 *) zPtr; - sigNum1 = randomN_ui16( f128NumP2 ); - sigNum2 = randomN_ui16( f128NumP2 ); - sig1_0 = f128P2[sigNum1].v0; - uiZPtr->v0 = sig1_0 + f128P2[sigNum2].v0; - weightMaskNum = randomN_ui8( f128NumQInfWeightMasks ); - uiZPtr->v64 = - (((uint_fast64_t) random_ui16()<<48 - & f128QInfWeightMasks[weightMaskNum]) - + f128QInfWeightOffsets[weightMaskNum]) - | ((f128P2[sigNum1].v64 + f128P2[sigNum2].v64 + (uiZPtr->v0 < sig1_0)) - & UINT64_C( 0x0000FFFFFFFFFFFF )); - -} - -static void f128RandomQInfPInf( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int weightMaskNum; - - uiZPtr = (struct uint128 *) zPtr; - weightMaskNum = randomN_ui8( f128NumQInfWeightMasks ); - uiZPtr->v64 = - (random_ui64() - & (f128QInfWeightMasks[weightMaskNum] - | UINT64_C( 0x0000FFFFFFFFFFFF ))) - + f128QInfWeightOffsets[weightMaskNum]; - uiZPtr->v0 = random_ui64(); - -} - -static void f128Random( float128_t *zPtr ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - f128RandomQOutP3( zPtr ); - break; - case 3: - f128RandomQOutPInf( zPtr ); - break; - case 4: - case 5: - case 6: - f128RandomQInfP3( zPtr ); - break; - case 7: - f128RandomQInfPInf( zPtr ); - break; - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float128_t currentA, currentB, currentC; -static int subcase; - -float128_t genCases_f128_a, genCases_f128_b, genCases_f128_c; - -void genCases_f128_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f128NumQOutP1 : 2 * f128NumQOutP2; - genCases_done = false; - -} - -void genCases_f128_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - f128Random( &genCases_f128_a ); - break; - case 2: - f128NextQOutP1( &sequenceA, &genCases_f128_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - f128Random( &genCases_f128_a ); - break; - case 1: - f128NextQOutP2( &sequenceA, &genCases_f128_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f128_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f128NumQInP1 * f128NumQInP1; - f128NextQInP1( &sequenceA, ¤tA ); - } else { - genCases_total = 2 * f128NumQInP2 * f128NumQInP2; - f128NextQInP2( &sequenceA, ¤tA ); - } - genCases_done = false; - -} - -void genCases_f128_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP1( &sequenceA, ¤tA ); - } - f128NextQInP1( &sequenceB, ¤tB ); - case 2: - case 4: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - break; - case 1: - genCases_f128_a = currentA; - f128Random( &genCases_f128_b ); - break; - case 3: - f128Random( &genCases_f128_a ); - genCases_f128_b = currentB; - break; - case 5: - genCases_f128_a = currentA; - genCases_f128_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP2( &sequenceA, ¤tA ); - } - genCases_f128_a = currentA; - f128NextQInP2( &sequenceB, &genCases_f128_b ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f128_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f128NumQInP1 * f128NumQInP1 * f128NumQInP1; - f128NextQInP1( &sequenceA, ¤tA ); - f128NextQInP1( &sequenceB, ¤tB ); - } else { - genCases_total = 2 * f128NumQInP2 * f128NumQInP2 * f128NumQInP2; - f128NextQInP2( &sequenceA, ¤tA ); - f128NextQInP2( &sequenceB, ¤tB ); - } - genCases_done = false; - -} - -void genCases_f128_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP1( &sequenceA, ¤tA ); - } - f128NextQInP1( &sequenceB, ¤tB ); - } - f128NextQInP1( &sequenceC, ¤tC ); - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - genCases_f128_c = currentC; - break; - case 1: - genCases_f128_a = currentA; - genCases_f128_b = currentB; - f128Random( &genCases_f128_c ); - break; - case 2: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 3: - f128Random( &genCases_f128_a ); - genCases_f128_b = currentB; - genCases_f128_c = currentC; - break; - case 4: - genCases_f128_a = currentA; - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 5: - f128Random( &genCases_f128_a ); - genCases_f128_b = currentB; - f128Random( &genCases_f128_c ); - break; - case 6: - genCases_f128_a = currentA; - f128Random( &genCases_f128_b ); - genCases_f128_c = currentC; - break; - case 7: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 8: - genCases_f128_a = currentA; - genCases_f128_b = currentB; - genCases_f128_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP2( &sequenceA, ¤tA ); - } - f128NextQInP2( &sequenceB, ¤tB ); - } - genCases_f128_a = currentA; - genCases_f128_b = currentB; - f128NextQInP2( &sequenceC, &genCases_f128_c ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_f16.c b/addins/TestFloat-3e/source/genCases_f16.c deleted file mode 100644 index dd2ebbce4..000000000 --- a/addins/TestFloat-3e/source/genCases_f16.c +++ /dev/null @@ -1,585 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef FLOAT16 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -union ui16_f16 { uint16_t ui; float16_t f; }; - -enum { - f16NumQIn = 22, - f16NumQOut = 34, - f16NumP1 = 4, - f16NumP2 = 36 -}; -static const uint16_t f16QIn[f16NumQIn] = { - 0x0000, /* positive, subnormal */ - 0x0400, /* positive, -14 */ - 0x1000, /* positive, -11 */ - 0x3400, /* positive, -2 */ - 0x3800, /* positive, -1 */ - 0x3C00, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4400, /* positive, 2 */ - 0x6800, /* positive, 11 */ - 0x7800, /* positive, 15 */ - 0x7C00, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8400, /* negative, -14 */ - 0x9000, /* negative, -11 */ - 0xB400, /* negative, -2 */ - 0xB800, /* negative, -1 */ - 0xBC00, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC400, /* negative, 2 */ - 0xE800, /* negative, 11 */ - 0xF800, /* negative, 15 */ - 0xFC00 /* negative, infinity or NaN */ -}; -static const uint16_t f16QOut[f16NumQOut] = { - 0x0000, /* positive, subnormal */ - 0x0400, /* positive, -14 */ - 0x0800, /* positive, -13 */ - 0x1000, /* positive, -11 */ - 0x2C00, /* positive, -4 */ - 0x3000, /* positive, -3 */ - 0x3400, /* positive, -2 */ - 0x3800, /* positive, -1 */ - 0x3C00, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4400, /* positive, 2 */ - 0x4800, /* positive, 3 */ - 0x4C00, /* positive, 4 */ - 0x6800, /* positive, 11 */ - 0x7400, /* positive, 14 */ - 0x7800, /* positive, 15 */ - 0x7C00, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8400, /* negative, -14 */ - 0x8800, /* negative, -13 */ - 0x9000, /* negative, -11 */ - 0xAC00, /* negative, -4 */ - 0xB000, /* negative, -3 */ - 0xB400, /* negative, -2 */ - 0xB800, /* negative, -1 */ - 0xBC00, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC400, /* negative, 2 */ - 0xC800, /* negative, 3 */ - 0xCC00, /* negative, 4 */ - 0xE800, /* negative, 11 */ - 0xF400, /* negative, 14 */ - 0xF800, /* negative, 15 */ - 0xFC00 /* negative, infinity or NaN */ -}; -static const uint16_t f16P1[f16NumP1] = { - 0x0000, - 0x0001, - 0x03FF, - 0x03FE -}; -static const uint16_t f16P2[f16NumP2] = { - 0x0000, - 0x0001, - 0x0002, - 0x0004, - 0x0008, - 0x0010, - 0x0020, - 0x0040, - 0x0080, - 0x0100, - 0x0200, - 0x0300, - 0x0380, - 0x03C0, - 0x03E0, - 0x03F0, - 0x03F8, - 0x03FC, - 0x03FE, - 0x03FF, - 0x03FD, - 0x03FB, - 0x03F7, - 0x03EF, - 0x03DF, - 0x03BF, - 0x037F, - 0x02FF, - 0x01FF, - 0x00FF, - 0x007F, - 0x003F, - 0x001F, - 0x000F, - 0x0007, - 0x0003 -}; - -static const uint_fast64_t f16NumQInP1 = f16NumQIn * f16NumP1; -static const uint_fast64_t f16NumQOutP1 = f16NumQOut * f16NumP1; - -static float16_t f16NextQInP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QIn[expNum] | f16P1[sigNum]; - ++sigNum; - if ( f16NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float16_t f16NextQOutP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QOut[expNum] | f16P1[sigNum]; - ++sigNum; - if ( f16NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static const uint_fast64_t f16NumQInP2 = f16NumQIn * f16NumP2; -static const uint_fast64_t f16NumQOutP2 = f16NumQOut * f16NumP2; - -static float16_t f16NextQInP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QIn[expNum] | f16P2[sigNum]; - ++sigNum; - if ( f16NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float16_t f16NextQOutP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QOut[expNum] | f16P2[sigNum]; - ++sigNum; - if ( f16NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float16_t f16RandomQOutP3( void ) -{ - union ui16_f16 uZ; - - uZ.ui = - f16QOut[randomN_ui8( f16NumQOut )] - | ((f16P2[randomN_ui8( f16NumP2 )] + f16P2[randomN_ui8( f16NumP2 )]) - & 0x03FF); - return uZ.f; - -} - -static float16_t f16RandomQOutPInf( void ) -{ - union ui16_f16 uZ; - - uZ.ui = f16QOut[randomN_ui8( f16NumQOut )] | (random_ui16() & 0x03FF); - return uZ.f; - -} - -enum { f16NumQInfWeightMasks = 4 }; -static const uint16_t f16QInfWeightMasks[f16NumQInfWeightMasks] = - { 0xFC00, 0xFC00, 0xBC00, 0x9C00 }; -static const uint16_t f16QInfWeightOffsets[f16NumQInfWeightMasks] = - { 0x0000, 0x0000, 0x2000, 0x3000 }; - -static float16_t f16RandomQInfP3( void ) -{ - int weightMaskNum; - union ui16_f16 uZ; - - weightMaskNum = randomN_ui8( f16NumQInfWeightMasks ); - uZ.ui = - ((random_ui16() & f16QInfWeightMasks[weightMaskNum]) - + f16QInfWeightOffsets[weightMaskNum]) - | ((f16P2[randomN_ui8( f16NumP2 )] + f16P2[randomN_ui8( f16NumP2 )]) - & 0x03FF); - return uZ.f; - -} - -static float16_t f16RandomQInfPInf( void ) -{ - int weightMaskNum; - union ui16_f16 uZ; - - weightMaskNum = randomN_ui8( f16NumQInfWeightMasks ); - uZ.ui = - (random_ui16() & (f16QInfWeightMasks[weightMaskNum] | 0x03FF)) - + f16QInfWeightOffsets[weightMaskNum]; - return uZ.f; - -} - -static float16_t f16Random( void ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - return f16RandomQOutP3(); - case 3: - return f16RandomQOutPInf(); - case 4: - case 5: - case 6: - return f16RandomQInfP3(); - case 7: - return f16RandomQInfPInf(); - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float16_t currentA, currentB, currentC; -static int subcase; - -float16_t genCases_f16_a, genCases_f16_b, genCases_f16_c; - -void genCases_f16_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f16NumQOutP1 : 2 * f16NumQOutP2; - genCases_done = false; - -} - -void genCases_f16_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - genCases_f16_a = f16Random(); - break; - case 2: - genCases_f16_a = f16NextQOutP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f16_a = f16Random(); - break; - case 1: - genCases_f16_a = f16NextQOutP2( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f16_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f16NumQInP1 * f16NumQInP1; - currentA = f16NextQInP1( &sequenceA ); - } else { - genCases_total = 2 * f16NumQInP2 * f16NumQInP2; - currentA = f16NextQInP2( &sequenceA ); - } - genCases_done = false; - -} - -void genCases_f16_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP1( &sequenceA ); - } - currentB = f16NextQInP1( &sequenceB ); - case 2: - case 4: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - break; - case 1: - genCases_f16_a = currentA; - genCases_f16_b = f16Random(); - break; - case 3: - genCases_f16_a = f16Random(); - genCases_f16_b = currentB; - break; - case 5: - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP2( &sequenceA ); - } - genCases_f16_a = currentA; - genCases_f16_b = f16NextQInP2( &sequenceB ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f16_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f16NumQInP1 * f16NumQInP1 * f16NumQInP1; - currentA = f16NextQInP1( &sequenceA ); - currentB = f16NextQInP1( &sequenceB ); - } else { - genCases_total = 2 * f16NumQInP2 * f16NumQInP2 * f16NumQInP2; - currentA = f16NextQInP2( &sequenceA ); - currentB = f16NextQInP2( &sequenceB ); - } - genCases_done = false; - -} - -void genCases_f16_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP1( &sequenceA ); - } - currentB = f16NextQInP1( &sequenceB ); - } - currentC = f16NextQInP1( &sequenceC ); - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = currentC; - break; - case 1: - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_f16_c = f16Random(); - break; - case 2: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 3: - genCases_f16_a = f16Random(); - genCases_f16_b = currentB; - genCases_f16_c = currentC; - break; - case 4: - genCases_f16_a = currentA; - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 5: - genCases_f16_a = f16Random(); - genCases_f16_b = currentB; - genCases_f16_c = f16Random(); - break; - case 6: - genCases_f16_a = currentA; - genCases_f16_b = f16Random(); - genCases_f16_c = currentC; - break; - case 7: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 8: - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_f16_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP2( &sequenceA ); - } - currentB = f16NextQInP2( &sequenceB ); - } - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_f16_c = f16NextQInP2( &sequenceC ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_f32.c b/addins/TestFloat-3e/source/genCases_f32.c deleted file mode 100644 index bb08ae902..000000000 --- a/addins/TestFloat-3e/source/genCases_f32.c +++ /dev/null @@ -1,664 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -union ui32_f32 { uint32_t ui; float32_t f; }; - -enum { - f32NumQIn = 22, - f32NumQOut = 50, - f32NumP1 = 4, - f32NumP2 = 88 -}; -static const uint32_t f32QIn[f32NumQIn] = { - 0x00000000, /* positive, subnormal */ - 0x00800000, /* positive, -126 */ - 0x33800000, /* positive, -24 */ - 0x3E800000, /* positive, -2 */ - 0x3F000000, /* positive, -1 */ - 0x3F800000, /* positive, 0 */ - 0x40000000, /* positive, 1 */ - 0x40800000, /* positive, 2 */ - 0x4B800000, /* positive, 24 */ - 0x7F000000, /* positive, 127 */ - 0x7F800000, /* positive, infinity or NaN */ - 0x80000000, /* negative, subnormal */ - 0x80800000, /* negative, -126 */ - 0xB3800000, /* negative, -24 */ - 0xBE800000, /* negative, -2 */ - 0xBF000000, /* negative, -1 */ - 0xBF800000, /* negative, 0 */ - 0xC0000000, /* negative, 1 */ - 0xC0800000, /* negative, 2 */ - 0xCB800000, /* negative, 24 */ - 0xFE800000, /* negative, 126 */ - 0xFF800000 /* negative, infinity or NaN */ -}; -static const uint32_t f32QOut[f32NumQOut] = { - 0x00000000, /* positive, subnormal */ - 0x00800000, /* positive, -126 */ - 0x01000000, /* positive, -125 */ - 0x33800000, /* positive, -24 */ - 0x3D800000, /* positive, -4 */ - 0x3E000000, /* positive, -3 */ - 0x3E800000, /* positive, -2 */ - 0x3F000000, /* positive, -1 */ - 0x3F800000, /* positive, 0 */ - 0x40000000, /* positive, 1 */ - 0x40800000, /* positive, 2 */ - 0x41000000, /* positive, 3 */ - 0x41800000, /* positive, 4 */ - 0x4B800000, /* positive, 24 */ - 0x4E000000, /* positive, 29 */ - 0x4E800000, /* positive, 30 */ - 0x4F000000, /* positive, 31 */ - 0x4F800000, /* positive, 32 */ - 0x5E000000, /* positive, 61 */ - 0x5E800000, /* positive, 62 */ - 0x5F000000, /* positive, 63 */ - 0x5F800000, /* positive, 64 */ - 0x7E800000, /* positive, 126 */ - 0x7F000000, /* positive, 127 */ - 0x7F800000, /* positive, infinity or NaN */ - 0x80000000, /* negative, subnormal */ - 0x80800000, /* negative, -126 */ - 0x81000000, /* negative, -125 */ - 0xB3800000, /* negative, -24 */ - 0xBD800000, /* negative, -4 */ - 0xBE000000, /* negative, -3 */ - 0xBE800000, /* negative, -2 */ - 0xBF000000, /* negative, -1 */ - 0xBF800000, /* negative, 0 */ - 0xC0000000, /* negative, 1 */ - 0xC0800000, /* negative, 2 */ - 0xC1000000, /* negative, 3 */ - 0xC1800000, /* negative, 4 */ - 0xCB800000, /* negative, 24 */ - 0xCE000000, /* negative, 29 */ - 0xCE800000, /* negative, 30 */ - 0xCF000000, /* negative, 31 */ - 0xCF800000, /* negative, 32 */ - 0xDE000000, /* negative, 61 */ - 0xDE800000, /* negative, 62 */ - 0xDF000000, /* negative, 63 */ - 0xDF800000, /* negative, 64 */ - 0xFE800000, /* negative, 126 */ - 0xFF000000, /* negative, 127 */ - 0xFF800000 /* negative, infinity or NaN */ -}; -static const uint32_t f32P1[f32NumP1] = { - 0x00000000, - 0x00000001, - 0x007FFFFF, - 0x007FFFFE -}; -static const uint32_t f32P2[f32NumP2] = { - 0x00000000, - 0x00000001, - 0x00000002, - 0x00000004, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000100, - 0x00000200, - 0x00000400, - 0x00000800, - 0x00001000, - 0x00002000, - 0x00004000, - 0x00008000, - 0x00010000, - 0x00020000, - 0x00040000, - 0x00080000, - 0x00100000, - 0x00200000, - 0x00400000, - 0x00600000, - 0x00700000, - 0x00780000, - 0x007C0000, - 0x007E0000, - 0x007F0000, - 0x007F8000, - 0x007FC000, - 0x007FE000, - 0x007FF000, - 0x007FF800, - 0x007FFC00, - 0x007FFE00, - 0x007FFF00, - 0x007FFF80, - 0x007FFFC0, - 0x007FFFE0, - 0x007FFFF0, - 0x007FFFF8, - 0x007FFFFC, - 0x007FFFFE, - 0x007FFFFF, - 0x007FFFFD, - 0x007FFFFB, - 0x007FFFF7, - 0x007FFFEF, - 0x007FFFDF, - 0x007FFFBF, - 0x007FFF7F, - 0x007FFEFF, - 0x007FFDFF, - 0x007FFBFF, - 0x007FF7FF, - 0x007FEFFF, - 0x007FDFFF, - 0x007FBFFF, - 0x007F7FFF, - 0x007EFFFF, - 0x007DFFFF, - 0x007BFFFF, - 0x0077FFFF, - 0x006FFFFF, - 0x005FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F, - 0x00000007, - 0x00000003 -}; - -static const uint_fast64_t f32NumQInP1 = f32NumQIn * f32NumP1; -static const uint_fast64_t f32NumQOutP1 = f32NumQOut * f32NumP1; - -static float32_t f32NextQInP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QIn[expNum] | f32P1[sigNum]; - ++sigNum; - if ( f32NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float32_t f32NextQOutP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QOut[expNum] | f32P1[sigNum]; - ++sigNum; - if ( f32NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static const uint_fast64_t f32NumQInP2 = f32NumQIn * f32NumP2; -static const uint_fast64_t f32NumQOutP2 = f32NumQOut * f32NumP2; - -static float32_t f32NextQInP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QIn[expNum] | f32P2[sigNum]; - ++sigNum; - if ( f32NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float32_t f32NextQOutP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QOut[expNum] | f32P2[sigNum]; - ++sigNum; - if ( f32NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float32_t f32RandomQOutP3( void ) -{ - union ui32_f32 uZ; - - uZ.ui = - f32QOut[randomN_ui8( f32NumQOut )] - | ((f32P2[randomN_ui8( f32NumP2 )] + f32P2[randomN_ui8( f32NumP2 )]) - & 0x007FFFFF); - return uZ.f; - -} - -static float32_t f32RandomQOutPInf( void ) -{ - union ui32_f32 uZ; - - uZ.ui = f32QOut[randomN_ui8( f32NumQOut )] | (random_ui32() & 0x007FFFFF); - return uZ.f; - -} - -enum { f32NumQInfWeightMasks = 7 }; -static const uint32_t f32QInfWeightMasks[f32NumQInfWeightMasks] = { - 0xFF800000, - 0xFF800000, - 0xBF800000, - 0x9F800000, - 0x8F800000, - 0x87800000, - 0x83800000 -}; -static const uint32_t f32QInfWeightOffsets[f32NumQInfWeightMasks] = { - 0x00000000, - 0x00000000, - 0x20000000, - 0x30000000, - 0x38000000, - 0x3C000000, - 0x3E000000 -}; - -static float32_t f32RandomQInfP3( void ) -{ - int weightMaskNum; - union ui32_f32 uZ; - - weightMaskNum = randomN_ui8( f32NumQInfWeightMasks ); - uZ.ui = - (((uint_fast32_t) random_ui16()<<16 - & f32QInfWeightMasks[weightMaskNum]) - + f32QInfWeightOffsets[weightMaskNum]) - | ((f32P2[randomN_ui8( f32NumP2 )] + f32P2[randomN_ui8( f32NumP2 )]) - & 0x007FFFFF); - return uZ.f; - -} - -static float32_t f32RandomQInfPInf( void ) -{ - int weightMaskNum; - union ui32_f32 uZ; - - weightMaskNum = randomN_ui8( f32NumQInfWeightMasks ); - uZ.ui = - (random_ui32() & (f32QInfWeightMasks[weightMaskNum] | 0x007FFFFF)) - + f32QInfWeightOffsets[weightMaskNum]; - return uZ.f; - -} - -static float32_t f32Random( void ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - return f32RandomQOutP3(); - case 3: - return f32RandomQOutPInf(); - case 4: - case 5: - case 6: - return f32RandomQInfP3(); - case 7: - return f32RandomQInfPInf(); - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float32_t currentA, currentB, currentC; -static int subcase; - -float32_t genCases_f32_a, genCases_f32_b, genCases_f32_c; - -void genCases_f32_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f32NumQOutP1 : 2 * f32NumQOutP2; - genCases_done = false; - -} - -void genCases_f32_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - genCases_f32_a = f32Random(); - break; - case 2: - genCases_f32_a = f32NextQOutP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f32_a = f32Random(); - break; - case 1: - genCases_f32_a = f32NextQOutP2( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f32_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f32NumQInP1 * f32NumQInP1; - currentA = f32NextQInP1( &sequenceA ); - } else { - genCases_total = 2 * f32NumQInP2 * f32NumQInP2; - currentA = f32NextQInP2( &sequenceA ); - } - genCases_done = false; - -} - -void genCases_f32_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP1( &sequenceA ); - } - currentB = f32NextQInP1( &sequenceB ); - case 2: - case 4: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - break; - case 1: - genCases_f32_a = currentA; - genCases_f32_b = f32Random(); - break; - case 3: - genCases_f32_a = f32Random(); - genCases_f32_b = currentB; - break; - case 5: - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP2( &sequenceA ); - } - genCases_f32_a = currentA; - genCases_f32_b = f32NextQInP2( &sequenceB ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f32_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f32NumQInP1 * f32NumQInP1 * f32NumQInP1; - currentA = f32NextQInP1( &sequenceA ); - currentB = f32NextQInP1( &sequenceB ); - } else { - genCases_total = 2 * f32NumQInP2 * f32NumQInP2 * f32NumQInP2; - currentA = f32NextQInP2( &sequenceA ); - currentB = f32NextQInP2( &sequenceB ); - } - genCases_done = false; - -} - -void genCases_f32_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP1( &sequenceA ); - } - currentB = f32NextQInP1( &sequenceB ); - } - currentC = f32NextQInP1( &sequenceC ); - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = currentC; - break; - case 1: - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_f32_c = f32Random(); - break; - case 2: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 3: - genCases_f32_a = f32Random(); - genCases_f32_b = currentB; - genCases_f32_c = currentC; - break; - case 4: - genCases_f32_a = currentA; - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 5: - genCases_f32_a = f32Random(); - genCases_f32_b = currentB; - genCases_f32_c = f32Random(); - break; - case 6: - genCases_f32_a = currentA; - genCases_f32_b = f32Random(); - genCases_f32_c = currentC; - break; - case 7: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 8: - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_f32_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP2( &sequenceA ); - } - currentB = f32NextQInP2( &sequenceB ); - } - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_f32_c = f32NextQInP2( &sequenceC ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_f64.c b/addins/TestFloat-3e/source/genCases_f64.c deleted file mode 100644 index 61b34dc2e..000000000 --- a/addins/TestFloat-3e/source/genCases_f64.c +++ /dev/null @@ -1,808 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef FLOAT64 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -union ui64_f64 { uint64_t ui; float64_t f; }; - -enum { - f64NumQIn = 22, - f64NumQOut = 64, - f64NumP1 = 4, - f64NumP2 = 204 -}; -static const uint64_t f64QIn[f64NumQIn] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0010000000000000 ), /* positive, -1022 */ - UINT64_C( 0x3CA0000000000000 ), /* positive, -53 */ - UINT64_C( 0x3FD0000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FE0000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FF0000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4010000000000000 ), /* positive, 2 */ - UINT64_C( 0x4340000000000000 ), /* positive, 53 */ - UINT64_C( 0x7FE0000000000000 ), /* positive, 1023 */ - UINT64_C( 0x7FF0000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8010000000000000 ), /* negative, -1022 */ - UINT64_C( 0xBCA0000000000000 ), /* negative, -53 */ - UINT64_C( 0xBFD0000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFE0000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFF0000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC010000000000000 ), /* negative, 2 */ - UINT64_C( 0xC340000000000000 ), /* negative, 53 */ - UINT64_C( 0xFFE0000000000000 ), /* negative, 1023 */ - UINT64_C( 0xFFF0000000000000 ) /* negative, infinity or NaN */ -}; -static const uint64_t f64QOut[f64NumQOut] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0010000000000000 ), /* positive, -1022 */ - UINT64_C( 0x0020000000000000 ), /* positive, -1021 */ - UINT64_C( 0x37E0000000000000 ), /* positive, -129 */ - UINT64_C( 0x37F0000000000000 ), /* positive, -128 */ - UINT64_C( 0x3800000000000000 ), /* positive, -127 */ - UINT64_C( 0x3810000000000000 ), /* positive, -126 */ - UINT64_C( 0x3CA0000000000000 ), /* positive, -53 */ - UINT64_C( 0x3FB0000000000000 ), /* positive, -4 */ - UINT64_C( 0x3FC0000000000000 ), /* positive, -3 */ - UINT64_C( 0x3FD0000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FE0000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FF0000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4010000000000000 ), /* positive, 2 */ - UINT64_C( 0x4020000000000000 ), /* positive, 3 */ - UINT64_C( 0x4030000000000000 ), /* positive, 4 */ - UINT64_C( 0x41C0000000000000 ), /* positive, 29 */ - UINT64_C( 0x41D0000000000000 ), /* positive, 30 */ - UINT64_C( 0x41E0000000000000 ), /* positive, 31 */ - UINT64_C( 0x41F0000000000000 ), /* positive, 32 */ - UINT64_C( 0x4340000000000000 ), /* positive, 53 */ - UINT64_C( 0x43C0000000000000 ), /* positive, 61 */ - UINT64_C( 0x43D0000000000000 ), /* positive, 62 */ - UINT64_C( 0x43E0000000000000 ), /* positive, 63 */ - UINT64_C( 0x43F0000000000000 ), /* positive, 64 */ - UINT64_C( 0x47E0000000000000 ), /* positive, 127 */ - UINT64_C( 0x47F0000000000000 ), /* positive, 128 */ - UINT64_C( 0x4800000000000000 ), /* positive, 129 */ - UINT64_C( 0x7FD0000000000000 ), /* positive, 1022 */ - UINT64_C( 0x7FE0000000000000 ), /* positive, 1023 */ - UINT64_C( 0x7FF0000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8010000000000000 ), /* negative, -1022 */ - UINT64_C( 0x8020000000000000 ), /* negative, -1021 */ - UINT64_C( 0xB7E0000000000000 ), /* negative, -129 */ - UINT64_C( 0xB7F0000000000000 ), /* negative, -128 */ - UINT64_C( 0xB800000000000000 ), /* negative, -127 */ - UINT64_C( 0xB810000000000000 ), /* negative, -126 */ - UINT64_C( 0xBCA0000000000000 ), /* negative, -53 */ - UINT64_C( 0xBFB0000000000000 ), /* negative, -4 */ - UINT64_C( 0xBFC0000000000000 ), /* negative, -3 */ - UINT64_C( 0xBFD0000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFE0000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFF0000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC010000000000000 ), /* negative, 2 */ - UINT64_C( 0xC020000000000000 ), /* negative, 3 */ - UINT64_C( 0xC030000000000000 ), /* negative, 4 */ - UINT64_C( 0xC1C0000000000000 ), /* negative, 29 */ - UINT64_C( 0xC1D0000000000000 ), /* negative, 30 */ - UINT64_C( 0xC1E0000000000000 ), /* negative, 31 */ - UINT64_C( 0xC1F0000000000000 ), /* negative, 32 */ - UINT64_C( 0xC340000000000000 ), /* negative, 53 */ - UINT64_C( 0xC3C0000000000000 ), /* negative, 61 */ - UINT64_C( 0xC3D0000000000000 ), /* negative, 62 */ - UINT64_C( 0xC3E0000000000000 ), /* negative, 63 */ - UINT64_C( 0xC3F0000000000000 ), /* negative, 64 */ - UINT64_C( 0xC7E0000000000000 ), /* negative, 127 */ - UINT64_C( 0xC7F0000000000000 ), /* negative, 128 */ - UINT64_C( 0xC800000000000000 ), /* negative, 129 */ - UINT64_C( 0xFFD0000000000000 ), /* negative, 1022 */ - UINT64_C( 0xFFE0000000000000 ), /* negative, 1023 */ - UINT64_C( 0xFFF0000000000000 ) /* negative, infinity or NaN */ -}; -static const uint64_t f64P1[f64NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFE ) -}; -static const uint64_t f64P2[f64NumP2] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x000C000000000000 ), - UINT64_C( 0x000E000000000000 ), - UINT64_C( 0x000F000000000000 ), - UINT64_C( 0x000F800000000000 ), - UINT64_C( 0x000FC00000000000 ), - UINT64_C( 0x000FE00000000000 ), - UINT64_C( 0x000FF00000000000 ), - UINT64_C( 0x000FF80000000000 ), - UINT64_C( 0x000FFC0000000000 ), - UINT64_C( 0x000FFE0000000000 ), - UINT64_C( 0x000FFF0000000000 ), - UINT64_C( 0x000FFF8000000000 ), - UINT64_C( 0x000FFFC000000000 ), - UINT64_C( 0x000FFFE000000000 ), - UINT64_C( 0x000FFFF000000000 ), - UINT64_C( 0x000FFFF800000000 ), - UINT64_C( 0x000FFFFC00000000 ), - UINT64_C( 0x000FFFFE00000000 ), - UINT64_C( 0x000FFFFF00000000 ), - UINT64_C( 0x000FFFFF80000000 ), - UINT64_C( 0x000FFFFFC0000000 ), - UINT64_C( 0x000FFFFFE0000000 ), - UINT64_C( 0x000FFFFFF0000000 ), - UINT64_C( 0x000FFFFFF8000000 ), - UINT64_C( 0x000FFFFFFC000000 ), - UINT64_C( 0x000FFFFFFE000000 ), - UINT64_C( 0x000FFFFFFF000000 ), - UINT64_C( 0x000FFFFFFF800000 ), - UINT64_C( 0x000FFFFFFFC00000 ), - UINT64_C( 0x000FFFFFFFE00000 ), - UINT64_C( 0x000FFFFFFFF00000 ), - UINT64_C( 0x000FFFFFFFF80000 ), - UINT64_C( 0x000FFFFFFFFC0000 ), - UINT64_C( 0x000FFFFFFFFE0000 ), - UINT64_C( 0x000FFFFFFFFF0000 ), - UINT64_C( 0x000FFFFFFFFF8000 ), - UINT64_C( 0x000FFFFFFFFFC000 ), - UINT64_C( 0x000FFFFFFFFFE000 ), - UINT64_C( 0x000FFFFFFFFFF000 ), - UINT64_C( 0x000FFFFFFFFFF800 ), - UINT64_C( 0x000FFFFFFFFFFC00 ), - UINT64_C( 0x000FFFFFFFFFFE00 ), - UINT64_C( 0x000FFFFFFFFFFF00 ), - UINT64_C( 0x000FFFFFFFFFFF80 ), - UINT64_C( 0x000FFFFFFFFFFFC0 ), - UINT64_C( 0x000FFFFFFFFFFFE0 ), - UINT64_C( 0x000FFFFFFFFFFFF0 ), - UINT64_C( 0x000FFFFFFFFFFFF8 ), - UINT64_C( 0x000FFFFFFFFFFFFC ), - UINT64_C( 0x000FFFFFFFFFFFFE ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFD ), - UINT64_C( 0x000FFFFFFFFFFFFB ), - UINT64_C( 0x000FFFFFFFFFFFF7 ), - UINT64_C( 0x000FFFFFFFFFFFEF ), - UINT64_C( 0x000FFFFFFFFFFFDF ), - UINT64_C( 0x000FFFFFFFFFFFBF ), - UINT64_C( 0x000FFFFFFFFFFF7F ), - UINT64_C( 0x000FFFFFFFFFFEFF ), - UINT64_C( 0x000FFFFFFFFFFDFF ), - UINT64_C( 0x000FFFFFFFFFFBFF ), - UINT64_C( 0x000FFFFFFFFFF7FF ), - UINT64_C( 0x000FFFFFFFFFEFFF ), - UINT64_C( 0x000FFFFFFFFFDFFF ), - UINT64_C( 0x000FFFFFFFFFBFFF ), - UINT64_C( 0x000FFFFFFFFF7FFF ), - UINT64_C( 0x000FFFFFFFFEFFFF ), - UINT64_C( 0x000FFFFFFFFDFFFF ), - UINT64_C( 0x000FFFFFFFFBFFFF ), - UINT64_C( 0x000FFFFFFFF7FFFF ), - UINT64_C( 0x000FFFFFFFEFFFFF ), - UINT64_C( 0x000FFFFFFFDFFFFF ), - UINT64_C( 0x000FFFFFFFBFFFFF ), - UINT64_C( 0x000FFFFFFF7FFFFF ), - UINT64_C( 0x000FFFFFFEFFFFFF ), - UINT64_C( 0x000FFFFFFDFFFFFF ), - UINT64_C( 0x000FFFFFFBFFFFFF ), - UINT64_C( 0x000FFFFFF7FFFFFF ), - UINT64_C( 0x000FFFFFEFFFFFFF ), - UINT64_C( 0x000FFFFFDFFFFFFF ), - UINT64_C( 0x000FFFFFBFFFFFFF ), - UINT64_C( 0x000FFFFF7FFFFFFF ), - UINT64_C( 0x000FFFFEFFFFFFFF ), - UINT64_C( 0x000FFFFDFFFFFFFF ), - UINT64_C( 0x000FFFFBFFFFFFFF ), - UINT64_C( 0x000FFFF7FFFFFFFF ), - UINT64_C( 0x000FFFEFFFFFFFFF ), - UINT64_C( 0x000FFFDFFFFFFFFF ), - UINT64_C( 0x000FFFBFFFFFFFFF ), - UINT64_C( 0x000FFF7FFFFFFFFF ), - UINT64_C( 0x000FFEFFFFFFFFFF ), - UINT64_C( 0x000FFDFFFFFFFFFF ), - UINT64_C( 0x000FFBFFFFFFFFFF ), - UINT64_C( 0x000FF7FFFFFFFFFF ), - UINT64_C( 0x000FEFFFFFFFFFFF ), - UINT64_C( 0x000FDFFFFFFFFFFF ), - UINT64_C( 0x000FBFFFFFFFFFFF ), - UINT64_C( 0x000F7FFFFFFFFFFF ), - UINT64_C( 0x000EFFFFFFFFFFFF ), - UINT64_C( 0x000DFFFFFFFFFFFF ), - UINT64_C( 0x000BFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static const uint_fast64_t f64NumQInP1 = f64NumQIn * f64NumP1; -static const uint_fast64_t f64NumQOutP1 = f64NumQOut * f64NumP1; - -static float64_t f64NextQInP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QIn[expNum] | f64P1[sigNum]; - ++sigNum; - if ( f64NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float64_t f64NextQOutP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QOut[expNum] | f64P1[sigNum]; - ++sigNum; - if ( f64NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static const uint_fast64_t f64NumQInP2 = f64NumQIn * f64NumP2; -static const uint_fast64_t f64NumQOutP2 = f64NumQOut * f64NumP2; - -static float64_t f64NextQInP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QIn[expNum] | f64P2[sigNum]; - ++sigNum; - if ( f64NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float64_t f64NextQOutP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QOut[expNum] | f64P2[sigNum]; - ++sigNum; - if ( f64NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float64_t f64RandomQOutP3( void ) -{ - union ui64_f64 uZ; - - uZ.ui = - f64QOut[randomN_ui8( f64NumQOut )] - | ((f64P2[randomN_ui8( f64NumP2 )] + f64P2[randomN_ui8( f64NumP2 )]) - & UINT64_C( 0x000FFFFFFFFFFFFF )); - return uZ.f; - -} - -static float64_t f64RandomQOutPInf( void ) -{ - union ui64_f64 uZ; - - uZ.ui = - f64QOut[randomN_ui8( f64NumQOut )] - | (random_ui64() & UINT64_C( 0x000FFFFFFFFFFFFF )); - return uZ.f; - -} - -enum { f64NumQInfWeightMasks = 10 }; -static const uint64_t f64QInfWeightMasks[f64NumQInfWeightMasks] = { - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xBFF0000000000000 ), - UINT64_C( 0x9FF0000000000000 ), - UINT64_C( 0x8FF0000000000000 ), - UINT64_C( 0x87F0000000000000 ), - UINT64_C( 0x83F0000000000000 ), - UINT64_C( 0x81F0000000000000 ), - UINT64_C( 0x80F0000000000000 ), - UINT64_C( 0x8070000000000000 ) -}; -static const uint64_t f64QInfWeightOffsets[f64NumQInfWeightMasks] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x3000000000000000 ), - UINT64_C( 0x3800000000000000 ), - UINT64_C( 0x3C00000000000000 ), - UINT64_C( 0x3E00000000000000 ), - UINT64_C( 0x3F00000000000000 ), - UINT64_C( 0x3F80000000000000 ), - UINT64_C( 0x3FC0000000000000 ) -}; - -static float64_t f64RandomQInfP3( void ) -{ - int weightMaskNum; - union ui64_f64 uZ; - - weightMaskNum = randomN_ui8( f64NumQInfWeightMasks ); - uZ.ui = - (((uint_fast64_t) random_ui16()<<48 - & f64QInfWeightMasks[weightMaskNum]) - + f64QInfWeightOffsets[weightMaskNum]) - | ((f64P2[randomN_ui8( f64NumP2 )] + f64P2[randomN_ui8( f64NumP2 )]) - & UINT64_C( 0x000FFFFFFFFFFFFF )); - return uZ.f; - -} - -static float64_t f64RandomQInfPInf( void ) -{ - int weightMaskNum; - union ui64_f64 uZ; - - weightMaskNum = randomN_ui8( f64NumQInfWeightMasks ); - uZ.ui = - (random_ui64() - & (f64QInfWeightMasks[weightMaskNum] - | UINT64_C( 0x000FFFFFFFFFFFFF ))) - + f64QInfWeightOffsets[weightMaskNum]; - return uZ.f; - -} - -static float64_t f64Random( void ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - return f64RandomQOutP3(); - case 3: - return f64RandomQOutPInf(); - case 4: - case 5: - case 6: - return f64RandomQInfP3(); - case 7: - return f64RandomQInfPInf(); - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float64_t currentA, currentB, currentC; -static int subcase; - -float64_t genCases_f64_a, genCases_f64_b, genCases_f64_c; - -void genCases_f64_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f64NumQOutP1 : 2 * f64NumQOutP2; - genCases_done = false; - -} - -void genCases_f64_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - genCases_f64_a = f64Random(); - break; - case 2: - genCases_f64_a = f64NextQOutP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f64_a = f64Random(); - break; - case 1: - genCases_f64_a = f64NextQOutP2( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f64_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f64NumQInP1 * f64NumQInP1; - currentA = f64NextQInP1( &sequenceA ); - } else { - genCases_total = 2 * f64NumQInP2 * f64NumQInP2; - currentA = f64NextQInP2( &sequenceA ); - } - genCases_done = false; - -} - -void genCases_f64_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP1( &sequenceA ); - } - currentB = f64NextQInP1( &sequenceB ); - case 2: - case 4: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - break; - case 1: - genCases_f64_a = currentA; - genCases_f64_b = f64Random(); - break; - case 3: - genCases_f64_a = f64Random(); - genCases_f64_b = currentB; - break; - case 5: - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP2( &sequenceA ); - } - genCases_f64_a = currentA; - genCases_f64_b = f64NextQInP2( &sequenceB ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f64_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f64NumQInP1 * f64NumQInP1 * f64NumQInP1; - currentA = f64NextQInP1( &sequenceA ); - currentB = f64NextQInP1( &sequenceB ); - } else { - genCases_total = 2 * f64NumQInP2 * f64NumQInP2 * f64NumQInP2; - currentA = f64NextQInP2( &sequenceA ); - currentB = f64NextQInP2( &sequenceB ); - } - genCases_done = false; - -} - -void genCases_f64_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP1( &sequenceA ); - } - currentB = f64NextQInP1( &sequenceB ); - } - currentC = f64NextQInP1( &sequenceC ); - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = currentC; - break; - case 1: - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_f64_c = f64Random(); - break; - case 2: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 3: - genCases_f64_a = f64Random(); - genCases_f64_b = currentB; - genCases_f64_c = currentC; - break; - case 4: - genCases_f64_a = currentA; - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 5: - genCases_f64_a = f64Random(); - genCases_f64_b = currentB; - genCases_f64_c = f64Random(); - break; - case 6: - genCases_f64_a = currentA; - genCases_f64_b = f64Random(); - genCases_f64_c = currentC; - break; - case 7: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 8: - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_f64_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP2( &sequenceA ); - } - currentB = f64NextQInP2( &sequenceB ); - } - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_f64_c = f64NextQInP2( &sequenceC ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_i32.c b/addins/TestFloat-3e/source/genCases_i32.c deleted file mode 100644 index 6a2fcad68..000000000 --- a/addins/TestFloat-3e/source/genCases_i32.c +++ /dev/null @@ -1,362 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -union ui32_i32 { uint32_t ui; int32_t i; }; - -enum { i32NumP1 = 124 }; -static const uint32_t i32P1[i32NumP1] = { - 0x00000000, - 0x00000001, - 0x00000002, - 0x00000004, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000100, - 0x00000200, - 0x00000400, - 0x00000800, - 0x00001000, - 0x00002000, - 0x00004000, - 0x00008000, - 0x00010000, - 0x00020000, - 0x00040000, - 0x00080000, - 0x00100000, - 0x00200000, - 0x00400000, - 0x00800000, - 0x01000000, - 0x02000000, - 0x04000000, - 0x08000000, - 0x10000000, - 0x20000000, - 0x40000000, - 0x80000000, - 0xC0000000, - 0xE0000000, - 0xF0000000, - 0xF8000000, - 0xFC000000, - 0xFE000000, - 0xFF000000, - 0xFF800000, - 0xFFC00000, - 0xFFE00000, - 0xFFF00000, - 0xFFF80000, - 0xFFFC0000, - 0xFFFE0000, - 0xFFFF0000, - 0xFFFF8000, - 0xFFFFC000, - 0xFFFFE000, - 0xFFFFF000, - 0xFFFFF800, - 0xFFFFFC00, - 0xFFFFFE00, - 0xFFFFFF00, - 0xFFFFFF80, - 0xFFFFFFC0, - 0xFFFFFFE0, - 0xFFFFFFF0, - 0xFFFFFFF8, - 0xFFFFFFFC, - 0xFFFFFFFE, - 0xFFFFFFFF, - 0xFFFFFFFD, - 0xFFFFFFFB, - 0xFFFFFFF7, - 0xFFFFFFEF, - 0xFFFFFFDF, - 0xFFFFFFBF, - 0xFFFFFF7F, - 0xFFFFFEFF, - 0xFFFFFDFF, - 0xFFFFFBFF, - 0xFFFFF7FF, - 0xFFFFEFFF, - 0xFFFFDFFF, - 0xFFFFBFFF, - 0xFFFF7FFF, - 0xFFFEFFFF, - 0xFFFDFFFF, - 0xFFFBFFFF, - 0xFFF7FFFF, - 0xFFEFFFFF, - 0xFFDFFFFF, - 0xFFBFFFFF, - 0xFF7FFFFF, - 0xFEFFFFFF, - 0xFDFFFFFF, - 0xFBFFFFFF, - 0xF7FFFFFF, - 0xEFFFFFFF, - 0xDFFFFFFF, - 0xBFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F, - 0x00000007, - 0x00000003 -}; - -static int32_t i32NextP1( struct sequence *sequencePtr ) -{ - int termNum; - union ui32_i32 uZ; - - termNum = sequencePtr->term1Num; - uZ.ui = i32P1[termNum]; - ++termNum; - if ( i32NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return uZ.i; - -} - -static const int_fast32_t i32NumP2 = (i32NumP1 * i32NumP1 + i32NumP1) / 2; - -static int32_t i32NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - union ui32_i32 uZ; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - uZ.ui = i32P1[term1Num] + i32P1[term2Num]; - ++term2Num; - if ( i32NumP1 <= term2Num ) { - ++term1Num; - if ( i32NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return uZ.i; - -} - -static int32_t i32RandomP3( void ) -{ - union ui32_i32 uZ; - - uZ.ui = - i32P1[randomN_ui8( i32NumP1 )] + i32P1[randomN_ui8( i32NumP1 )] - + i32P1[randomN_ui8( i32NumP1 )]; - return uZ.i; - -} - -enum { i32NumPInfWeightMasks = 29 }; -static const uint32_t i32PInfWeightMasks[i32NumPInfWeightMasks] = { - 0xFFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F -}; -static const uint32_t i32PInfWeightOffsets[i32NumPInfWeightMasks] = { - 0x00000000, - 0xC0000000, - 0xE0000000, - 0xF0000000, - 0xF8000000, - 0xFC000000, - 0xFE000000, - 0xFF000000, - 0xFF800000, - 0xFFC00000, - 0xFFE00000, - 0xFFF00000, - 0xFFF80000, - 0xFFFC0000, - 0xFFFE0000, - 0xFFFF0000, - 0xFFFF8000, - 0xFFFFC000, - 0xFFFFE000, - 0xFFFFF000, - 0xFFFFF800, - 0xFFFFFC00, - 0xFFFFFE00, - 0xFFFFFF00, - 0xFFFFFF80, - 0xFFFFFFC0, - 0xFFFFFFE0, - 0xFFFFFFF0, - 0xFFFFFFF8 -}; - -static int32_t i32RandomPInf( void ) -{ - int weightMaskNum; - union ui32_i32 uZ; - - weightMaskNum = randomN_ui8( i32NumPInfWeightMasks ); - uZ.ui = - (random_ui32() & i32PInfWeightMasks[weightMaskNum]) - + i32PInfWeightOffsets[weightMaskNum]; - return uZ.i; - -} - -static struct sequence sequenceA; -static int subcase; - -int32_t genCases_i32_a; - -void genCases_i32_a_init( void ) -{ - - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * i32NumP1 : 2 * i32NumP2; - genCases_done = false; - -} - -void genCases_i32_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_i32_a = i32RandomP3(); - break; - case 1: - genCases_i32_a = i32RandomPInf(); - break; - case 2: - genCases_i32_a = i32NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_i32_a = i32RandomP3(); - break; - case 2: - genCases_i32_a = i32RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_i32_a = i32NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_i64.c b/addins/TestFloat-3e/source/genCases_i64.c deleted file mode 100644 index 82ff7236e..000000000 --- a/addins/TestFloat-3e/source/genCases_i64.c +++ /dev/null @@ -1,554 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -union ui64_i64 { uint64_t ui; int64_t i; }; - -enum { i64NumP1 = 252 }; -static const uint64_t i64P1[i64NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x0010000000000000 ), - UINT64_C( 0x0020000000000000 ), - UINT64_C( 0x0040000000000000 ), - UINT64_C( 0x0080000000000000 ), - UINT64_C( 0x0100000000000000 ), - UINT64_C( 0x0200000000000000 ), - UINT64_C( 0x0400000000000000 ), - UINT64_C( 0x0800000000000000 ), - UINT64_C( 0x1000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x4000000000000000 ), - UINT64_C( 0x8000000000000000 ), - UINT64_C( 0xC000000000000000 ), - UINT64_C( 0xE000000000000000 ), - UINT64_C( 0xF000000000000000 ), - UINT64_C( 0xF800000000000000 ), - UINT64_C( 0xFC00000000000000 ), - UINT64_C( 0xFE00000000000000 ), - UINT64_C( 0xFF00000000000000 ), - UINT64_C( 0xFF80000000000000 ), - UINT64_C( 0xFFC0000000000000 ), - UINT64_C( 0xFFE0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF8000000000000 ), - UINT64_C( 0xFFFC000000000000 ), - UINT64_C( 0xFFFE000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF800000000000 ), - UINT64_C( 0xFFFFC00000000000 ), - UINT64_C( 0xFFFFE00000000000 ), - UINT64_C( 0xFFFFF00000000000 ), - UINT64_C( 0xFFFFF80000000000 ), - UINT64_C( 0xFFFFFC0000000000 ), - UINT64_C( 0xFFFFFE0000000000 ), - UINT64_C( 0xFFFFFF0000000000 ), - UINT64_C( 0xFFFFFF8000000000 ), - UINT64_C( 0xFFFFFFC000000000 ), - UINT64_C( 0xFFFFFFE000000000 ), - UINT64_C( 0xFFFFFFF000000000 ), - UINT64_C( 0xFFFFFFF800000000 ), - UINT64_C( 0xFFFFFFFC00000000 ), - UINT64_C( 0xFFFFFFFE00000000 ), - UINT64_C( 0xFFFFFFFF00000000 ), - UINT64_C( 0xFFFFFFFF80000000 ), - UINT64_C( 0xFFFFFFFFC0000000 ), - UINT64_C( 0xFFFFFFFFE0000000 ), - UINT64_C( 0xFFFFFFFFF0000000 ), - UINT64_C( 0xFFFFFFFFF8000000 ), - UINT64_C( 0xFFFFFFFFFC000000 ), - UINT64_C( 0xFFFFFFFFFE000000 ), - UINT64_C( 0xFFFFFFFFFF000000 ), - UINT64_C( 0xFFFFFFFFFF800000 ), - UINT64_C( 0xFFFFFFFFFFC00000 ), - UINT64_C( 0xFFFFFFFFFFE00000 ), - UINT64_C( 0xFFFFFFFFFFF00000 ), - UINT64_C( 0xFFFFFFFFFFF80000 ), - UINT64_C( 0xFFFFFFFFFFFC0000 ), - UINT64_C( 0xFFFFFFFFFFFE0000 ), - UINT64_C( 0xFFFFFFFFFFFF0000 ), - UINT64_C( 0xFFFFFFFFFFFF8000 ), - UINT64_C( 0xFFFFFFFFFFFFC000 ), - UINT64_C( 0xFFFFFFFFFFFFE000 ), - UINT64_C( 0xFFFFFFFFFFFFF000 ), - UINT64_C( 0xFFFFFFFFFFFFF800 ), - UINT64_C( 0xFFFFFFFFFFFFFC00 ), - UINT64_C( 0xFFFFFFFFFFFFFE00 ), - UINT64_C( 0xFFFFFFFFFFFFFF00 ), - UINT64_C( 0xFFFFFFFFFFFFFF80 ), - UINT64_C( 0xFFFFFFFFFFFFFFC0 ), - UINT64_C( 0xFFFFFFFFFFFFFFE0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF8 ), - UINT64_C( 0xFFFFFFFFFFFFFFFC ), - UINT64_C( 0xFFFFFFFFFFFFFFFE ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFD ), - UINT64_C( 0xFFFFFFFFFFFFFFFB ), - UINT64_C( 0xFFFFFFFFFFFFFFF7 ), - UINT64_C( 0xFFFFFFFFFFFFFFEF ), - UINT64_C( 0xFFFFFFFFFFFFFFDF ), - UINT64_C( 0xFFFFFFFFFFFFFFBF ), - UINT64_C( 0xFFFFFFFFFFFFFF7F ), - UINT64_C( 0xFFFFFFFFFFFFFEFF ), - UINT64_C( 0xFFFFFFFFFFFFFDFF ), - UINT64_C( 0xFFFFFFFFFFFFFBFF ), - UINT64_C( 0xFFFFFFFFFFFFF7FF ), - UINT64_C( 0xFFFFFFFFFFFFEFFF ), - UINT64_C( 0xFFFFFFFFFFFFDFFF ), - UINT64_C( 0xFFFFFFFFFFFFBFFF ), - UINT64_C( 0xFFFFFFFFFFFF7FFF ), - UINT64_C( 0xFFFFFFFFFFFEFFFF ), - UINT64_C( 0xFFFFFFFFFFFDFFFF ), - UINT64_C( 0xFFFFFFFFFFFBFFFF ), - UINT64_C( 0xFFFFFFFFFFF7FFFF ), - UINT64_C( 0xFFFFFFFFFFEFFFFF ), - UINT64_C( 0xFFFFFFFFFFDFFFFF ), - UINT64_C( 0xFFFFFFFFFFBFFFFF ), - UINT64_C( 0xFFFFFFFFFF7FFFFF ), - UINT64_C( 0xFFFFFFFFFEFFFFFF ), - UINT64_C( 0xFFFFFFFFFDFFFFFF ), - UINT64_C( 0xFFFFFFFFFBFFFFFF ), - UINT64_C( 0xFFFFFFFFF7FFFFFF ), - UINT64_C( 0xFFFFFFFFEFFFFFFF ), - UINT64_C( 0xFFFFFFFFDFFFFFFF ), - UINT64_C( 0xFFFFFFFFBFFFFFFF ), - UINT64_C( 0xFFFFFFFF7FFFFFFF ), - UINT64_C( 0xFFFFFFFEFFFFFFFF ), - UINT64_C( 0xFFFFFFFDFFFFFFFF ), - UINT64_C( 0xFFFFFFFBFFFFFFFF ), - UINT64_C( 0xFFFFFFF7FFFFFFFF ), - UINT64_C( 0xFFFFFFEFFFFFFFFF ), - UINT64_C( 0xFFFFFFDFFFFFFFFF ), - UINT64_C( 0xFFFFFFBFFFFFFFFF ), - UINT64_C( 0xFFFFFF7FFFFFFFFF ), - UINT64_C( 0xFFFFFEFFFFFFFFFF ), - UINT64_C( 0xFFFFFDFFFFFFFFFF ), - UINT64_C( 0xFFFFFBFFFFFFFFFF ), - UINT64_C( 0xFFFFF7FFFFFFFFFF ), - UINT64_C( 0xFFFFEFFFFFFFFFFF ), - UINT64_C( 0xFFFFDFFFFFFFFFFF ), - UINT64_C( 0xFFFFBFFFFFFFFFFF ), - UINT64_C( 0xFFFF7FFFFFFFFFFF ), - UINT64_C( 0xFFFEFFFFFFFFFFFF ), - UINT64_C( 0xFFFDFFFFFFFFFFFF ), - UINT64_C( 0xFFFBFFFFFFFFFFFF ), - UINT64_C( 0xFFF7FFFFFFFFFFFF ), - UINT64_C( 0xFFEFFFFFFFFFFFFF ), - UINT64_C( 0xFFDFFFFFFFFFFFFF ), - UINT64_C( 0xFFBFFFFFFFFFFFFF ), - UINT64_C( 0xFF7FFFFFFFFFFFFF ), - UINT64_C( 0xFEFFFFFFFFFFFFFF ), - UINT64_C( 0xFDFFFFFFFFFFFFFF ), - UINT64_C( 0xFBFFFFFFFFFFFFFF ), - UINT64_C( 0xF7FFFFFFFFFFFFFF ), - UINT64_C( 0xEFFFFFFFFFFFFFFF ), - UINT64_C( 0xDFFFFFFFFFFFFFFF ), - UINT64_C( 0xBFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static int64_t i64NextP1( struct sequence *sequencePtr ) -{ - int termNum; - union ui64_i64 uZ; - - termNum = sequencePtr->term1Num; - uZ.ui = i64P1[termNum]; - ++termNum; - if ( i64NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return uZ.i; - -} - -static const int_fast64_t i64NumP2 = (i64NumP1 * i64NumP1 + i64NumP1) / 2; - -static int64_t i64NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - union ui64_i64 uZ; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - uZ.ui = i64P1[term1Num] + i64P1[term2Num]; - ++term2Num; - if ( i64NumP1 <= term2Num ) { - ++term1Num; - if ( i64NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return uZ.i; - -} - -static int64_t i64RandomP3( void ) -{ - union ui64_i64 uZ; - - uZ.ui = - i64P1[randomN_ui8( i64NumP1 )] + i64P1[randomN_ui8( i64NumP1 )] - + i64P1[randomN_ui8( i64NumP1 )]; - return uZ.i; - -} - -enum { i64NumPInfWeightMasks = 61 }; -static const uint64_t i64PInfWeightMasks[i64NumPInfWeightMasks] = { - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ) -}; -static const uint64_t i64PInfWeightOffsets[i64NumPInfWeightMasks] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0xC000000000000000 ), - UINT64_C( 0xE000000000000000 ), - UINT64_C( 0xF000000000000000 ), - UINT64_C( 0xF800000000000000 ), - UINT64_C( 0xFC00000000000000 ), - UINT64_C( 0xFE00000000000000 ), - UINT64_C( 0xFF00000000000000 ), - UINT64_C( 0xFF80000000000000 ), - UINT64_C( 0xFFC0000000000000 ), - UINT64_C( 0xFFE0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF8000000000000 ), - UINT64_C( 0xFFFC000000000000 ), - UINT64_C( 0xFFFE000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF800000000000 ), - UINT64_C( 0xFFFFC00000000000 ), - UINT64_C( 0xFFFFE00000000000 ), - UINT64_C( 0xFFFFF00000000000 ), - UINT64_C( 0xFFFFF80000000000 ), - UINT64_C( 0xFFFFFC0000000000 ), - UINT64_C( 0xFFFFFE0000000000 ), - UINT64_C( 0xFFFFFF0000000000 ), - UINT64_C( 0xFFFFFF8000000000 ), - UINT64_C( 0xFFFFFFC000000000 ), - UINT64_C( 0xFFFFFFE000000000 ), - UINT64_C( 0xFFFFFFF000000000 ), - UINT64_C( 0xFFFFFFF800000000 ), - UINT64_C( 0xFFFFFFFC00000000 ), - UINT64_C( 0xFFFFFFFE00000000 ), - UINT64_C( 0xFFFFFFFF00000000 ), - UINT64_C( 0xFFFFFFFF80000000 ), - UINT64_C( 0xFFFFFFFFC0000000 ), - UINT64_C( 0xFFFFFFFFE0000000 ), - UINT64_C( 0xFFFFFFFFF0000000 ), - UINT64_C( 0xFFFFFFFFF8000000 ), - UINT64_C( 0xFFFFFFFFFC000000 ), - UINT64_C( 0xFFFFFFFFFE000000 ), - UINT64_C( 0xFFFFFFFFFF000000 ), - UINT64_C( 0xFFFFFFFFFF800000 ), - UINT64_C( 0xFFFFFFFFFFC00000 ), - UINT64_C( 0xFFFFFFFFFFE00000 ), - UINT64_C( 0xFFFFFFFFFFF00000 ), - UINT64_C( 0xFFFFFFFFFFF80000 ), - UINT64_C( 0xFFFFFFFFFFFC0000 ), - UINT64_C( 0xFFFFFFFFFFFE0000 ), - UINT64_C( 0xFFFFFFFFFFFF0000 ), - UINT64_C( 0xFFFFFFFFFFFF8000 ), - UINT64_C( 0xFFFFFFFFFFFFC000 ), - UINT64_C( 0xFFFFFFFFFFFFE000 ), - UINT64_C( 0xFFFFFFFFFFFFF000 ), - UINT64_C( 0xFFFFFFFFFFFFF800 ), - UINT64_C( 0xFFFFFFFFFFFFFC00 ), - UINT64_C( 0xFFFFFFFFFFFFFE00 ), - UINT64_C( 0xFFFFFFFFFFFFFF00 ), - UINT64_C( 0xFFFFFFFFFFFFFF80 ), - UINT64_C( 0xFFFFFFFFFFFFFFC0 ), - UINT64_C( 0xFFFFFFFFFFFFFFE0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF8 ) -}; - -static int64_t i64RandomPInf( void ) -{ - int weightMaskNum; - union ui64_i64 uZ; - - weightMaskNum = randomN_ui8( i64NumPInfWeightMasks ); - uZ.ui = - (random_ui64() & i64PInfWeightMasks[weightMaskNum]) - + i64PInfWeightOffsets[weightMaskNum]; - return uZ.i; - -} - -static struct sequence sequenceA; -static int subcase; - -int64_t genCases_i64_a; - -void genCases_i64_a_init( void ) -{ - - sequenceA.term2Num = 0; - sequenceA.term1Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * i64NumP1 : 2 * i64NumP2; - genCases_done = false; - -} - -void genCases_i64_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_i64_a = i64RandomP3(); - break; - case 1: - genCases_i64_a = i64RandomPInf(); - break; - case 2: - genCases_i64_a = i64NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_i64_a = i64RandomP3(); - break; - case 2: - genCases_i64_a = i64RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_i64_a = i64NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_ui32.c b/addins/TestFloat-3e/source/genCases_ui32.c deleted file mode 100644 index 1298ff6a1..000000000 --- a/addins/TestFloat-3e/source/genCases_ui32.c +++ /dev/null @@ -1,323 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -enum { ui32NumP1 = 124 }; -static const uint32_t ui32P1[ui32NumP1] = { - 0x00000000, - 0x00000001, - 0x00000002, - 0x00000004, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000100, - 0x00000200, - 0x00000400, - 0x00000800, - 0x00001000, - 0x00002000, - 0x00004000, - 0x00008000, - 0x00010000, - 0x00020000, - 0x00040000, - 0x00080000, - 0x00100000, - 0x00200000, - 0x00400000, - 0x00800000, - 0x01000000, - 0x02000000, - 0x04000000, - 0x08000000, - 0x10000000, - 0x20000000, - 0x40000000, - 0x80000000, - 0xC0000000, - 0xE0000000, - 0xF0000000, - 0xF8000000, - 0xFC000000, - 0xFE000000, - 0xFF000000, - 0xFF800000, - 0xFFC00000, - 0xFFE00000, - 0xFFF00000, - 0xFFF80000, - 0xFFFC0000, - 0xFFFE0000, - 0xFFFF0000, - 0xFFFF8000, - 0xFFFFC000, - 0xFFFFE000, - 0xFFFFF000, - 0xFFFFF800, - 0xFFFFFC00, - 0xFFFFFE00, - 0xFFFFFF00, - 0xFFFFFF80, - 0xFFFFFFC0, - 0xFFFFFFE0, - 0xFFFFFFF0, - 0xFFFFFFF8, - 0xFFFFFFFC, - 0xFFFFFFFE, - 0xFFFFFFFF, - 0xFFFFFFFD, - 0xFFFFFFFB, - 0xFFFFFFF7, - 0xFFFFFFEF, - 0xFFFFFFDF, - 0xFFFFFFBF, - 0xFFFFFF7F, - 0xFFFFFEFF, - 0xFFFFFDFF, - 0xFFFFFBFF, - 0xFFFFF7FF, - 0xFFFFEFFF, - 0xFFFFDFFF, - 0xFFFFBFFF, - 0xFFFF7FFF, - 0xFFFEFFFF, - 0xFFFDFFFF, - 0xFFFBFFFF, - 0xFFF7FFFF, - 0xFFEFFFFF, - 0xFFDFFFFF, - 0xFFBFFFFF, - 0xFF7FFFFF, - 0xFEFFFFFF, - 0xFDFFFFFF, - 0xFBFFFFFF, - 0xF7FFFFFF, - 0xEFFFFFFF, - 0xDFFFFFFF, - 0xBFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F, - 0x00000007, - 0x00000003 -}; - -static uint32_t ui32NextP1( struct sequence *sequencePtr ) -{ - int termNum; - uint32_t z; - - termNum = sequencePtr->term1Num; - z = ui32P1[termNum]; - ++termNum; - if ( ui32NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return z; - -} - -static const uint_fast32_t ui32NumP2 = (ui32NumP1 * ui32NumP1 + ui32NumP1) / 2; - -static uint32_t ui32NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - uint32_t z; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - z = ui32P1[term1Num] + ui32P1[term2Num]; - ++term2Num; - if ( ui32NumP1 <= term2Num ) { - ++term1Num; - if ( ui32NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return z; - -} - -static uint32_t ui32RandomP3( void ) -{ - - return - ui32P1[randomN_ui8( ui32NumP1 )] + ui32P1[randomN_ui8( ui32NumP1 )] - + ui32P1[randomN_ui8( ui32NumP1 )]; - -} - -enum { ui32NumPInfWeightMasks = 29 }; -static const uint32_t ui32PInfWeightMasks[ui32NumPInfWeightMasks] = { - 0xFFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F -}; - -static uint32_t ui32RandomPInf( void ) -{ - int weightMaskNum; - - weightMaskNum = randomN_ui8( ui32NumPInfWeightMasks ); - return random_ui32() & ui32PInfWeightMasks[weightMaskNum]; - -} - -static struct sequence sequenceA; -static int subcase; - -uint32_t genCases_ui32_a; - -void genCases_ui32_a_init( void ) -{ - - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * ui32NumP1 : 2 * ui32NumP2; - genCases_done = false; - -} - -void genCases_ui32_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_ui32_a = ui32RandomP3(); - break; - case 1: - genCases_ui32_a = ui32RandomPInf(); - break; - case 2: - genCases_ui32_a = ui32NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_ui32_a = ui32RandomP3(); - break; - case 2: - genCases_ui32_a = ui32RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_ui32_a = ui32NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_ui64.c b/addins/TestFloat-3e/source/genCases_ui64.c deleted file mode 100644 index 42d44a467..000000000 --- a/addins/TestFloat-3e/source/genCases_ui64.c +++ /dev/null @@ -1,483 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -enum { ui64NumP1 = 252 }; -static const uint64_t ui64P1[ui64NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x0010000000000000 ), - UINT64_C( 0x0020000000000000 ), - UINT64_C( 0x0040000000000000 ), - UINT64_C( 0x0080000000000000 ), - UINT64_C( 0x0100000000000000 ), - UINT64_C( 0x0200000000000000 ), - UINT64_C( 0x0400000000000000 ), - UINT64_C( 0x0800000000000000 ), - UINT64_C( 0x1000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x4000000000000000 ), - UINT64_C( 0x8000000000000000 ), - UINT64_C( 0xC000000000000000 ), - UINT64_C( 0xE000000000000000 ), - UINT64_C( 0xF000000000000000 ), - UINT64_C( 0xF800000000000000 ), - UINT64_C( 0xFC00000000000000 ), - UINT64_C( 0xFE00000000000000 ), - UINT64_C( 0xFF00000000000000 ), - UINT64_C( 0xFF80000000000000 ), - UINT64_C( 0xFFC0000000000000 ), - UINT64_C( 0xFFE0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF8000000000000 ), - UINT64_C( 0xFFFC000000000000 ), - UINT64_C( 0xFFFE000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF800000000000 ), - UINT64_C( 0xFFFFC00000000000 ), - UINT64_C( 0xFFFFE00000000000 ), - UINT64_C( 0xFFFFF00000000000 ), - UINT64_C( 0xFFFFF80000000000 ), - UINT64_C( 0xFFFFFC0000000000 ), - UINT64_C( 0xFFFFFE0000000000 ), - UINT64_C( 0xFFFFFF0000000000 ), - UINT64_C( 0xFFFFFF8000000000 ), - UINT64_C( 0xFFFFFFC000000000 ), - UINT64_C( 0xFFFFFFE000000000 ), - UINT64_C( 0xFFFFFFF000000000 ), - UINT64_C( 0xFFFFFFF800000000 ), - UINT64_C( 0xFFFFFFFC00000000 ), - UINT64_C( 0xFFFFFFFE00000000 ), - UINT64_C( 0xFFFFFFFF00000000 ), - UINT64_C( 0xFFFFFFFF80000000 ), - UINT64_C( 0xFFFFFFFFC0000000 ), - UINT64_C( 0xFFFFFFFFE0000000 ), - UINT64_C( 0xFFFFFFFFF0000000 ), - UINT64_C( 0xFFFFFFFFF8000000 ), - UINT64_C( 0xFFFFFFFFFC000000 ), - UINT64_C( 0xFFFFFFFFFE000000 ), - UINT64_C( 0xFFFFFFFFFF000000 ), - UINT64_C( 0xFFFFFFFFFF800000 ), - UINT64_C( 0xFFFFFFFFFFC00000 ), - UINT64_C( 0xFFFFFFFFFFE00000 ), - UINT64_C( 0xFFFFFFFFFFF00000 ), - UINT64_C( 0xFFFFFFFFFFF80000 ), - UINT64_C( 0xFFFFFFFFFFFC0000 ), - UINT64_C( 0xFFFFFFFFFFFE0000 ), - UINT64_C( 0xFFFFFFFFFFFF0000 ), - UINT64_C( 0xFFFFFFFFFFFF8000 ), - UINT64_C( 0xFFFFFFFFFFFFC000 ), - UINT64_C( 0xFFFFFFFFFFFFE000 ), - UINT64_C( 0xFFFFFFFFFFFFF000 ), - UINT64_C( 0xFFFFFFFFFFFFF800 ), - UINT64_C( 0xFFFFFFFFFFFFFC00 ), - UINT64_C( 0xFFFFFFFFFFFFFE00 ), - UINT64_C( 0xFFFFFFFFFFFFFF00 ), - UINT64_C( 0xFFFFFFFFFFFFFF80 ), - UINT64_C( 0xFFFFFFFFFFFFFFC0 ), - UINT64_C( 0xFFFFFFFFFFFFFFE0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF8 ), - UINT64_C( 0xFFFFFFFFFFFFFFFC ), - UINT64_C( 0xFFFFFFFFFFFFFFFE ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFD ), - UINT64_C( 0xFFFFFFFFFFFFFFFB ), - UINT64_C( 0xFFFFFFFFFFFFFFF7 ), - UINT64_C( 0xFFFFFFFFFFFFFFEF ), - UINT64_C( 0xFFFFFFFFFFFFFFDF ), - UINT64_C( 0xFFFFFFFFFFFFFFBF ), - UINT64_C( 0xFFFFFFFFFFFFFF7F ), - UINT64_C( 0xFFFFFFFFFFFFFEFF ), - UINT64_C( 0xFFFFFFFFFFFFFDFF ), - UINT64_C( 0xFFFFFFFFFFFFFBFF ), - UINT64_C( 0xFFFFFFFFFFFFF7FF ), - UINT64_C( 0xFFFFFFFFFFFFEFFF ), - UINT64_C( 0xFFFFFFFFFFFFDFFF ), - UINT64_C( 0xFFFFFFFFFFFFBFFF ), - UINT64_C( 0xFFFFFFFFFFFF7FFF ), - UINT64_C( 0xFFFFFFFFFFFEFFFF ), - UINT64_C( 0xFFFFFFFFFFFDFFFF ), - UINT64_C( 0xFFFFFFFFFFFBFFFF ), - UINT64_C( 0xFFFFFFFFFFF7FFFF ), - UINT64_C( 0xFFFFFFFFFFEFFFFF ), - UINT64_C( 0xFFFFFFFFFFDFFFFF ), - UINT64_C( 0xFFFFFFFFFFBFFFFF ), - UINT64_C( 0xFFFFFFFFFF7FFFFF ), - UINT64_C( 0xFFFFFFFFFEFFFFFF ), - UINT64_C( 0xFFFFFFFFFDFFFFFF ), - UINT64_C( 0xFFFFFFFFFBFFFFFF ), - UINT64_C( 0xFFFFFFFFF7FFFFFF ), - UINT64_C( 0xFFFFFFFFEFFFFFFF ), - UINT64_C( 0xFFFFFFFFDFFFFFFF ), - UINT64_C( 0xFFFFFFFFBFFFFFFF ), - UINT64_C( 0xFFFFFFFF7FFFFFFF ), - UINT64_C( 0xFFFFFFFEFFFFFFFF ), - UINT64_C( 0xFFFFFFFDFFFFFFFF ), - UINT64_C( 0xFFFFFFFBFFFFFFFF ), - UINT64_C( 0xFFFFFFF7FFFFFFFF ), - UINT64_C( 0xFFFFFFEFFFFFFFFF ), - UINT64_C( 0xFFFFFFDFFFFFFFFF ), - UINT64_C( 0xFFFFFFBFFFFFFFFF ), - UINT64_C( 0xFFFFFF7FFFFFFFFF ), - UINT64_C( 0xFFFFFEFFFFFFFFFF ), - UINT64_C( 0xFFFFFDFFFFFFFFFF ), - UINT64_C( 0xFFFFFBFFFFFFFFFF ), - UINT64_C( 0xFFFFF7FFFFFFFFFF ), - UINT64_C( 0xFFFFEFFFFFFFFFFF ), - UINT64_C( 0xFFFFDFFFFFFFFFFF ), - UINT64_C( 0xFFFFBFFFFFFFFFFF ), - UINT64_C( 0xFFFF7FFFFFFFFFFF ), - UINT64_C( 0xFFFEFFFFFFFFFFFF ), - UINT64_C( 0xFFFDFFFFFFFFFFFF ), - UINT64_C( 0xFFFBFFFFFFFFFFFF ), - UINT64_C( 0xFFF7FFFFFFFFFFFF ), - UINT64_C( 0xFFEFFFFFFFFFFFFF ), - UINT64_C( 0xFFDFFFFFFFFFFFFF ), - UINT64_C( 0xFFBFFFFFFFFFFFFF ), - UINT64_C( 0xFF7FFFFFFFFFFFFF ), - UINT64_C( 0xFEFFFFFFFFFFFFFF ), - UINT64_C( 0xFDFFFFFFFFFFFFFF ), - UINT64_C( 0xFBFFFFFFFFFFFFFF ), - UINT64_C( 0xF7FFFFFFFFFFFFFF ), - UINT64_C( 0xEFFFFFFFFFFFFFFF ), - UINT64_C( 0xDFFFFFFFFFFFFFFF ), - UINT64_C( 0xBFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static uint64_t ui64NextP1( struct sequence *sequencePtr ) -{ - int termNum; - uint64_t z; - - termNum = sequencePtr->term1Num; - z = ui64P1[termNum]; - ++termNum; - if ( ui64NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return z; - -} - -static const uint_fast64_t ui64NumP2 = (ui64NumP1 * ui64NumP1 + ui64NumP1) / 2; - -static uint64_t ui64NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - uint64_t z; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - z = ui64P1[term1Num] + ui64P1[term2Num]; - ++term2Num; - if ( ui64NumP1 <= term2Num ) { - ++term1Num; - if ( ui64NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return z; - -} - -static uint64_t ui64RandomP3( void ) -{ - - return - ui64P1[randomN_ui8( ui64NumP1 )] + ui64P1[randomN_ui8( ui64NumP1 )] - + ui64P1[randomN_ui8( ui64NumP1 )]; - -} - -enum { ui64NumPInfWeightMasks = 61 }; -static const uint64_t ui64PInfWeightMasks[ui64NumPInfWeightMasks] = { - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ) -}; - -static uint64_t ui64RandomPInf( void ) -{ - int weightMaskNum; - - weightMaskNum = randomN_ui8( ui64NumPInfWeightMasks ); - return random_ui64() & ui64PInfWeightMasks[weightMaskNum]; - -} - -static struct sequence sequenceA; -static int subcase; - -uint64_t genCases_ui64_a; - -void genCases_ui64_a_init( void ) -{ - - sequenceA.term2Num = 0; - sequenceA.term1Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * ui64NumP1 : 2 * ui64NumP2; - genCases_done = false; - -} - -void genCases_ui64_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_ui64_a = ui64RandomP3(); - break; - case 1: - genCases_ui64_a = ui64RandomPInf(); - break; - case 2: - genCases_ui64_a = ui64NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_ui64_a = ui64RandomP3(); - break; - case 2: - genCases_ui64_a = ui64RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_ui64_a = ui64NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_writeTestsTotal.c b/addins/TestFloat-3e/source/genCases_writeTestsTotal.c deleted file mode 100644 index 715a7cc2d..000000000 --- a/addins/TestFloat-3e/source/genCases_writeTestsTotal.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "genCases.h" - -void genCases_writeTestsTotal( bool forever ) -{ - - if ( forever ) { - fputs( "Unbounded tests.\n", stderr ); - } else { - if ( 2000000000 <= genCases_total ) { - fprintf( - stderr, - "\r%lu%09lu tests total.\n", - (long unsigned) (genCases_total / 1000000000), - (long unsigned) (genCases_total % 1000000000) - ); - } else { - fprintf( - stderr, "\r%lu tests total.\n", (long unsigned) genCases_total - ); - } - } - -} - diff --git a/addins/TestFloat-3e/source/genLoops.c b/addins/TestFloat-3e/source/genLoops.c deleted file mode 100644 index 6082fc24e..000000000 --- a/addins/TestFloat-3e/source/genLoops.c +++ /dev/null @@ -1,2890 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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 -#include -#include -#include -#include "platform.h" -#include "uint128.h" -#include "fail.h" -#include "softfloat.h" -#include "genCases.h" -#include "writeHex.h" -#include "genLoops.h" - -volatile sig_atomic_t genLoops_stop = false; - -bool genLoops_forever; -bool genLoops_givenCount; -uint_fast64_t genLoops_count; -uint_fast8_t *genLoops_trueFlagsPtr; - -#ifdef FLOAT16 -union ui16_f16 { uint16_t ui; float16_t f; }; -#endif -union ui32_f32 { uint32_t ui; float32_t f; }; -#ifdef FLOAT64 -union ui64_f64 { uint64_t ui; float64_t f; }; -#endif - -static void checkEnoughCases( void ) -{ - - if ( genLoops_givenCount && (genLoops_count < genCases_total) ) { - if ( 2000000000 <= genCases_total ) { - fail( - "Too few cases; minimum is %lu%09lu", - (unsigned long) (genCases_total / 1000000000), - (unsigned long) (genCases_total % 1000000000) - ); - } else { - fail( - "Too few cases; minimum is %lu", (unsigned long) genCases_total - ); - } - } - -} - -static void writeGenOutput_flags( uint_fast8_t flags ) -{ - uint_fast8_t commonFlags; - - commonFlags = 0; - if ( flags & softfloat_flag_invalid ) commonFlags |= 0x10; - if ( flags & softfloat_flag_infinite ) commonFlags |= 0x08; - if ( flags & softfloat_flag_overflow ) commonFlags |= 0x04; - if ( flags & softfloat_flag_underflow ) commonFlags |= 0x02; - if ( flags & softfloat_flag_inexact ) commonFlags |= 0x01; - writeHex_ui8( commonFlags, '\n' ); - -} - -static bool writeGenOutputs_bool( bool z, uint_fast8_t flags ) -{ - - writeHex_bool( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#ifdef FLOAT16 - -static bool writeGenOutputs_ui16( uint_fast16_t z, uint_fast8_t flags ) -{ - - writeHex_ui16( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#endif - -static bool writeGenOutputs_ui32( uint_fast32_t z, uint_fast8_t flags ) -{ - - writeHex_ui32( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -static bool writeGenOutputs_ui64( uint_fast64_t z, uint_fast8_t flags ) -{ - - writeHex_ui64( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#ifdef EXTFLOAT80 - -static void writeHex_uiExtF80M( const extFloat80_t *aPtr, char sepChar ) -{ - const struct extFloat80M *aSPtr; - - aSPtr = (const struct extFloat80M *) aPtr; - writeHex_ui16( aSPtr->signExp, 0 ); - writeHex_ui64( aSPtr->signif, sepChar ); - -} - -static -bool writeGenOutputs_extF80M( const extFloat80_t *aPtr, uint_fast8_t flags ) -{ - - writeHex_uiExtF80M( aPtr, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#endif - -#ifdef FLOAT128 - -static void writeHex_uiF128M( const float128_t *aPtr, char sepChar ) -{ - const struct uint128 *uiAPtr; - - uiAPtr = (const struct uint128 *) aPtr; - writeHex_ui64( uiAPtr->v64, 0 ); - writeHex_ui64( uiAPtr->v0, sepChar ); - -} - -static bool writeGenOutputs_f128M( const float128_t *aPtr, uint_fast8_t flags ) -{ - - writeHex_uiF128M( aPtr, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#endif - -void gen_a_ui32( void ) -{ - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_a_ui64( void ) -{ - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_a_i32( void ) -{ - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_a_i64( void ) -{ - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#ifdef FLOAT16 - -void gen_a_f16( void ) -{ - union ui16_f16 uA; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f16( void ) -{ - union ui16_f16 u; - - genCases_f16_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_ab_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f16( void ) -{ - union ui16_f16 u; - - genCases_f16_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_abc_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_c; - writeHex_ui16( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -void gen_a_f32( void ) -{ - union ui32_f32 uA; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f32( void ) -{ - union ui32_f32 u; - - genCases_f32_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_ab_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f32( void ) -{ - union ui32_f32 u; - - genCases_f32_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_abc_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_c; - writeHex_ui32( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#ifdef FLOAT64 - -void gen_a_f64( void ) -{ - union ui64_f64 uA; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f64( void ) -{ - union ui64_f64 u; - - genCases_f64_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_ab_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f64( void ) -{ - union ui64_f64 u; - - genCases_f64_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_abc_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_c; - writeHex_ui64( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_extF80( void ) -{ - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_extF80( void ) -{ - - genCases_extF80_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_ab_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_extF80( void ) -{ - - genCases_extF80_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_abc_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_c, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f128( void ) -{ - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f128( void ) -{ - - genCases_f128_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_ab_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f128( void ) -{ - - genCases_f128_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_abc_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - writeHex_uiF128M( &genCases_f128_c, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_ui32_z_f16( float16_t trueFunction( uint32_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_ui32_z_f32( float32_t trueFunction( uint32_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_ui32_z_f64( float64_t trueFunction( uint32_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_ui32_z_extF80( void trueFunction( uint32_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_ui32_z_f128( void trueFunction( uint32_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_ui64_z_f16( float16_t trueFunction( uint64_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_ui64_z_f32( float32_t trueFunction( uint64_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_ui64_z_f64( float64_t trueFunction( uint64_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_ui64_z_extF80( void trueFunction( uint64_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_ui64_z_f128( void trueFunction( uint64_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_i32_z_f16( float16_t trueFunction( int32_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_i32_z_f32( float32_t trueFunction( int32_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_i32_z_f64( float64_t trueFunction( int32_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_i32_z_extF80( void trueFunction( int32_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_i32_z_f128( void trueFunction( int32_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_i64_z_f16( float16_t trueFunction( int64_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_i64_z_f32( float32_t trueFunction( int64_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_i64_z_f64( float64_t trueFunction( int64_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_i64_z_extF80( void trueFunction( int64_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_i64_z_f128( void trueFunction( int64_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void - gen_a_f16_z_ui32_rx( - uint_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_ui64_rx( - uint_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i32_rx( - int_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i64_rx( - int_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_ui32_x( - uint_fast32_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_ui64_x( - uint_fast64_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i32_x( int_fast32_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i64_x( int_fast64_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void gen_a_f16_z_f32( float32_t trueFunction( float16_t ) ) -{ - union ui16_f16 uA; - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f16_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_f16_z_f64( float64_t trueFunction( float16_t ) ) -{ - union ui16_f16 uA; - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f16_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_f16_z_extF80( void trueFunction( float16_t, extFloat80_t * ) ) -{ - union ui16_f16 uA; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f16_z_f128( void trueFunction( float16_t, float128_t * ) ) -{ - union ui16_f16 uA; - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f16( float16_t trueFunction( float16_t ) ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void - gen_az_f16_rx( - float16_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void gen_abz_f16( float16_t trueFunction( float16_t, float16_t ) ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_ab_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void gen_abcz_f16( float16_t trueFunction( float16_t, float16_t, float16_t ) ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_abc_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_c; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a, genCases_f16_b, genCases_f16_c ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void gen_ab_f16_z_bool( bool trueFunction( float16_t, float16_t ) ) -{ - union ui16_f16 u; - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f16_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_ab_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - -void - gen_a_f32_z_ui32_rx( - uint_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_ui64_rx( - uint_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i32_rx( - int_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i64_rx( - int_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_ui32_x( - uint_fast32_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_ui64_x( - uint_fast64_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i32_x( int_fast32_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i64_x( int_fast64_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_f32_z_f16( float16_t trueFunction( float32_t ) ) -{ - union ui32_f32 uA; - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT64 - -void gen_a_f32_z_f64( float64_t trueFunction( float32_t ) ) -{ - union ui32_f32 uA; - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_f32_z_extF80( void trueFunction( float32_t, extFloat80_t * ) ) -{ - union ui32_f32 uA; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f32_z_f128( void trueFunction( float32_t, float128_t * ) ) -{ - union ui32_f32 uA; - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f32( float32_t trueFunction( float32_t ) ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void - gen_az_f32_rx( - float32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void gen_abz_f32( float32_t trueFunction( float32_t, float32_t ) ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_ab_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void gen_abcz_f32( float32_t trueFunction( float32_t, float32_t, float32_t ) ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_abc_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_c; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a, genCases_f32_b, genCases_f32_c ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void gen_ab_f32_z_bool( bool trueFunction( float32_t, float32_t ) ) -{ - union ui32_f32 u; - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f32_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_ab_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void - gen_a_f64_z_ui32_rx( - uint_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_ui64_rx( - uint_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i32_rx( - int_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i64_rx( - int_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_ui32_x( - uint_fast32_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_ui64_x( - uint_fast64_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i32_x( int_fast32_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i64_x( int_fast64_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_f64_z_f16( float16_t trueFunction( float64_t ) ) -{ - union ui64_f64 uA; - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_f64_z_f32( float32_t trueFunction( float64_t ) ) -{ - union ui64_f64 uA; - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef EXTFLOAT80 - -void gen_a_f64_z_extF80( void trueFunction( float64_t, extFloat80_t * ) ) -{ - union ui64_f64 uA; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f64_z_f128( void trueFunction( float64_t, float128_t * ) ) -{ - union ui64_f64 uA; - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f64( float64_t trueFunction( float64_t ) ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void - gen_az_f64_rx( - float64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void gen_abz_f64( float64_t trueFunction( float64_t, float64_t ) ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_ab_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void gen_abcz_f64( float64_t trueFunction( float64_t, float64_t, float64_t ) ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_abc_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_c; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a, genCases_f64_b, genCases_f64_c ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void gen_ab_f64_z_bool( bool trueFunction( float64_t, float64_t ) ) -{ - union ui64_f64 u; - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f64_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_ab_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void - gen_a_extF80_z_ui32_rx( - uint_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_ui64_rx( - uint_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i32_rx( - int_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i64_rx( - int_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_ui32_x( - uint_fast32_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_ui64_x( - uint_fast64_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i32_x( - int_fast32_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i64_x( - int_fast64_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_extF80_z_f16( float16_t trueFunction( const extFloat80_t * ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_extF80_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_extF80_z_f32( float32_t trueFunction( const extFloat80_t * ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_extF80_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_extF80_z_f64( float64_t trueFunction( const extFloat80_t * ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_extF80_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void - gen_a_extF80_z_f128( void trueFunction( const extFloat80_t *, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_extF80( void trueFunction( const extFloat80_t *, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_az_extF80_rx( - void - trueFunction( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, roundingMode, exact, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_abz_extF80( - void - trueFunction( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) - ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_ab_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &genCases_extF80_b, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_ab_extF80_z_bool( - bool trueFunction( const extFloat80_t *, const extFloat80_t * ) ) -{ - bool trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_ab_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, &genCases_extF80_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void - gen_a_f128_z_ui32_rx( - uint_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_ui64_rx( - uint_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i32_rx( - int_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i64_rx( - int_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_ui32_x( - uint_fast32_t trueFunction( const float128_t *, bool ), bool exact ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_ui64_x( - uint_fast64_t trueFunction( const float128_t *, bool ), bool exact ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i32_x( - int_fast32_t trueFunction( const float128_t *, bool ), bool exact ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i64_x( - int_fast64_t trueFunction( const float128_t *, bool ), bool exact ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_f128_z_f16( float16_t trueFunction( const float128_t * ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_f128_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_f128_z_f32( float32_t trueFunction( const float128_t * ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_f128_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_f128_z_f64( float64_t trueFunction( const float128_t * ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_f128_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void - gen_a_f128_z_extF80( void trueFunction( const float128_t *, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f128( void trueFunction( const float128_t *, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_az_f128_rx( - void trueFunction( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, roundingMode, exact, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_abz_f128( - void trueFunction( const float128_t *, const float128_t *, float128_t * ) - ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_ab_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &genCases_f128_b, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_abcz_f128( - void - trueFunction( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_abc_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - writeHex_uiF128M( &genCases_f128_c, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_ab_f128_z_bool( - bool trueFunction( const float128_t *, const float128_t * ) ) -{ - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f128_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_ab_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, &genCases_f128_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genLoops.h b/addins/TestFloat-3e/source/genLoops.h deleted file mode 100644 index f574b7757..000000000 --- a/addins/TestFloat-3e/source/genLoops.h +++ /dev/null @@ -1,354 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include -#include -#include "softfloat.h" - -extern volatile sig_atomic_t genLoops_stop; - -extern bool genLoops_forever; -extern bool genLoops_givenCount; -extern uint_fast64_t genLoops_count; -extern uint_fast8_t *genLoops_trueFlagsPtr; - -void gen_a_ui32( void ); -void gen_a_ui64( void ); -void gen_a_i32( void ); -void gen_a_i64( void ); -#ifdef FLOAT16 -void gen_a_f16( void ); -void gen_ab_f16( void ); -void gen_abc_f16( void ); -#endif -void gen_a_f32( void ); -void gen_ab_f32( void ); -void gen_abc_f32( void ); -#ifdef FLOAT64 -void gen_a_f64( void ); -void gen_ab_f64( void ); -void gen_abc_f64( void ); -#endif -#ifdef EXTFLOAT80 -void gen_a_extF80( void ); -void gen_ab_extF80( void ); -void gen_abc_extF80( void ); -#endif -#ifdef FLOAT128 -void gen_a_f128( void ); -void gen_ab_f128( void ); -void gen_abc_f128( void ); -#endif - -#ifdef FLOAT16 -void gen_a_ui32_z_f16( float16_t ( uint32_t ) ); -#endif -void gen_a_ui32_z_f32( float32_t ( uint32_t ) ); -#ifdef FLOAT64 -void gen_a_ui32_z_f64( float64_t ( uint32_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_ui32_z_extF80( void ( uint32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_ui32_z_f128( void ( uint32_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void gen_a_ui64_z_f16( float16_t ( uint64_t ) ); -#endif -void gen_a_ui64_z_f32( float32_t ( uint64_t ) ); -#ifdef FLOAT64 -void gen_a_ui64_z_f64( float64_t ( uint64_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_ui64_z_extF80( void ( uint64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_ui64_z_f128( void ( uint64_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void gen_a_i32_z_f16( float16_t ( int32_t ) ); -#endif -void gen_a_i32_z_f32( float32_t ( int32_t ) ); -#ifdef FLOAT64 -void gen_a_i32_z_f64( float64_t ( int32_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_i32_z_extF80( void ( int32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_i32_z_f128( void ( int32_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void gen_a_i64_z_f16( float16_t ( int64_t ) ); -#endif -void gen_a_i64_z_f32( float32_t ( int64_t ) ); -#ifdef FLOAT64 -void gen_a_i64_z_f64( float64_t ( int64_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_i64_z_extF80( void ( int64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_i64_z_f128( void ( int64_t, float128_t * ) ); -#endif - -#ifdef FLOAT16 -void - gen_a_f16_z_ui32_rx( - uint_fast32_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f16_z_ui64_rx( - uint_fast64_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f16_z_i32_rx( - int_fast32_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f16_z_i64_rx( - int_fast64_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_a_f16_z_ui32_x( uint_fast32_t ( float16_t, bool ), bool ); -void gen_a_f16_z_ui64_x( uint_fast64_t ( float16_t, bool ), bool ); -void gen_a_f16_z_i32_x( int_fast32_t ( float16_t, bool ), bool ); -void gen_a_f16_z_i64_x( int_fast64_t ( float16_t, bool ), bool ); -void gen_a_f16_z_f32( float32_t ( float16_t ) ); -#ifdef FLOAT64 -void gen_a_f16_z_f64( float64_t ( float16_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_f16_z_extF80( void ( float16_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_f16_z_f128( void ( float16_t, float128_t * ) ); -#endif -void gen_az_f16( float16_t ( float16_t ) ); -void - gen_az_f16_rx( - float16_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_abz_f16( float16_t ( float16_t, float16_t ) ); -void gen_abcz_f16( float16_t ( float16_t, float16_t, float16_t ) ); -void gen_ab_f16_z_bool( bool ( float16_t, float16_t ) ); -#endif - -void - gen_a_f32_z_ui32_rx( - uint_fast32_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f32_z_ui64_rx( - uint_fast64_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f32_z_i32_rx( - int_fast32_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f32_z_i64_rx( - int_fast64_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_a_f32_z_ui32_x( uint_fast32_t ( float32_t, bool ), bool ); -void gen_a_f32_z_ui64_x( uint_fast64_t ( float32_t, bool ), bool ); -void gen_a_f32_z_i32_x( int_fast32_t ( float32_t, bool ), bool ); -void gen_a_f32_z_i64_x( int_fast64_t ( float32_t, bool ), bool ); -#ifdef FLOAT16 -void gen_a_f32_z_f16( float16_t ( float32_t ) ); -#endif -#ifdef FLOAT64 -void gen_a_f32_z_f64( float64_t ( float32_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_f32_z_extF80( void ( float32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_f32_z_f128( void ( float32_t, float128_t * ) ); -#endif -void gen_az_f32( float32_t ( float32_t ) ); -void - gen_az_f32_rx( - float32_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_abz_f32( float32_t ( float32_t, float32_t ) ); -void gen_abcz_f32( float32_t ( float32_t, float32_t, float32_t ) ); -void gen_ab_f32_z_bool( bool ( float32_t, float32_t ) ); - -#ifdef FLOAT64 -void - gen_a_f64_z_ui32_rx( - uint_fast32_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f64_z_ui64_rx( - uint_fast64_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f64_z_i32_rx( - int_fast32_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f64_z_i64_rx( - int_fast64_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_a_f64_z_ui32_x( uint_fast32_t ( float64_t, bool ), bool ); -void gen_a_f64_z_ui64_x( uint_fast64_t ( float64_t, bool ), bool ); -void gen_a_f64_z_i32_x( int_fast32_t ( float64_t, bool ), bool ); -void gen_a_f64_z_i64_x( int_fast64_t ( float64_t, bool ), bool ); -#ifdef FLOAT16 -void gen_a_f64_z_f16( float16_t ( float64_t ) ); -#endif -void gen_a_f64_z_f32( float32_t ( float64_t ) ); -#ifdef EXTFLOAT80 -void gen_a_f64_z_extF80( void ( float64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_f64_z_f128( void ( float64_t, float128_t * ) ); -#endif -void gen_az_f64( float64_t ( float64_t ) ); -void - gen_az_f64_rx( - float64_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_abz_f64( float64_t ( float64_t, float64_t ) ); -void gen_abcz_f64( float64_t ( float64_t, float64_t, float64_t ) ); -void gen_ab_f64_z_bool( bool ( float64_t, float64_t ) ); -#endif - -#ifdef EXTFLOAT80 -void - gen_a_extF80_z_ui32_rx( - uint_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_ui64_rx( - uint_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_i32_rx( - int_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_i64_rx( - int_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_ui32_x( uint_fast32_t ( const extFloat80_t *, bool ), bool ); -void - gen_a_extF80_z_ui64_x( uint_fast64_t ( const extFloat80_t *, bool ), bool ); -void gen_a_extF80_z_i32_x( int_fast32_t ( const extFloat80_t *, bool ), bool ); -void gen_a_extF80_z_i64_x( int_fast64_t ( const extFloat80_t *, bool ), bool ); -#ifdef FLOAT16 -void gen_a_extF80_z_f16( float16_t ( const extFloat80_t * ) ); -#endif -void gen_a_extF80_z_f32( float32_t ( const extFloat80_t * ) ); -#ifdef FLOAT64 -void gen_a_extF80_z_f64( float64_t ( const extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_extF80_z_f128( void ( const extFloat80_t *, float128_t * ) ); -#endif -void gen_az_extF80( void ( const extFloat80_t *, extFloat80_t * ) ); -void - gen_az_extF80_rx( - void ( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t, - bool - ); -void - gen_abz_extF80( - void ( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) ); -void - gen_ab_extF80_z_bool( bool ( const extFloat80_t *, const extFloat80_t * ) ); -#endif - -#ifdef FLOAT128 -void - gen_a_f128_z_ui32_rx( - uint_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_f128_z_ui64_rx( - uint_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_f128_z_i32_rx( - int_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_f128_z_i64_rx( - int_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void gen_a_f128_z_ui32_x( uint_fast32_t ( const float128_t *, bool ), bool ); -void gen_a_f128_z_ui64_x( uint_fast64_t ( const float128_t *, bool ), bool ); -void gen_a_f128_z_i32_x( int_fast32_t ( const float128_t *, bool ), bool ); -void gen_a_f128_z_i64_x( int_fast64_t ( const float128_t *, bool ), bool ); -#ifdef FLOAT16 -void gen_a_f128_z_f16( float16_t ( const float128_t * ) ); -#endif -void gen_a_f128_z_f32( float32_t ( const float128_t * ) ); -#ifdef FLOAT64 -void gen_a_f128_z_f64( float64_t ( const float128_t * ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_f128_z_extF80( void ( const float128_t *, extFloat80_t * ) ); -#endif -void gen_az_f128( void ( const float128_t *, float128_t * ) ); -void - gen_az_f128_rx( - void ( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t, - bool - ); -void - gen_abz_f128( void ( const float128_t *, const float128_t *, float128_t * ) ); -void - gen_abcz_f128( - void - ( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ); -void gen_ab_f128_z_bool( bool ( const float128_t *, const float128_t * ) ); -#endif - diff --git a/addins/TestFloat-3e/source/random.c b/addins/TestFloat-3e/source/random.c deleted file mode 100644 index da0613db2..000000000 --- a/addins/TestFloat-3e/source/random.c +++ /dev/null @@ -1,138 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "random.h" - -uint_fast8_t random_ui8( void ) -{ - - return rand()>>4 & 0xFF; - -} - -uint_fast16_t random_ui16( void ) -{ - - return (rand() & 0x0FF0)<<4 | (rand()>>4 & 0xFF); - -} - -uint_fast32_t random_ui32( void ) -{ - - return - (uint_fast32_t) (rand() & 0x0FF0)<<20 - | (uint_fast32_t) (rand() & 0x0FF0)<<12 - | (rand() & 0x0FF0)<<4 - | (rand()>>4 & 0xFF); - -} - -uint_fast64_t random_ui64( void ) -{ - - return (uint_fast64_t) random_ui32()<<32 | random_ui32(); - -} - -uint_fast8_t randomN_ui8( uint_fast8_t N ) -{ - uint_fast8_t scale, z; - - scale = 0; - while ( N < 0x80 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui8(); - } while ( N <= z ); - return z>>scale; - -} - -uint_fast16_t randomN_ui16( uint_fast16_t N ) -{ - uint_fast16_t scale, z; - - scale = 0; - while ( N < 0x8000 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui16(); - } while ( N <= z ); - return z>>scale; - -} - -uint_fast32_t randomN_ui32( uint_fast32_t N ) -{ - uint_fast32_t scale, z; - - scale = 0; - while ( N < 0x8000 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui32(); - } while ( N <= z ); - return z>>scale; - -} - -uint_fast64_t randomN_ui64( uint_fast64_t N ) -{ - uint_fast64_t scale, z; - - scale = 0; - while ( N < 0x8000 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui64(); - } while ( N <= z ); - return z>>scale; - -} - diff --git a/addins/TestFloat-3e/source/random.h b/addins/TestFloat-3e/source/random.h deleted file mode 100644 index 92fe77975..000000000 --- a/addins/TestFloat-3e/source/random.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 - -uint_fast8_t random_ui8( void ); -uint_fast16_t random_ui16( void ); -uint_fast32_t random_ui32( void ); -uint_fast64_t random_ui64( void ); - -uint_fast8_t randomN_ui8( uint_fast8_t ); -uint_fast16_t randomN_ui16( uint_fast16_t ); -uint_fast32_t randomN_ui32( uint_fast32_t ); -uint_fast64_t randomN_ui64( uint_fast64_t ); - diff --git a/addins/TestFloat-3e/source/readHex.c b/addins/TestFloat-3e/source/readHex.c deleted file mode 100644 index 31182b85c..000000000 --- a/addins/TestFloat-3e/source/readHex.c +++ /dev/null @@ -1,190 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include -#include "platform.h" -#include "readHex.h" - -bool readHex_bool( bool *aPtr, char sepChar ) -{ - int i; - bool a; - - i = fgetc( stdin ); - if ( (i == EOF) || (i < '0') || ('1' < i) ) return false; - a = i - '0'; - if ( sepChar ) { - i = fgetc( stdin ); - if ( (sepChar != '\n') || (i != '\r') ) { - if ( i != sepChar ) return false; - } - } - *aPtr = a; - return true; - -} - -bool readHex_ui8( uint_least8_t *aPtr, char sepChar ) -{ - int i; - uint_fast8_t a; - - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a = i<<4; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= i; - if ( sepChar ) { - i = fgetc( stdin ); - if ( (sepChar != '\n') || (i != '\r') ) { - if ( i != sepChar ) return false; - } - } - *aPtr = a; - return true; - -} - -bool readHex_ui16( uint16_t *aPtr, char sepChar ) -{ - int i; - uint_fast16_t a; - - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a = (uint_fast16_t) i<<12; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= (uint_fast16_t) i<<8; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= (uint_fast16_t) i<<4; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= i; - if ( sepChar ) { - i = fgetc( stdin ); - if ( (sepChar != '\n') || (i != '\r') ) { - if ( i != sepChar ) return false; - } - } - *aPtr = a; - return true; - -} - -bool readHex_ui32( uint32_t *aPtr, char sepChar ) -{ - uint16_t v16, v0; - - if ( ! readHex_ui16( &v16, 0 ) || ! readHex_ui16( &v0, sepChar ) ) { - return false; - } - *aPtr = (uint_fast32_t) v16<<16 | v0; - return true; - -} - -bool readHex_ui64( uint64_t *aPtr, char sepChar ) -{ - uint32_t v32, v0; - - if ( ! readHex_ui32( &v32, 0 ) || ! readHex_ui32( &v0, sepChar ) ) { - return false; - } - *aPtr = (uint_fast64_t) v32<<32 | v0; - return true; - -} - diff --git a/addins/TestFloat-3e/source/readHex.h b/addins/TestFloat-3e/source/readHex.h deleted file mode 100644 index 82662571c..000000000 --- a/addins/TestFloat-3e/source/readHex.h +++ /dev/null @@ -1,46 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include - -bool readHex_bool( bool *, char ); -bool readHex_ui8( uint_least8_t *, char ); -bool readHex_ui16( uint16_t *, char ); -bool readHex_ui32( uint32_t *, char ); -bool readHex_ui64( uint64_t *, char ); - diff --git a/addins/TestFloat-3e/source/slowfloat.c b/addins/TestFloat-3e/source/slowfloat.c deleted file mode 100644 index d5252613d..000000000 --- a/addins/TestFloat-3e/source/slowfloat.c +++ /dev/null @@ -1,3749 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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 -#include -#include "platform.h" -#include "uint128.h" -#include "softfloat.h" -#include "slowfloat.h" - -uint_fast8_t slowfloat_roundingMode; -uint_fast8_t slowfloat_detectTininess; -uint_fast8_t slowfloat_exceptionFlags; -#ifdef EXTFLOAT80 -uint_fast8_t slow_extF80_roundingPrecision; -#endif - -#ifdef FLOAT16 -union ui16_f16 { uint16_t ui; float16_t f; }; -#endif -union ui32_f32 { uint32_t ui; float32_t f; }; -#ifdef FLOAT64 -union ui64_f64 { uint64_t ui; float64_t f; }; -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -struct floatX { - bool isNaN; - bool isInf; - bool isZero; - bool sign; - int_fast32_t exp; - struct uint128 sig; -}; - -static const struct floatX floatXNaN = - { true, false, false, false, 0, { 0, 0 } }; -static const struct floatX floatXPositiveZero = - { false, false, true, false, 0, { 0, 0 } }; -static const struct floatX floatXNegativeZero = - { false, false, true, true, 0, { 0, 0 } }; - -static -void - roundFloatXTo11( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t roundBits, sigX64; - - sigX64 = xPtr->sig.v64; - roundBits = (sigX64 & UINT64_C( 0x1FFFFFFFFFFF )) | (xPtr->sig.v0 != 0); - if ( roundBits ) { - sigX64 &= UINT64_C( 0xFFFFE00000000000 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < UINT64_C( 0x100000000000 ) ) goto noIncrement; - if ( - (roundBits == UINT64_C( 0x100000000000 )) - && !(sigX64 & UINT64_C( 0x200000000000 )) - ) { - goto noIncrement; - } - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < UINT64_C( 0x100000000000 ) ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX64 |= UINT64_C( 0x200000000000 ); - goto noIncrement; -#endif - } - sigX64 += UINT64_C( 0x200000000000 ); - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - noIncrement: - xPtr->sig.v64 = sigX64; - xPtr->sig.v0 = 0; - } - -} - -static -void - roundFloatXTo24( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX64; - uint_fast32_t roundBits; - - sigX64 = xPtr->sig.v64; - roundBits = (uint32_t) sigX64 | (xPtr->sig.v0 != 0); - if ( roundBits ) { - sigX64 &= UINT64_C( 0xFFFFFFFF00000000 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < 0x80000000 ) goto noIncrement; - if ( - (roundBits == 0x80000000) - && !(sigX64 & UINT64_C( 0x100000000 )) - ) { - goto noIncrement; - } - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < 0x80000000 ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX64 |= UINT64_C( 0x100000000 ); - goto noIncrement; -#endif - } - sigX64 += UINT64_C( 0x100000000 ); - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - noIncrement: - xPtr->sig.v64 = sigX64; - xPtr->sig.v0 = 0; - } - -} - -static -void - roundFloatXTo53( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX64; - uint_fast8_t roundBits; - - sigX64 = xPtr->sig.v64; - roundBits = (sigX64 & 7) | (xPtr->sig.v0 != 0); - if ( roundBits ) { - sigX64 &= UINT64_C( 0xFFFFFFFFFFFFFFF8 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < 4 ) goto noIncrement; - if ( (roundBits == 4) && !(sigX64 & 8) ) goto noIncrement; - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < 4 ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX64 |= 8; - goto noIncrement; -#endif - } - sigX64 += 8; - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - noIncrement: - xPtr->sig.v64 = sigX64; - xPtr->sig.v0 = 0; - } - -} - -static -void - roundFloatXTo64( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX0, roundBits, sigX64; - - sigX0 = xPtr->sig.v0; - roundBits = sigX0 & UINT64_C( 0x00FFFFFFFFFFFFFF ); - if ( roundBits ) { - sigX0 &= UINT64_C( 0xFF00000000000000 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < UINT64_C( 0x0080000000000000 ) ) goto noIncrement; - if ( - (roundBits == UINT64_C( 0x0080000000000000 )) - && !(sigX0 & UINT64_C( 0x0100000000000000 )) - ) { - goto noIncrement; - } - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < UINT64_C( 0x0080000000000000 ) ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX0 |= UINT64_C( 0x100000000000000 ); - goto noIncrement; -#endif - } - sigX0 += UINT64_C( 0x100000000000000 ); - sigX64 = xPtr->sig.v64 + !sigX0; - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sigX64; - noIncrement: - xPtr->sig.v0 = sigX0; - } - -} - -static -void - roundFloatXTo113( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX0; - uint_fast8_t roundBits; - uint_fast64_t sigX64; - - sigX0 = xPtr->sig.v0; - roundBits = sigX0 & 0x7F; - if ( roundBits ) { - sigX0 &= UINT64_C( 0xFFFFFFFFFFFFFF80 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < 0x40 ) goto noIncrement; - if ( (roundBits == 0x40) && !(sigX0 & 0x80) ) goto noIncrement; - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < 0x40 ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX0 |= 0x80; - goto noIncrement; -#endif - } - sigX0 += 0x80; - sigX64 = xPtr->sig.v64 + !sigX0; - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sigX64; - noIncrement: - xPtr->sig.v0 = sigX0; - } - -} - -static void ui32ToFloatX( uint_fast32_t a, struct floatX *xPtr ) -{ - uint_fast64_t sig64; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->sign = false; - sig64 = a; - if ( a ) { - xPtr->isZero = false; - exp = 31; - sig64 <<= 24; - while ( sig64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig64 <<= 1; - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static -uint_fast32_t - floatXToUI32( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - uint_fast32_t z; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return (xPtr->isInf && xPtr->sign) ? 0 : 0xFFFFFFFF; - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 52 - x.exp; - if ( 56 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo53( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 3 ); - z = x.sig.v64; - if ( (shiftDist < 0) || x.sig.v64>>32 || (x.sign && z) ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return x.sign ? 0 : 0xFFFFFFFF; - } - return z; - -} - -static void ui64ToFloatX( uint_fast64_t a, struct floatX *xPtr ) -{ - struct uint128 sig; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->sign = false; - sig.v64 = 0; - sig.v0 = a; - if ( a ) { - xPtr->isZero = false; - exp = 63; - sig = shortShiftLeft128( sig, 56 ); - while ( sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig = shortShiftLeft128( sig, 1 ); - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig = sig; - -} - -static -uint_fast64_t - floatXToUI64( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - uint_fast64_t z; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return - (xPtr->isInf && xPtr->sign) ? 0 : UINT64_C( 0xFFFFFFFFFFFFFFFF ); - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 112 - x.exp; - if ( 116 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo113( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 7 ); - z = x.sig.v0; - if ( (shiftDist < 0) || x.sig.v64 || (x.sign && z) ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return x.sign ? 0 : UINT64_C( 0xFFFFFFFFFFFFFFFF ); - } - return z; - -} - -static void i32ToFloatX( int_fast32_t a, struct floatX *xPtr ) -{ - bool sign; - uint_fast64_t sig64; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - sign = (a < 0); - xPtr->sign = sign; - sig64 = sign ? -(uint64_t) a : a; - if ( a ) { - xPtr->isZero = false; - exp = 31; - sig64 <<= 24; - while ( sig64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig64 <<= 1; - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static -int_fast32_t - floatXToI32( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - union { uint32_t ui; int32_t i; } uZ; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return (xPtr->isInf && xPtr->sign) ? -0x7FFFFFFF - 1 : 0x7FFFFFFF; - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 52 - x.exp; - if ( 56 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo53( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 3 ); - uZ.ui = x.sig.v64; - if ( x.sign ) uZ.ui = -uZ.ui; - if ( - (shiftDist < 0) || x.sig.v64>>32 - || ((uZ.i != 0) && (x.sign != (uZ.i < 0))) - ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return x.sign ? -0x7FFFFFFF - 1 : 0x7FFFFFFF; - } - return uZ.i; - -} - -static void i64ToFloatX( int_fast64_t a, struct floatX *xPtr ) -{ - bool sign; - struct uint128 sig; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - sign = (a < 0); - xPtr->sign = sign; - sig.v64 = 0; - sig.v0 = sign ? -(uint_fast64_t) a : a; - if ( a ) { - xPtr->isZero = false; - exp = 63; - sig = shortShiftLeft128( sig, 56 ); - while ( sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig = shortShiftLeft128( sig, 1 ); - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig = sig; - -} - -static -int_fast64_t - floatXToI64( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - union { uint64_t ui; int64_t i; } uZ; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return - (xPtr->isInf && xPtr->sign) ? -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1 - : INT64_C( 0x7FFFFFFFFFFFFFFF ); - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 112 - x.exp; - if ( 116 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo113( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 7 ); - uZ.ui = x.sig.v0; - if ( x.sign ) uZ.ui = -uZ.ui; - if ( - (shiftDist < 0) || x.sig.v64 || ((uZ.i != 0) && (x.sign != (uZ.i < 0))) - ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return - x.sign ? -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1 - : INT64_C( 0x7FFFFFFFFFFFFFFF ); - } - return uZ.i; - -} - -#ifdef FLOAT16 - -static void f16ToFloatX( float16_t a, struct floatX *xPtr ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast64_t sig64; - - uA.f = a; - uiA = uA.ui; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = ((uiA & 0x8000) != 0); - exp = uiA>>10 & 0x1F; - sig64 = uiA & 0x03FF; - sig64 <<= 45; - if ( exp == 0x1F ) { - if ( sig64 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig64 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0xF; - do { - --exp; - sig64 <<= 1; - } while ( sig64 < UINT64_C( 0x0080000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0xF; - sig64 |= UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static float16_t floatXToF16( const struct floatX *xPtr ) -{ - uint_fast16_t uiZ; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - union ui16_f16 uZ; - - if ( xPtr->isNaN ) { - uiZ = 0xFFFF; - goto uiZ; - } - if ( xPtr->isInf ) { - uiZ = xPtr->sign ? 0xFC00 : 0x7C00; - goto uiZ; - } - if ( xPtr->isZero ) { - uiZ = xPtr->sign ? 0x8000 : 0; - goto uiZ; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0xF <= 0); - roundFloatXTo11( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0xF; - if ( 0x1F <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZ = 0xFC00; - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZ = 0xFBFF; - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZ = 0x7C00; - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZ = 0x7BFF; - break; - } - } - goto uiZ; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0xF; - if ( exp < -14 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo11( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ = (uint_fast16_t) exp<<10; - if ( x.sign ) uiZ |= 0x8000; - uiZ |= x.sig.v64>>45 & 0x03FF; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - -static void f32ToFloatX( float32_t a, struct floatX *xPtr ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast64_t sig64; - - uA.f = a; - uiA = uA.ui; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = ((uiA & 0x80000000) != 0); - exp = uiA>>23 & 0xFF; - sig64 = uiA & 0x007FFFFF; - sig64 <<= 32; - if ( exp == 0xFF ) { - if ( sig64 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig64 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0x7F; - do { - --exp; - sig64 <<= 1; - } while ( sig64 < UINT64_C( 0x0080000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0x7F; - sig64 |= UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static float32_t floatXToF32( const struct floatX *xPtr ) -{ - uint_fast32_t uiZ; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - union ui32_f32 uZ; - - if ( xPtr->isNaN ) { - uiZ = 0xFFFFFFFF; - goto uiZ; - } - if ( xPtr->isInf ) { - uiZ = xPtr->sign ? 0xFF800000 : 0x7F800000; - goto uiZ; - } - if ( xPtr->isZero ) { - uiZ = xPtr->sign ? 0x80000000 : 0; - goto uiZ; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x7F <= 0); - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0x7F; - if ( 0xFF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZ = 0xFF800000; - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZ = 0xFF7FFFFF; - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZ = 0x7F800000; - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZ = 0x7F7FFFFF; - break; - } - } - goto uiZ; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x7F; - if ( exp < -27 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ = (uint_fast32_t) exp<<23; - if ( x.sign ) uiZ |= 0x80000000; - uiZ |= x.sig.v64>>32 & 0x007FFFFF; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#ifdef FLOAT64 - -static void f64ToFloatX( float64_t a, struct floatX *xPtr ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig64; - - uA.f = a; - uiA = uA.ui; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = ((uiA & UINT64_C( 0x8000000000000000 )) != 0); - exp = uiA>>52 & 0x7FF; - sig64 = uiA & UINT64_C( 0x000FFFFFFFFFFFFF ); - if ( exp == 0x7FF ) { - if ( sig64 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig64 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0x3FF; - do { - --exp; - sig64 <<= 1; - } while ( sig64 < UINT64_C( 0x0010000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0x3FF; - sig64 |= UINT64_C( 0x0010000000000000 ); - } - xPtr->sig.v64 = sig64<<3; - xPtr->sig.v0 = 0; - -} - -static float64_t floatXToF64( const struct floatX *xPtr ) -{ - uint_fast64_t uiZ; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - union ui64_f64 uZ; - - if ( xPtr->isNaN ) { - uiZ = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - goto uiZ; - } - if ( xPtr->isInf ) { - uiZ = - xPtr->sign ? UINT64_C( 0xFFF0000000000000 ) - : UINT64_C( 0x7FF0000000000000 ); - goto uiZ; - } - if ( xPtr->isZero ) { - uiZ = xPtr->sign ? UINT64_C( 0x8000000000000000 ) : 0; - goto uiZ; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x3FF <= 0); - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0x3FF; - if ( 0x7FF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZ = UINT64_C( 0xFFF0000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZ = UINT64_C( 0xFFEFFFFFFFFFFFFF ); - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZ = UINT64_C( 0x7FF0000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZ = UINT64_C( 0x7FEFFFFFFFFFFFFF ); - break; - } - } - goto uiZ; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x3FF; - if ( exp < -56 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ = (uint_fast64_t) exp<<52; - if ( x.sign ) uiZ |= UINT64_C( 0x8000000000000000 ); - uiZ |= x.sig.v64>>3 & UINT64_C( 0x000FFFFFFFFFFFFF ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - -#ifdef EXTFLOAT80 - -static void extF80MToFloatX( const extFloat80_t *aPtr, struct floatX *xPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int_fast32_t exp; - struct uint128 sig; - - aSPtr = (const struct extFloat80M *) aPtr; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - uiA64 = aSPtr->signExp; - xPtr->sign = ((uiA64 & 0x8000) != 0); - exp = uiA64 & 0x7FFF; - sig.v64 = 0; - sig.v0 = aSPtr->signif; - if ( exp == 0x7FFF ) { - if ( sig.v0 & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else { - if ( !exp ) ++exp; - exp -= 0x3FFF; - if ( !(sig.v0 & UINT64_C( 0x8000000000000000 )) ) { - if ( !sig.v0 ) { - xPtr->isZero = true; - } else { - do { - --exp; - sig.v0 <<= 1; - } while ( sig.v0 < UINT64_C( 0x8000000000000000 ) ); - } - } - xPtr->exp = exp; - } - xPtr->sig = shortShiftLeft128( sig, 56 ); - -} - -static void floatXToExtF80M( const struct floatX *xPtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - uint_fast64_t uiZ0; - uint_fast16_t uiZ64; - - zSPtr = (struct extFloat80M *) zPtr; - if ( xPtr->isNaN ) { - zSPtr->signExp = 0xFFFF; - zSPtr->signif = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - return; - } - if ( xPtr->isInf ) { - zSPtr->signExp = xPtr->sign ? 0xFFFF : 0x7FFF; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - return; - } - if ( xPtr->isZero ) { - zSPtr->signExp = xPtr->sign ? 0x8000 : 0; - zSPtr->signif = 0; - return; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x3FFF <= 0); - switch ( slow_extF80_roundingPrecision ) { - case 32: - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - break; - case 64: - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - break; - default: - roundFloatXTo64( isTiny, &x, slowfloat_roundingMode, true ); - break; - } - exp = x.exp + 0x3FFF; - if ( 0x7FFF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - zSPtr->signExp = 0xFFFF; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - switch ( slow_extF80_roundingPrecision ) { - case 32: - uiZ0 = UINT64_C( 0xFFFFFF0000000000 ); - break; - case 64: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFF800 ); - break; - default: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - zSPtr->signExp = 0xFFFE; - zSPtr->signif = uiZ0; - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - zSPtr->signExp = 0x7FFF; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - switch ( slow_extF80_roundingPrecision ) { - case 32: - uiZ0 = UINT64_C( 0xFFFFFF0000000000 ); - break; - case 64: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFF800 ); - break; - default: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - zSPtr->signExp = 0x7FFE; - zSPtr->signif = uiZ0; - break; - } - } - return; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x3FFF; - if ( exp < -70 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - switch ( slow_extF80_roundingPrecision ) { - case 32: - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - break; - case 64: - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - break; - default: - roundFloatXTo64( isTiny, &x, slowfloat_roundingMode, true ); - break; - } - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ64 = exp; - if ( x.sign ) uiZ64 |= 0x8000; - zSPtr->signExp = uiZ64; - zSPtr->signif = shortShiftRightJam128( x.sig, 56 ).v0; - -} - -#endif - -#ifdef FLOAT128 - -static void f128MToFloatX( const float128_t *aPtr, struct floatX *xPtr ) -{ - const struct uint128 *uiAPtr; - uint_fast64_t uiA64; - int_fast32_t exp; - struct uint128 sig; - - uiAPtr = (const struct uint128 *) aPtr; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - uiA64 = uiAPtr->v64; - xPtr->sign = ((uiA64 & UINT64_C( 0x8000000000000000 )) != 0); - exp = uiA64>>48 & 0x7FFF; - sig.v64 = uiA64 & UINT64_C( 0x0000FFFFFFFFFFFF ); - sig.v0 = uiAPtr->v0; - if ( exp == 0x7FFF ) { - if ( sig.v64 || sig.v0 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig.v64 && !sig.v0 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0x3FFF; - do { - --exp; - sig = shortShiftLeft128( sig, 1 ); - } while ( sig.v64 < UINT64_C( 0x0001000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0x3FFF; - sig.v64 |= UINT64_C( 0x0001000000000000 ); - } - xPtr->sig = shortShiftLeft128( sig, 7 ); - -} - -static void floatXToF128M( const struct floatX *xPtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - uint_fast64_t uiZ64; - - uiZPtr = (struct uint128 *) zPtr; - if ( xPtr->isNaN ) { - uiZPtr->v64 = uiZPtr->v0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - return; - } - if ( xPtr->isInf ) { - uiZPtr->v64 = - xPtr->sign ? UINT64_C( 0xFFFF000000000000 ) - : UINT64_C( 0x7FFF000000000000 ); - uiZPtr->v0 = 0; - return; - } - if ( xPtr->isZero ) { - uiZPtr->v64 = xPtr->sign ? UINT64_C( 0x8000000000000000 ) : 0; - uiZPtr->v0 = 0; - return; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x3FFF <= 0); - roundFloatXTo113( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0x3FFF; - if ( 0x7FFF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZPtr->v64 = UINT64_C( 0xFFFF000000000000 ); - uiZPtr->v0 = 0; - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZPtr->v64 = UINT64_C( 0xFFFEFFFFFFFFFFFF ); - uiZPtr->v0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZPtr->v64 = UINT64_C( 0x7FFF000000000000 ); - uiZPtr->v0 = 0; - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZPtr->v64 = UINT64_C( 0x7FFEFFFFFFFFFFFF ); - uiZPtr->v0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - } - return; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x3FFF; - if ( exp < -120 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo113( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ64 = (uint_fast64_t) exp<<48; - if ( x.sign ) uiZ64 |= UINT64_C( 0x8000000000000000 ); - x.sig = shortShiftRightJam128( x.sig, 7 ); - uiZPtr->v64 = uiZ64 | (x.sig.v64 & UINT64_C( 0x0000FFFFFFFFFFFF )); - uiZPtr->v0 = x.sig.v0; - -} - -#endif - -static void floatXInvalid( struct floatX *xPtr ) -{ - - slowfloat_exceptionFlags |= softfloat_flag_invalid; - *xPtr = floatXNaN; - -} - -static -void - floatXRoundToInt( struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - int_fast32_t exp, shiftDist; - struct uint128 sig; - - if ( xPtr->isNaN || xPtr->isInf ) return; - exp = xPtr->exp; - shiftDist = 112 - exp; - if ( shiftDist <= 0 ) return; - if ( 119 < shiftDist ) { - xPtr->exp = 112; - xPtr->sig.v64 = 0; - xPtr->sig.v0 = !xPtr->isZero; - } else { - sig = xPtr->sig; - while ( 0 < shiftDist ) { - ++exp; - sig = shortShiftRightJam128( sig, 1 ); - --shiftDist; - } - xPtr->exp = exp; - xPtr->sig = sig; - } - roundFloatXTo113( false, xPtr, roundingMode, exact ); - if ( !xPtr->sig.v64 && !xPtr->sig.v0 ) xPtr->isZero = true; - -} - -static void floatXAdd( struct floatX *xPtr, const struct floatX *yPtr ) -{ - int_fast32_t expX, expY, expDiff; - struct uint128 sigY; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) goto copyY; - if ( xPtr->isInf && yPtr->isInf ) { - if ( xPtr->sign != yPtr->sign ) floatXInvalid( xPtr ); - return; - } - if ( xPtr->isInf ) return; - if ( yPtr->isInf ) goto copyY; - if ( xPtr->isZero && yPtr->isZero ) { - if ( xPtr->sign == yPtr->sign ) return; - goto completeCancellation; - } - expX = xPtr->exp; - expY = yPtr->exp; - if ( - (xPtr->sign != yPtr->sign) && (expX == expY) - && eq128( xPtr->sig, yPtr->sig ) - ) { - completeCancellation: - if (slowfloat_roundingMode == softfloat_round_min) { - *xPtr = floatXNegativeZero; - } else { - *xPtr = floatXPositiveZero; - } - return; - } - if ( xPtr->isZero ) goto copyY; - if ( yPtr->isZero ) return; - expDiff = expX - expY; - if ( expDiff < 0 ) { - xPtr->exp = expY; - if ( expDiff < -120 ) { - xPtr->sig.v64 = 0; - xPtr->sig.v0 = 1; - } else { - while ( expDiff < 0 ) { - ++expDiff; - xPtr->sig = shortShiftRightJam128( xPtr->sig, 1 ); - } - } - if ( xPtr->sign != yPtr->sign ) xPtr->sig = neg128( xPtr->sig ); - xPtr->sign = yPtr->sign; - xPtr->sig = add128( xPtr->sig, yPtr->sig ); - } else { - sigY = yPtr->sig; - if ( 120 < expDiff ) { - sigY.v64 = 0; - sigY.v0 = 1; - } else { - while ( 0 < expDiff ) { - --expDiff; - sigY = shortShiftRightJam128( sigY, 1 ); - } - } - if ( xPtr->sign != yPtr->sign ) sigY = neg128( sigY ); - xPtr->sig = add128( xPtr->sig, sigY ); - } - if ( xPtr->sig.v64 & UINT64_C( 0x8000000000000000 ) ) { - xPtr->sign = !xPtr->sign; - xPtr->sig = neg128( xPtr->sig ); - } - return; - copyY: - *xPtr = *yPtr; - -} - -static void floatXMul( struct floatX *xPtr, const struct floatX *yPtr ) -{ - struct uint128 sig; - int bitNum; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( yPtr->sign ) xPtr->sign = !xPtr->sign; - if ( xPtr->isInf ) { - if ( yPtr->isZero ) floatXInvalid( xPtr ); - return; - } - if ( yPtr->isInf ) { - if ( xPtr->isZero ) { - floatXInvalid( xPtr ); - return; - } - xPtr->isInf = true; - return; - } - if ( xPtr->isZero || yPtr->isZero ) { - if ( xPtr->sign ) { - *xPtr = floatXNegativeZero; - } else { - *xPtr = floatXPositiveZero; - } - return; - } - xPtr->exp += yPtr->exp; - sig.v64 = 0; - sig.v0 = 0; - for ( bitNum = 0; bitNum < 120; ++bitNum ) { - sig = shortShiftRightJam128( sig, 1 ); - if ( xPtr->sig.v0 & 1 ) sig = add128( sig, yPtr->sig ); - xPtr->sig = shortShiftRight128( xPtr->sig, 1 ); - } - if ( UINT64_C( 0x0100000000000000 ) <= sig.v64 ) { - ++xPtr->exp; - sig = shortShiftRightJam128( sig, 1 ); - } - xPtr->sig = sig; - -} - -static void floatXDiv( struct floatX *xPtr, const struct floatX *yPtr ) -{ - struct uint128 sig, negSigY; - int bitNum; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( yPtr->sign ) xPtr->sign = !xPtr->sign; - if ( xPtr->isInf ) { - if ( yPtr->isInf ) floatXInvalid( xPtr ); - return; - } - if ( yPtr->isZero ) { - if ( xPtr->isZero ) { - floatXInvalid( xPtr ); - return; - } - slowfloat_exceptionFlags |= softfloat_flag_infinite; - xPtr->isInf = true; - return; - } - if ( xPtr->isZero || yPtr->isInf ) { - if ( xPtr->sign ) { - *xPtr = floatXNegativeZero; - } else { - *xPtr = floatXPositiveZero; - } - return; - } - xPtr->exp -= yPtr->exp + 1; - sig.v64 = 0; - sig.v0 = 0; - negSigY = neg128( yPtr->sig ); - for ( bitNum = 0; bitNum < 120; ++bitNum ) { - if ( le128( yPtr->sig, xPtr->sig ) ) { - sig.v0 |= 1; - xPtr->sig = add128( xPtr->sig, negSigY ); - } - xPtr->sig = shortShiftLeft128( xPtr->sig, 1 ); - sig = shortShiftLeft128( sig, 1 ); - } - if ( xPtr->sig.v64 || xPtr->sig.v0 ) sig.v0 |= 1; - xPtr->sig = sig; - -} - -static void floatXRem( struct floatX *xPtr, const struct floatX *yPtr ) -{ - int_fast32_t expX, expY; - struct uint128 sigY, negSigY; - bool lastQuotientBit; - struct uint128 savedSigX; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( xPtr->isInf || yPtr->isZero ) { - floatXInvalid( xPtr ); - return; - } - if ( xPtr->isZero || yPtr->isInf ) return; - expX = xPtr->exp; - expY = yPtr->exp - 1; - if ( expX < expY ) return; - sigY = shortShiftLeft128( yPtr->sig, 1 ); - negSigY = neg128( sigY ); - while ( expY < expX ) { - --expX; - if ( le128( sigY, xPtr->sig ) ) { - xPtr->sig = add128( xPtr->sig, negSigY ); - } - xPtr->sig = shortShiftLeft128( xPtr->sig, 1 ); - } - xPtr->exp = expX; - lastQuotientBit = le128( sigY, xPtr->sig ); - if ( lastQuotientBit ) xPtr->sig = add128( xPtr->sig, negSigY ); - savedSigX = xPtr->sig; - xPtr->sig = neg128( add128( xPtr->sig, negSigY ) ); - if ( lt128( xPtr->sig, savedSigX ) ) { - xPtr->sign = !xPtr->sign; - } else if ( lt128( savedSigX, xPtr->sig ) ) { - goto restoreSavedSigX; - } else { - if ( lastQuotientBit ) { - xPtr->sign = !xPtr->sign; - } else { - restoreSavedSigX: - xPtr->sig = savedSigX; - } - } - if ( !xPtr->sig.v64 && !xPtr->sig.v0 ) xPtr->isZero = true; - -} - -static void floatXSqrt( struct floatX *xPtr ) -{ - struct uint128 sig, bitSig; - int bitNum; - struct uint128 savedSigX; - - if ( xPtr->isNaN || xPtr->isZero ) return; - if ( xPtr->sign ) { - floatXInvalid( xPtr ); - return; - } - if ( xPtr->isInf ) return; - if ( !(xPtr->exp & 1) ) xPtr->sig = shortShiftRightJam128( xPtr->sig, 1 ); - xPtr->exp >>= 1; - sig.v64 = 0; - sig.v0 = 0; - bitSig.v64 = UINT64_C( 0x0080000000000000 ); - bitSig.v0 = 0; - for ( bitNum = 0; bitNum < 120; ++bitNum ) { - savedSigX = xPtr->sig; - xPtr->sig = add128( xPtr->sig, neg128( sig ) ); - xPtr->sig = shortShiftLeft128( xPtr->sig, 1 ); - xPtr->sig = add128( xPtr->sig, neg128( bitSig ) ); - if ( xPtr->sig.v64 & UINT64_C( 0x8000000000000000 ) ) { - xPtr->sig = shortShiftLeft128( savedSigX, 1 ); - } else { - sig.v64 |= bitSig.v64; - sig.v0 |= bitSig.v0; - } - bitSig = shortShiftRightJam128( bitSig, 1 ); - } - if ( xPtr->sig.v64 || xPtr->sig.v0 ) sig.v0 |= 1; - xPtr->sig = sig; - -} - -static bool floatXEq( const struct floatX *xPtr, const struct floatX *yPtr ) -{ - - if ( xPtr->isNaN || yPtr->isNaN ) return false; - if ( xPtr->isZero && yPtr->isZero ) return true; - if ( xPtr->sign != yPtr->sign ) return false; - if ( xPtr->isInf || yPtr->isInf ) return xPtr->isInf && yPtr->isInf; - return ( xPtr->exp == yPtr->exp ) && eq128( xPtr->sig, yPtr->sig ); - -} - -static bool floatXLe( const struct floatX *xPtr, const struct floatX *yPtr ) -{ - - if ( xPtr->isNaN || yPtr->isNaN ) return false; - if ( xPtr->isZero && yPtr->isZero ) return true; - if ( xPtr->sign != yPtr->sign ) return xPtr->sign; - if ( xPtr->sign ) { - if ( xPtr->isInf || yPtr->isZero ) return true; - if ( yPtr->isInf || xPtr->isZero ) return false; - if ( yPtr->exp < xPtr->exp ) return true; - if ( xPtr->exp < yPtr->exp ) return false; - return le128( yPtr->sig, xPtr->sig ); - } else { - if ( yPtr->isInf || xPtr->isZero ) return true; - if ( xPtr->isInf || yPtr->isZero ) return false; - if ( xPtr->exp < yPtr->exp ) return true; - if ( yPtr->exp < xPtr->exp ) return false; - return le128( xPtr->sig, yPtr->sig ); - } - -} - -static bool floatXLt( const struct floatX *xPtr, const struct floatX *yPtr ) -{ - - if ( xPtr->isNaN || yPtr->isNaN ) return false; - if ( xPtr->isZero && yPtr->isZero ) return false; - if ( xPtr->sign != yPtr->sign ) return xPtr->sign; - if ( xPtr->isInf && yPtr->isInf ) return false; - if ( xPtr->sign ) { - if ( xPtr->isInf || yPtr->isZero ) return true; - if ( yPtr->isInf || xPtr->isZero ) return false; - if ( yPtr->exp < xPtr->exp ) return true; - if ( xPtr->exp < yPtr->exp ) return false; - return lt128( yPtr->sig, xPtr->sig ); - } else { - if ( yPtr->isInf || xPtr->isZero ) return true; - if ( xPtr->isInf || yPtr->isZero ) return false; - if ( xPtr->exp < yPtr->exp ) return true; - if ( yPtr->exp < xPtr->exp ) return false; - return lt128( xPtr->sig, yPtr->sig ); - } - -} - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#if defined EXTFLOAT80 || defined FLOAT128 - -#ifdef LITTLEENDIAN -struct uint256 { uint64_t v0, v64, v128, v192; }; -#else -struct uint256 { uint64_t v192, v128, v64, v0; }; -#endif - -static bool eq256M( const struct uint256 *aPtr, const struct uint256 *bPtr ) -{ - - return - (aPtr->v192 == bPtr->v192) && (aPtr->v128 == bPtr->v128) - && (aPtr->v64 == bPtr->v64) && (aPtr->v0 == bPtr->v0); - -} - -static void shiftLeft1256M( struct uint256 *ptr ) -{ - uint64_t dword1, dword2; - - dword1 = ptr->v128; - ptr->v192 = ptr->v192<<1 | dword1>>63; - dword2 = ptr->v64; - ptr->v128 = dword1<<1 | dword2>>63; - dword1 = ptr->v0; - ptr->v64 = dword2<<1 | dword1>>63; - ptr->v0 = dword1<<1; - -} - -static void shiftRight1256M( struct uint256 *ptr ) -{ - uint64_t dword1, dword2; - - dword1 = ptr->v64; - ptr->v0 = dword1<<63 | ptr->v0>>1; - dword2 = ptr->v128; - ptr->v64 = dword2<<63 | dword1>>1; - dword1 = ptr->v192; - ptr->v128 = dword1<<63 | dword2>>1; - ptr->v192 = dword1>>1; - -} - -static void shiftRight1Jam256M( struct uint256 *ptr ) -{ - int extra; - - extra = ptr->v0 & 1; - shiftRight1256M( ptr ); - ptr->v0 |= extra; - -} - -static void neg256M( struct uint256 *ptr ) -{ - uint64_t v64, v0, v128; - - v64 = ptr->v64; - v0 = ptr->v0; - if ( v64 | v0 ) { - ptr->v192 = ~ptr->v192; - ptr->v128 = ~ptr->v128; - if ( v0 ) { - ptr->v64 = ~v64; - ptr->v0 = -v0; - } else { - ptr->v64 = -v64; - } - } else { - v128 = ptr->v128; - if ( v128 ) { - ptr->v192 = ~ptr->v192; - ptr->v128 = -v128; - } else { - ptr->v192 = -ptr->v192; - } - } - -} - -static void add256M( struct uint256 *aPtr, const struct uint256 *bPtr ) -{ - uint64_t dwordA, dwordZ; - unsigned int carry1, carry2; - - dwordA = aPtr->v0; - dwordZ = dwordA + bPtr->v0; - carry1 = (dwordZ < dwordA); - aPtr->v0 = dwordZ; - dwordA = aPtr->v64; - dwordZ = dwordA + bPtr->v64; - carry2 = (dwordZ < dwordA); - dwordZ += carry1; - carry2 += (dwordZ < carry1); - aPtr->v64 = dwordZ; - dwordA = aPtr->v128; - dwordZ = dwordA + bPtr->v128; - carry1 = (dwordZ < dwordA); - dwordZ += carry2; - carry1 += (dwordZ < carry2); - aPtr->v128 = dwordZ; - aPtr->v192 = aPtr->v192 + bPtr->v192 + carry1; - -} - -struct floatX256 { - bool isNaN; - bool isInf; - bool isZero; - bool sign; - int_fast32_t exp; - struct uint256 sig; -}; - -static const struct floatX256 floatX256NaN = - { true, false, false, false, 0, { 0, 0, 0, 0 } }; -static const struct floatX256 floatX256PositiveZero = - { false, false, true, false, 0, { 0, 0, 0, 0 } }; -static const struct floatX256 floatX256NegativeZero = - { false, false, true, true, 0, { 0, 0, 0, 0 } }; - -#ifdef FLOAT128 - -static void f128MToFloatX256( const float128_t *aPtr, struct floatX256 *xPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - xPtr->isNaN = x.isNaN; - xPtr->isInf = x.isInf; - xPtr->isZero = x.isZero; - xPtr->sign = x.sign; - xPtr->exp = x.exp; - xPtr->sig.v192 = x.sig.v64; - xPtr->sig.v128 = x.sig.v0; - xPtr->sig.v64 = 0; - xPtr->sig.v0 = 0; - -} - -static void floatX256ToF128M( const struct floatX256 *xPtr, float128_t *zPtr ) -{ - struct floatX x; - int_fast32_t expZ; - struct uint256 sig; - - x.isNaN = xPtr->isNaN; - x.isInf = xPtr->isInf; - x.isZero = xPtr->isZero; - x.sign = xPtr->sign; - if ( !(x.isNaN | x.isInf | x.isZero) ) { - expZ = xPtr->exp; - sig = xPtr->sig; - while ( !sig.v192 ) { - expZ -= 64; - sig.v192 = sig.v128; - sig.v128 = sig.v64; - sig.v64 = sig.v0; - sig.v0 = 0; - } - while ( sig.v192 < UINT64_C( 0x0100000000000000 ) ) { - --expZ; - shiftLeft1256M( &sig ); - } - x.exp = expZ; - x.sig.v64 = sig.v192; - x.sig.v0 = sig.v128 | ((sig.v64 | sig.v0) != 0); - } - floatXToF128M( &x, zPtr ); - -} - -#endif - -static void floatX256Invalid( struct floatX256 *xPtr ) -{ - - slowfloat_exceptionFlags |= softfloat_flag_invalid; - *xPtr = floatX256NaN; - -} - -static -void floatX256Add( struct floatX256 *xPtr, const struct floatX256 *yPtr ) -{ - int_fast32_t expX, expY, expDiff; - struct uint256 sigY; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) goto copyY; - if ( xPtr->isInf && yPtr->isInf ) { - if ( xPtr->sign != yPtr->sign ) floatX256Invalid( xPtr ); - return; - } - if ( xPtr->isInf ) return; - if ( yPtr->isInf ) goto copyY; - if ( xPtr->isZero && yPtr->isZero ) { - if ( xPtr->sign == yPtr->sign ) return; - goto completeCancellation; - } - expX = xPtr->exp; - expY = yPtr->exp; - if ( - (xPtr->sign != yPtr->sign) && (expX == expY) - && eq256M( &xPtr->sig, &yPtr->sig ) - ) { - completeCancellation: - if (slowfloat_roundingMode == softfloat_round_min) { - *xPtr = floatX256NegativeZero; - } else { - *xPtr = floatX256PositiveZero; - } - return; - } - if ( xPtr->isZero ) goto copyY; - if ( yPtr->isZero ) return; - expDiff = expX - expY; - if ( expDiff < 0 ) { - xPtr->exp = expY; - if ( expDiff < -248 ) { - xPtr->sig.v192 = 0; - xPtr->sig.v128 = 0; - xPtr->sig.v64 = 0; - xPtr->sig.v0 = 1; - } else { - while ( expDiff < 0 ) { - ++expDiff; - shiftRight1Jam256M( &xPtr->sig ); - } - } - if ( xPtr->sign != yPtr->sign ) neg256M( &xPtr->sig ); - xPtr->sign = yPtr->sign; - add256M( &xPtr->sig, &yPtr->sig ); - } else { - sigY = yPtr->sig; - if ( 248 < expDiff ) { - sigY.v192 = 0; - sigY.v128 = 0; - sigY.v64 = 0; - sigY.v0 = 1; - } else { - while ( 0 < expDiff ) { - --expDiff; - shiftRight1Jam256M( &sigY ); - } - } - if ( xPtr->sign != yPtr->sign ) neg256M( &sigY ); - add256M( &xPtr->sig, &sigY ); - } - if ( xPtr->sig.v192 & UINT64_C( 0x8000000000000000 ) ) { - xPtr->sign = !xPtr->sign; - neg256M( &xPtr->sig ); - } - return; - copyY: - *xPtr = *yPtr; - -} - -static -void floatX256Mul( struct floatX256 *xPtr, const struct floatX256 *yPtr ) -{ - struct uint256 sig; - int bitNum; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( yPtr->sign ) xPtr->sign = !xPtr->sign; - if ( xPtr->isInf ) { - if ( yPtr->isZero ) floatX256Invalid( xPtr ); - return; - } - if ( yPtr->isInf ) { - if ( xPtr->isZero ) { - floatX256Invalid( xPtr ); - return; - } - xPtr->isInf = true; - return; - } - if ( xPtr->isZero || yPtr->isZero ) { - if ( xPtr->sign ) { - *xPtr = floatX256NegativeZero; - } else { - *xPtr = floatX256PositiveZero; - } - return; - } - xPtr->exp += yPtr->exp; - sig.v192 = 0; - sig.v128 = 0; - sig.v64 = 0; - sig.v0 = 0; - for ( bitNum = 0; bitNum < 248; ++bitNum ) { - shiftRight1Jam256M( &sig ); - if ( xPtr->sig.v0 & 1 ) add256M( &sig, &yPtr->sig ); - shiftRight1256M( &xPtr->sig ); - } - if ( UINT64_C( 0x0100000000000000 ) <= sig.v192 ) { - ++xPtr->exp; - shiftRight1Jam256M( &sig ); - } - xPtr->sig = sig; - -} - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#ifdef FLOAT16 - -float16_t slow_ui32_to_f16( uint32_t a ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_ui32_to_f32( uint32_t a ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_ui32_to_f64( uint32_t a ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -float16_t slow_ui64_to_f16( uint64_t a ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_ui64_to_f32( uint64_t a ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_ui64_to_f64( uint64_t a ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -float16_t slow_i32_to_f16( int32_t a ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_i32_to_f32( int32_t a ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_i32_to_f64( int32_t a ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -float16_t slow_i64_to_f16( int64_t a ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_i64_to_f32( int64_t a ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_i64_to_f64( int64_t a ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -uint_fast32_t - slow_f16_to_ui32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f16_to_ui64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f16_to_i32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f16_to_i64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f16_to_ui32_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f16_to_ui64_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f16_to_i32_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f16_to_i64_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -float32_t slow_f16_to_f32( float16_t a ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_f16_to_f64( float16_t a ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_f16_to_extF80M( float16_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_f16_to_f128M( float16_t a, float128_t *zPtr ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -float16_t - slow_f16_roundToInt( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_add( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXAdd( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_sub( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - return floatXToF16( &x ); - - -} - -float16_t slow_f16_mul( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXMul( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_mulAdd( float16_t a, float16_t b, float16_t c ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXMul( &x, &y ); - f16ToFloatX( c, &y ); - floatXAdd( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_div( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXDiv( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_rem( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXRem( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_sqrt( float16_t a ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXSqrt( &x ); - return floatXToF16( &x ); - -} - -bool slow_f16_eq( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f16_le( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f16_lt( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f16_eq_signaling( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f16_le_quiet( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f16_lt_quiet( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - return floatXLt( &x, &y ); - -} - -#endif - -uint_fast32_t - slow_f32_to_ui32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f32_to_ui64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f32_to_i32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f32_to_i64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f32_to_ui32_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f32_to_ui64_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f32_to_i32_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f32_to_i64_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_f32_to_f16( float32_t a ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -#ifdef FLOAT64 - -float64_t slow_f32_to_f64( float32_t a ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -float32_t - slow_f32_roundToInt( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_add( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXAdd( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_sub( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - return floatXToF32( &x ); - - -} - -float32_t slow_f32_mul( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXMul( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_mulAdd( float32_t a, float32_t b, float32_t c ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXMul( &x, &y ); - f32ToFloatX( c, &y ); - floatXAdd( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_div( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXDiv( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_rem( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXRem( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_sqrt( float32_t a ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXSqrt( &x ); - return floatXToF32( &x ); - -} - -bool slow_f32_eq( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f32_le( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f32_lt( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f32_eq_signaling( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f32_le_quiet( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f32_lt_quiet( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - return floatXLt( &x, &y ); - -} - -#ifdef FLOAT64 - -uint_fast32_t - slow_f64_to_ui32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f64_to_ui64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f64_to_i32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f64_to_i64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f64_to_ui32_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f64_to_ui64_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f64_to_i32_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f64_to_i64_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_f64_to_f16( float64_t a ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_f64_to_f32( float64_t a ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef EXTFLOAT80 - -void slow_f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -float64_t - slow_f64_roundToInt( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_add( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXAdd( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_sub( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_mul( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXMul( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_mulAdd( float64_t a, float64_t b, float64_t c ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXMul( &x, &y ); - f64ToFloatX( c, &y ); - floatXAdd( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_div( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXDiv( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_rem( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXRem( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_sqrt( float64_t a ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXSqrt( &x ); - return floatXToF64( &x ); - -} - -bool slow_f64_eq( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f64_le( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f64_lt( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f64_eq_signaling( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f64_le_quiet( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f64_lt_quiet( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - return floatXLt( &x, &y ); - -} - -#endif - -#ifdef EXTFLOAT80 - -uint_fast32_t - slow_extF80M_to_ui32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_extF80M_to_ui64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_extF80M_to_i32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_extF80M_to_i64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t - slow_extF80M_to_ui32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t - slow_extF80M_to_ui64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t - slow_extF80M_to_i32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t - slow_extF80M_to_i64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_extF80M_to_f16( const extFloat80_t *aPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_extF80M_to_f32( const extFloat80_t *aPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_extF80M_to_f64( const extFloat80_t *aPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *zPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -void - slow_extF80M_roundToInt( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXAdd( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXMul( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXDiv( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_rem( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXRem( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void slow_extF80M_sqrt( const extFloat80_t *aPtr, extFloat80_t *zPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - floatXSqrt( &x ); - floatXToExtF80M( &x, zPtr ); - -} - -bool slow_extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool - slow_extF80M_eq_signaling( - const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_extF80M_le_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_extF80M_lt_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - return floatXLt( &x, &y ); - -} - -#endif - -#ifdef FLOAT128 - -uint_fast32_t - slow_f128M_to_ui32( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f128M_to_ui64( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f128M_to_i32( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f128M_to_i64( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f128M_to_ui32_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f128M_to_ui64_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f128M_to_i64_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_f128M_to_f16( const float128_t *aPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_f128M_to_f32( const float128_t *aPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_f128M_to_f64( const float128_t *aPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_f128M_to_extF80M( const float128_t *aPtr, extFloat80_t *zPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -void - slow_f128M_roundToInt( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_add( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXAdd( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_sub( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_mul( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXMul( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - struct floatX256 x, y; - - f128MToFloatX256( aPtr, &x ); - f128MToFloatX256( bPtr, &y ); - floatX256Mul( &x, &y ); - f128MToFloatX256( cPtr, &y ); - floatX256Add( &x, &y ); - floatX256ToF128M( &x, zPtr ); - -} - -void - slow_f128M_div( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXDiv( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_rem( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXRem( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void slow_f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - floatXSqrt( &x ); - floatXToF128M( &x, zPtr ); - -} - -bool slow_f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f128M_eq_signaling( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f128M_le_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f128M_lt_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - return floatXLt( &x, &y ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/slowfloat.h b/addins/TestFloat-3e/source/slowfloat.h deleted file mode 100644 index 7af1d1eb5..000000000 --- a/addins/TestFloat-3e/source/slowfloat.h +++ /dev/null @@ -1,298 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include -#include "softfloat.h" - -extern uint_fast8_t slowfloat_roundingMode; -extern uint_fast8_t slowfloat_detectTininess; -extern uint_fast8_t slowfloat_exceptionFlags; -#ifdef EXTFLOAT80 -extern uint_fast8_t slow_extF80_roundingPrecision; -#endif - -#ifdef FLOAT16 -float16_t slow_ui32_to_f16( uint32_t ); -#endif -float32_t slow_ui32_to_f32( uint32_t ); -#ifdef FLOAT64 -float64_t slow_ui32_to_f64( uint32_t ); -#endif -#ifdef EXTFLOAT80 -void slow_ui32_to_extF80M( uint32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_ui32_to_f128M( uint32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t slow_ui64_to_f16( uint64_t ); -#endif -float32_t slow_ui64_to_f32( uint64_t ); -#ifdef FLOAT64 -float64_t slow_ui64_to_f64( uint64_t ); -#endif -#ifdef EXTFLOAT80 -void slow_ui64_to_extF80M( uint64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_ui64_to_f128M( uint64_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t slow_i32_to_f16( int32_t ); -#endif -float32_t slow_i32_to_f32( int32_t ); -#ifdef FLOAT64 -float64_t slow_i32_to_f64( int32_t ); -#endif -#ifdef EXTFLOAT80 -void slow_i32_to_extF80M( int32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_i32_to_f128M( int32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t slow_i64_to_f16( int64_t ); -#endif -float32_t slow_i64_to_f32( int64_t ); -#ifdef FLOAT64 -float64_t slow_i64_to_f64( int64_t ); -#endif -#ifdef EXTFLOAT80 -void slow_i64_to_extF80M( int64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_i64_to_f128M( int64_t, float128_t * ); -#endif - -#ifdef FLOAT16 -uint_fast32_t slow_f16_to_ui32( float16_t, uint_fast8_t, bool ); -uint_fast64_t slow_f16_to_ui64( float16_t, uint_fast8_t, bool ); -int_fast32_t slow_f16_to_i32( float16_t, uint_fast8_t, bool ); -int_fast64_t slow_f16_to_i64( float16_t, uint_fast8_t, bool ); -uint_fast32_t slow_f16_to_ui32_r_minMag( float16_t, bool ); -uint_fast64_t slow_f16_to_ui64_r_minMag( float16_t, bool ); -int_fast32_t slow_f16_to_i32_r_minMag( float16_t, bool ); -int_fast64_t slow_f16_to_i64_r_minMag( float16_t, bool ); -float32_t slow_f16_to_f32( float16_t ); -#ifdef FLOAT64 -float64_t slow_f16_to_f64( float16_t ); -#endif -#ifdef EXTFLOAT80 -void slow_f16_to_extF80M( float16_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_f16_to_f128M( float16_t, float128_t * ); -#endif -float16_t slow_f16_roundToInt( float16_t, uint_fast8_t, bool ); -float16_t slow_f16_add( float16_t, float16_t ); -float16_t slow_f16_sub( float16_t, float16_t ); -float16_t slow_f16_mul( float16_t, float16_t ); -float16_t slow_f16_mulAdd( float16_t, float16_t, float16_t ); -float16_t slow_f16_div( float16_t, float16_t ); -float16_t slow_f16_rem( float16_t, float16_t ); -float16_t slow_f16_sqrt( float16_t ); -bool slow_f16_eq( float16_t, float16_t ); -bool slow_f16_le( float16_t, float16_t ); -bool slow_f16_lt( float16_t, float16_t ); -bool slow_f16_eq_signaling( float16_t, float16_t ); -bool slow_f16_le_quiet( float16_t, float16_t ); -bool slow_f16_lt_quiet( float16_t, float16_t ); -#endif - -uint_fast32_t slow_f32_to_ui32( float32_t, uint_fast8_t, bool ); -uint_fast64_t slow_f32_to_ui64( float32_t, uint_fast8_t, bool ); -int_fast32_t slow_f32_to_i32( float32_t, uint_fast8_t, bool ); -int_fast64_t slow_f32_to_i64( float32_t, uint_fast8_t, bool ); -uint_fast32_t slow_f32_to_ui32_r_minMag( float32_t, bool ); -uint_fast64_t slow_f32_to_ui64_r_minMag( float32_t, bool ); -int_fast32_t slow_f32_to_i32_r_minMag( float32_t, bool ); -int_fast64_t slow_f32_to_i64_r_minMag( float32_t, bool ); -#ifdef FLOAT16 -float16_t slow_f32_to_f16( float32_t ); -#endif -#ifdef FLOAT64 -float64_t slow_f32_to_f64( float32_t ); -#endif -#ifdef EXTFLOAT80 -void slow_f32_to_extF80M( float32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_f32_to_f128M( float32_t, float128_t * ); -#endif -float32_t slow_f32_roundToInt( float32_t, uint_fast8_t, bool ); -float32_t slow_f32_add( float32_t, float32_t ); -float32_t slow_f32_sub( float32_t, float32_t ); -float32_t slow_f32_mul( float32_t, float32_t ); -float32_t slow_f32_mulAdd( float32_t, float32_t, float32_t ); -float32_t slow_f32_div( float32_t, float32_t ); -float32_t slow_f32_rem( float32_t, float32_t ); -float32_t slow_f32_sqrt( float32_t ); -bool slow_f32_eq( float32_t, float32_t ); -bool slow_f32_le( float32_t, float32_t ); -bool slow_f32_lt( float32_t, float32_t ); -bool slow_f32_eq_signaling( float32_t, float32_t ); -bool slow_f32_le_quiet( float32_t, float32_t ); -bool slow_f32_lt_quiet( float32_t, float32_t ); - -#ifdef FLOAT64 -uint_fast32_t slow_f64_to_ui32( float64_t, uint_fast8_t, bool ); -uint_fast64_t slow_f64_to_ui64( float64_t, uint_fast8_t, bool ); -int_fast32_t slow_f64_to_i32( float64_t, uint_fast8_t, bool ); -int_fast64_t slow_f64_to_i64( float64_t, uint_fast8_t, bool ); -uint_fast32_t slow_f64_to_ui32_r_minMag( float64_t, bool ); -uint_fast64_t slow_f64_to_ui64_r_minMag( float64_t, bool ); -int_fast32_t slow_f64_to_i32_r_minMag( float64_t, bool ); -int_fast64_t slow_f64_to_i64_r_minMag( float64_t, bool ); -#ifdef FLOAT16 -float16_t slow_f64_to_f16( float64_t ); -#endif -float32_t slow_f64_to_f32( float64_t ); -#ifdef EXTFLOAT80 -void slow_f64_to_extF80M( float64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_f64_to_f128M( float64_t, float128_t * ); -#endif -float64_t slow_f64_roundToInt( float64_t, uint_fast8_t, bool ); -float64_t slow_f64_add( float64_t, float64_t ); -float64_t slow_f64_sub( float64_t, float64_t ); -float64_t slow_f64_mul( float64_t, float64_t ); -float64_t slow_f64_mulAdd( float64_t, float64_t, float64_t ); -float64_t slow_f64_div( float64_t, float64_t ); -float64_t slow_f64_rem( float64_t, float64_t ); -float64_t slow_f64_sqrt( float64_t ); -bool slow_f64_eq( float64_t, float64_t ); -bool slow_f64_le( float64_t, float64_t ); -bool slow_f64_lt( float64_t, float64_t ); -bool slow_f64_eq_signaling( float64_t, float64_t ); -bool slow_f64_le_quiet( float64_t, float64_t ); -bool slow_f64_lt_quiet( float64_t, float64_t ); -#endif - -#ifdef EXTFLOAT80 -uint_fast32_t slow_extF80M_to_ui32( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast64_t slow_extF80M_to_ui64( const extFloat80_t *, uint_fast8_t, bool ); -int_fast32_t slow_extF80M_to_i32( const extFloat80_t *, uint_fast8_t, bool ); -int_fast64_t slow_extF80M_to_i64( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast32_t slow_extF80M_to_ui32_r_minMag( const extFloat80_t *, bool ); -uint_fast64_t slow_extF80M_to_ui64_r_minMag( const extFloat80_t *, bool ); -int_fast32_t slow_extF80M_to_i32_r_minMag( const extFloat80_t *, bool ); -int_fast64_t slow_extF80M_to_i64_r_minMag( const extFloat80_t *, bool ); -#ifdef FLOAT16 -float16_t slow_extF80M_to_f16( const extFloat80_t * ); -#endif -float32_t slow_extF80M_to_f32( const extFloat80_t * ); -#ifdef FLOAT64 -float64_t slow_extF80M_to_f64( const extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_extF80M_to_f128M( const extFloat80_t *, float128_t * ); -#endif -void - slow_extF80M_roundToInt( - const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ); -void - slow_extF80M_add( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_sub( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_mul( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_mulAdd( - const extFloat80_t *, - const extFloat80_t *, - const extFloat80_t *, - extFloat80_t * - ); -void - slow_extF80M_div( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_rem( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void slow_extF80M_sqrt( const extFloat80_t *, extFloat80_t * ); -bool slow_extF80M_eq( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_le( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_lt( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_eq_signaling( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_le_quiet( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_lt_quiet( const extFloat80_t *, const extFloat80_t * ); -#endif - -#ifdef FLOAT128 -uint_fast32_t slow_f128M_to_ui32( const float128_t *, uint_fast8_t, bool ); -uint_fast64_t slow_f128M_to_ui64( const float128_t *, uint_fast8_t, bool ); -int_fast32_t slow_f128M_to_i32( const float128_t *, uint_fast8_t, bool ); -int_fast64_t slow_f128M_to_i64( const float128_t *, uint_fast8_t, bool ); -uint_fast32_t slow_f128M_to_ui32_r_minMag( const float128_t *, bool ); -uint_fast64_t slow_f128M_to_ui64_r_minMag( const float128_t *, bool ); -int_fast32_t slow_f128M_to_i32_r_minMag( const float128_t *, bool ); -int_fast64_t slow_f128M_to_i64_r_minMag( const float128_t *, bool ); -#ifdef FLOAT16 -float16_t slow_f128M_to_f16( const float128_t * ); -#endif -float32_t slow_f128M_to_f32( const float128_t * ); -#ifdef FLOAT64 -float64_t slow_f128M_to_f64( const float128_t * ); -#endif -#ifdef EXTFLOAT80 -void slow_f128M_to_extF80M( const float128_t *, extFloat80_t * ); -#endif -void - slow_f128M_roundToInt( const float128_t *, uint_fast8_t, bool, float128_t * ); -void slow_f128M_add( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_sub( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_mul( const float128_t *, const float128_t *, float128_t * ); -void - slow_f128M_mulAdd( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -void slow_f128M_div( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_rem( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_sqrt( const float128_t *, float128_t * ); -bool slow_f128M_eq( const float128_t *, const float128_t * ); -bool slow_f128M_le( const float128_t *, const float128_t * ); -bool slow_f128M_lt( const float128_t *, const float128_t * ); -bool slow_f128M_eq_signaling( const float128_t *, const float128_t * ); -bool slow_f128M_le_quiet( const float128_t *, const float128_t * ); -bool slow_f128M_lt_quiet( const float128_t *, const float128_t * ); -#endif - diff --git a/addins/TestFloat-3e/source/standardFunctionInfos.c b/addins/TestFloat-3e/source/standardFunctionInfos.c deleted file mode 100644 index fa6a61dc5..000000000 --- a/addins/TestFloat-3e/source/standardFunctionInfos.c +++ /dev/null @@ -1,471 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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 -#include "platform.h" -#include "functions.h" - -#define RNEVEN ROUND_NEAR_EVEN -#define RMINM ROUND_MINMAG -#define RMIN ROUND_MIN -#define RMAX ROUND_MAX -#define RNMAXM ROUND_NEAR_MAXMAG - -const struct standardFunctionInfo standardFunctionInfos[] = { - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "ui32_to_f16", UI32_TO_F16, 0, 0 }, -#endif - { "ui32_to_f32", UI32_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "ui32_to_f64", UI32_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "ui32_to_extF80", UI32_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "ui32_to_f128", UI32_TO_F128, 0, 0 }, -#endif -#ifdef FLOAT16 - { "ui64_to_f16", UI64_TO_F16, 0, 0 }, -#endif - { "ui64_to_f32", UI64_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "ui64_to_f64", UI64_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "ui64_to_extF80", UI64_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "ui64_to_f128", UI64_TO_F128, 0, 0 }, -#endif -#ifdef FLOAT16 - { "i32_to_f16", I32_TO_F16, 0, 0 }, -#endif - { "i32_to_f32", I32_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "i32_to_f64", I32_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "i32_to_extF80", I32_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "i32_to_f128", I32_TO_F128, 0, 0 }, -#endif -#ifdef FLOAT16 - { "i64_to_f16", I64_TO_F16, 0, 0 }, -#endif - { "i64_to_f32", I64_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "i64_to_f64", I64_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "i64_to_extF80", I64_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "i64_to_f128", I64_TO_F128, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "f16_to_ui32_r_near_even", F16_TO_UI32, RNEVEN, false }, - { "f16_to_ui32_r_minMag", F16_TO_UI32, RMINM, false }, - { "f16_to_ui32_r_min", F16_TO_UI32, RMIN, false }, - { "f16_to_ui32_r_max", F16_TO_UI32, RMAX, false }, - { "f16_to_ui32_r_near_maxMag", F16_TO_UI32, RNMAXM, false }, - { "f16_to_ui64_r_near_even", F16_TO_UI64, RNEVEN, false }, - { "f16_to_ui64_r_minMag", F16_TO_UI64, RMINM, false }, - { "f16_to_ui64_r_min", F16_TO_UI64, RMIN, false }, - { "f16_to_ui64_r_max", F16_TO_UI64, RMAX, false }, - { "f16_to_ui64_r_near_maxMag", F16_TO_UI64, RNMAXM, false }, - { "f16_to_i32_r_near_even", F16_TO_I32, RNEVEN, false }, - { "f16_to_i32_r_minMag", F16_TO_I32, RMINM, false }, - { "f16_to_i32_r_min", F16_TO_I32, RMIN, false }, - { "f16_to_i32_r_max", F16_TO_I32, RMAX, false }, - { "f16_to_i32_r_near_maxMag", F16_TO_I32, RNMAXM, false }, - { "f16_to_i64_r_near_even", F16_TO_I64, RNEVEN, false }, - { "f16_to_i64_r_minMag", F16_TO_I64, RMINM, false }, - { "f16_to_i64_r_min", F16_TO_I64, RMIN, false }, - { "f16_to_i64_r_max", F16_TO_I64, RMAX, false }, - { "f16_to_i64_r_near_maxMag", F16_TO_I64, RNMAXM, false }, - { "f16_to_ui32_rx_near_even", F16_TO_UI32, RNEVEN, true }, - { "f16_to_ui32_rx_minMag", F16_TO_UI32, RMINM, true }, - { "f16_to_ui32_rx_min", F16_TO_UI32, RMIN, true }, - { "f16_to_ui32_rx_max", F16_TO_UI32, RMAX, true }, - { "f16_to_ui32_rx_near_maxMag", F16_TO_UI32, RNMAXM, true }, - { "f16_to_ui64_rx_near_even", F16_TO_UI64, RNEVEN, true }, - { "f16_to_ui64_rx_minMag", F16_TO_UI64, RMINM, true }, - { "f16_to_ui64_rx_min", F16_TO_UI64, RMIN, true }, - { "f16_to_ui64_rx_max", F16_TO_UI64, RMAX, true }, - { "f16_to_ui64_rx_near_maxMag", F16_TO_UI64, RNMAXM, true }, - { "f16_to_i32_rx_near_even", F16_TO_I32, RNEVEN, true }, - { "f16_to_i32_rx_minMag", F16_TO_I32, RMINM, true }, - { "f16_to_i32_rx_min", F16_TO_I32, RMIN, true }, - { "f16_to_i32_rx_max", F16_TO_I32, RMAX, true }, - { "f16_to_i32_rx_near_maxMag", F16_TO_I32, RNMAXM, true }, - { "f16_to_i64_rx_near_even", F16_TO_I64, RNEVEN, true }, - { "f16_to_i64_rx_minMag", F16_TO_I64, RMINM, true }, - { "f16_to_i64_rx_min", F16_TO_I64, RMIN, true }, - { "f16_to_i64_rx_max", F16_TO_I64, RMAX, true }, - { "f16_to_i64_rx_near_maxMag", F16_TO_I64, RNMAXM, true }, - { "f16_to_f32", F16_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "f16_to_f64", F16_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "f16_to_extF80", F16_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "f16_to_f128", F16_TO_F128, 0, 0 }, -#endif - { "f16_roundToInt_r_near_even", F16_ROUNDTOINT, RNEVEN, false }, - { "f16_roundToInt_r_minMag", F16_ROUNDTOINT, RMINM, false }, - { "f16_roundToInt_r_min", F16_ROUNDTOINT, RMIN, false }, - { "f16_roundToInt_r_max", F16_ROUNDTOINT, RMAX, false }, - { "f16_roundToInt_r_near_maxMag", F16_ROUNDTOINT, RNMAXM, false }, - { "f16_roundToInt_x", F16_ROUNDTOINT, 0, true }, - { "f16_add", F16_ADD, 0, 0 }, - { "f16_sub", F16_SUB, 0, 0 }, - { "f16_mul", F16_MUL, 0, 0 }, - { "f16_mulAdd", F16_MULADD, 0, 0 }, - { "f16_div", F16_DIV, 0, 0 }, - { "f16_rem", F16_REM, 0, 0 }, - { "f16_sqrt", F16_SQRT, 0, 0 }, - { "f16_eq", F16_EQ, 0, 0 }, - { "f16_le", F16_LE, 0, 0 }, - { "f16_lt", F16_LT, 0, 0 }, - { "f16_eq_signaling", F16_EQ_SIGNALING, 0, 0 }, - { "f16_le_quiet", F16_LE_QUIET, 0, 0 }, - { "f16_lt_quiet", F16_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - { "f32_to_ui32_r_near_even", F32_TO_UI32, RNEVEN, false }, - { "f32_to_ui32_r_minMag", F32_TO_UI32, RMINM, false }, - { "f32_to_ui32_r_min", F32_TO_UI32, RMIN, false }, - { "f32_to_ui32_r_max", F32_TO_UI32, RMAX, false }, - { "f32_to_ui32_r_near_maxMag", F32_TO_UI32, RNMAXM, false }, - { "f32_to_ui64_r_near_even", F32_TO_UI64, RNEVEN, false }, - { "f32_to_ui64_r_minMag", F32_TO_UI64, RMINM, false }, - { "f32_to_ui64_r_min", F32_TO_UI64, RMIN, false }, - { "f32_to_ui64_r_max", F32_TO_UI64, RMAX, false }, - { "f32_to_ui64_r_near_maxMag", F32_TO_UI64, RNMAXM, false }, - { "f32_to_i32_r_near_even", F32_TO_I32, RNEVEN, false }, - { "f32_to_i32_r_minMag", F32_TO_I32, RMINM, false }, - { "f32_to_i32_r_min", F32_TO_I32, RMIN, false }, - { "f32_to_i32_r_max", F32_TO_I32, RMAX, false }, - { "f32_to_i32_r_near_maxMag", F32_TO_I32, RNMAXM, false }, - { "f32_to_i64_r_near_even", F32_TO_I64, RNEVEN, false }, - { "f32_to_i64_r_minMag", F32_TO_I64, RMINM, false }, - { "f32_to_i64_r_min", F32_TO_I64, RMIN, false }, - { "f32_to_i64_r_max", F32_TO_I64, RMAX, false }, - { "f32_to_i64_r_near_maxMag", F32_TO_I64, RNMAXM, false }, - { "f32_to_ui32_rx_near_even", F32_TO_UI32, RNEVEN, true }, - { "f32_to_ui32_rx_minMag", F32_TO_UI32, RMINM, true }, - { "f32_to_ui32_rx_min", F32_TO_UI32, RMIN, true }, - { "f32_to_ui32_rx_max", F32_TO_UI32, RMAX, true }, - { "f32_to_ui32_rx_near_maxMag", F32_TO_UI32, RNMAXM, true }, - { "f32_to_ui64_rx_near_even", F32_TO_UI64, RNEVEN, true }, - { "f32_to_ui64_rx_minMag", F32_TO_UI64, RMINM, true }, - { "f32_to_ui64_rx_min", F32_TO_UI64, RMIN, true }, - { "f32_to_ui64_rx_max", F32_TO_UI64, RMAX, true }, - { "f32_to_ui64_rx_near_maxMag", F32_TO_UI64, RNMAXM, true }, - { "f32_to_i32_rx_near_even", F32_TO_I32, RNEVEN, true }, - { "f32_to_i32_rx_minMag", F32_TO_I32, RMINM, true }, - { "f32_to_i32_rx_min", F32_TO_I32, RMIN, true }, - { "f32_to_i32_rx_max", F32_TO_I32, RMAX, true }, - { "f32_to_i32_rx_near_maxMag", F32_TO_I32, RNMAXM, true }, - { "f32_to_i64_rx_near_even", F32_TO_I64, RNEVEN, true }, - { "f32_to_i64_rx_minMag", F32_TO_I64, RMINM, true }, - { "f32_to_i64_rx_min", F32_TO_I64, RMIN, true }, - { "f32_to_i64_rx_max", F32_TO_I64, RMAX, true }, - { "f32_to_i64_rx_near_maxMag", F32_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "f32_to_f16", F32_TO_F16, 0, 0 }, -#endif -#ifdef FLOAT64 - { "f32_to_f64", F32_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "f32_to_extF80", F32_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "f32_to_f128", F32_TO_F128, 0, 0 }, -#endif - { "f32_roundToInt_r_near_even", F32_ROUNDTOINT, RNEVEN, false }, - { "f32_roundToInt_r_minMag", F32_ROUNDTOINT, RMINM, false }, - { "f32_roundToInt_r_min", F32_ROUNDTOINT, RMIN, false }, - { "f32_roundToInt_r_max", F32_ROUNDTOINT, RMAX, false }, - { "f32_roundToInt_r_near_maxMag", F32_ROUNDTOINT, RNMAXM, false }, - { "f32_roundToInt_x", F32_ROUNDTOINT, 0, true }, - { "f32_add", F32_ADD, 0, 0 }, - { "f32_sub", F32_SUB, 0, 0 }, - { "f32_mul", F32_MUL, 0, 0 }, - { "f32_mulAdd", F32_MULADD, 0, 0 }, - { "f32_div", F32_DIV, 0, 0 }, - { "f32_rem", F32_REM, 0, 0 }, - { "f32_sqrt", F32_SQRT, 0, 0 }, - { "f32_eq", F32_EQ, 0, 0 }, - { "f32_le", F32_LE, 0, 0 }, - { "f32_lt", F32_LT, 0, 0 }, - { "f32_eq_signaling", F32_EQ_SIGNALING, 0, 0 }, - { "f32_le_quiet", F32_LE_QUIET, 0, 0 }, - { "f32_lt_quiet", F32_LT_QUIET, 0, 0 }, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 - { "f64_to_ui32_r_near_even", F64_TO_UI32, RNEVEN, false }, - { "f64_to_ui32_r_minMag", F64_TO_UI32, RMINM, false }, - { "f64_to_ui32_r_min", F64_TO_UI32, RMIN, false }, - { "f64_to_ui32_r_max", F64_TO_UI32, RMAX, false }, - { "f64_to_ui32_r_near_maxMag", F64_TO_UI32, RNMAXM, false }, - { "f64_to_ui64_r_near_even", F64_TO_UI64, RNEVEN, false }, - { "f64_to_ui64_r_minMag", F64_TO_UI64, RMINM, false }, - { "f64_to_ui64_r_min", F64_TO_UI64, RMIN, false }, - { "f64_to_ui64_r_max", F64_TO_UI64, RMAX, false }, - { "f64_to_ui64_r_near_maxMag", F64_TO_UI64, RNMAXM, false }, - { "f64_to_i32_r_near_even", F64_TO_I32, RNEVEN, false }, - { "f64_to_i32_r_minMag", F64_TO_I32, RMINM, false }, - { "f64_to_i32_r_min", F64_TO_I32, RMIN, false }, - { "f64_to_i32_r_max", F64_TO_I32, RMAX, false }, - { "f64_to_i32_r_near_maxMag", F64_TO_I32, RNMAXM, false }, - { "f64_to_i64_r_near_even", F64_TO_I64, RNEVEN, false }, - { "f64_to_i64_r_minMag", F64_TO_I64, RMINM, false }, - { "f64_to_i64_r_min", F64_TO_I64, RMIN, false }, - { "f64_to_i64_r_max", F64_TO_I64, RMAX, false }, - { "f64_to_i64_r_near_maxMag", F64_TO_I64, RNMAXM, false }, - { "f64_to_ui32_rx_near_even", F64_TO_UI32, RNEVEN, true }, - { "f64_to_ui32_rx_minMag", F64_TO_UI32, RMINM, true }, - { "f64_to_ui32_rx_min", F64_TO_UI32, RMIN, true }, - { "f64_to_ui32_rx_max", F64_TO_UI32, RMAX, true }, - { "f64_to_ui32_rx_near_maxMag", F64_TO_UI32, RNMAXM, true }, - { "f64_to_ui64_rx_near_even", F64_TO_UI64, RNEVEN, true }, - { "f64_to_ui64_rx_minMag", F64_TO_UI64, RMINM, true }, - { "f64_to_ui64_rx_min", F64_TO_UI64, RMIN, true }, - { "f64_to_ui64_rx_max", F64_TO_UI64, RMAX, true }, - { "f64_to_ui64_rx_near_maxMag", F64_TO_UI64, RNMAXM, true }, - { "f64_to_i32_rx_near_even", F64_TO_I32, RNEVEN, true }, - { "f64_to_i32_rx_minMag", F64_TO_I32, RMINM, true }, - { "f64_to_i32_rx_min", F64_TO_I32, RMIN, true }, - { "f64_to_i32_rx_max", F64_TO_I32, RMAX, true }, - { "f64_to_i32_rx_near_maxMag", F64_TO_I32, RNMAXM, true }, - { "f64_to_i64_rx_near_even", F64_TO_I64, RNEVEN, true }, - { "f64_to_i64_rx_minMag", F64_TO_I64, RMINM, true }, - { "f64_to_i64_rx_min", F64_TO_I64, RMIN, true }, - { "f64_to_i64_rx_max", F64_TO_I64, RMAX, true }, - { "f64_to_i64_rx_near_maxMag", F64_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "f64_to_f16", F64_TO_F16, 0, 0 }, -#endif - { "f64_to_f32", F64_TO_F32, 0, 0 }, -#ifdef EXTFLOAT80 - { "f64_to_extF80", F64_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "f64_to_f128", F64_TO_F128, 0, 0 }, -#endif - { "f64_roundToInt_r_near_even", F64_ROUNDTOINT, RNEVEN, false }, - { "f64_roundToInt_r_minMag", F64_ROUNDTOINT, RMINM, false }, - { "f64_roundToInt_r_min", F64_ROUNDTOINT, RMIN, false }, - { "f64_roundToInt_r_max", F64_ROUNDTOINT, RMAX, false }, - { "f64_roundToInt_r_near_maxMag", F64_ROUNDTOINT, RNMAXM, false }, - { "f64_roundToInt_x", F64_ROUNDTOINT, 0, true }, - { "f64_add", F64_ADD, 0, 0 }, - { "f64_sub", F64_SUB, 0, 0 }, - { "f64_mul", F64_MUL, 0, 0 }, - { "f64_mulAdd", F64_MULADD, 0, 0 }, - { "f64_div", F64_DIV, 0, 0 }, - { "f64_rem", F64_REM, 0, 0 }, - { "f64_sqrt", F64_SQRT, 0, 0 }, - { "f64_eq", F64_EQ, 0, 0 }, - { "f64_le", F64_LE, 0, 0 }, - { "f64_lt", F64_LT, 0, 0 }, - { "f64_eq_signaling", F64_EQ_SIGNALING, 0, 0 }, - { "f64_le_quiet", F64_LE_QUIET, 0, 0 }, - { "f64_lt_quiet", F64_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - { "extF80_to_ui32_r_near_even", EXTF80_TO_UI32, RNEVEN, false }, - { "extF80_to_ui32_r_minMag", EXTF80_TO_UI32, RMINM, false }, - { "extF80_to_ui32_r_min", EXTF80_TO_UI32, RMIN, false }, - { "extF80_to_ui32_r_max", EXTF80_TO_UI32, RMAX, false }, - { "extF80_to_ui32_r_near_maxMag", EXTF80_TO_UI32, RNMAXM, false }, - { "extF80_to_ui64_r_near_even", EXTF80_TO_UI64, RNEVEN, false }, - { "extF80_to_ui64_r_minMag", EXTF80_TO_UI64, RMINM, false }, - { "extF80_to_ui64_r_min", EXTF80_TO_UI64, RMIN, false }, - { "extF80_to_ui64_r_max", EXTF80_TO_UI64, RMAX, false }, - { "extF80_to_ui64_r_near_maxMag", EXTF80_TO_UI64, RNMAXM, false }, - { "extF80_to_i32_r_near_even", EXTF80_TO_I32, RNEVEN, false }, - { "extF80_to_i32_r_minMag", EXTF80_TO_I32, RMINM, false }, - { "extF80_to_i32_r_min", EXTF80_TO_I32, RMIN, false }, - { "extF80_to_i32_r_max", EXTF80_TO_I32, RMAX, false }, - { "extF80_to_i32_r_near_maxMag", EXTF80_TO_I32, RNMAXM, false }, - { "extF80_to_i64_r_near_even", EXTF80_TO_I64, RNEVEN, false }, - { "extF80_to_i64_r_minMag", EXTF80_TO_I64, RMINM, false }, - { "extF80_to_i64_r_min", EXTF80_TO_I64, RMIN, false }, - { "extF80_to_i64_r_max", EXTF80_TO_I64, RMAX, false }, - { "extF80_to_i64_r_near_maxMag", EXTF80_TO_I64, RNMAXM, false }, - { "extF80_to_ui32_rx_near_even", EXTF80_TO_UI32, RNEVEN, true }, - { "extF80_to_ui32_rx_minMag", EXTF80_TO_UI32, RMINM, true }, - { "extF80_to_ui32_rx_min", EXTF80_TO_UI32, RMIN, true }, - { "extF80_to_ui32_rx_max", EXTF80_TO_UI32, RMAX, true }, - { "extF80_to_ui32_rx_near_maxMag", EXTF80_TO_UI32, RNMAXM, true }, - { "extF80_to_ui64_rx_near_even", EXTF80_TO_UI64, RNEVEN, true }, - { "extF80_to_ui64_rx_minMag", EXTF80_TO_UI64, RMINM, true }, - { "extF80_to_ui64_rx_min", EXTF80_TO_UI64, RMIN, true }, - { "extF80_to_ui64_rx_max", EXTF80_TO_UI64, RMAX, true }, - { "extF80_to_ui64_rx_near_maxMag", EXTF80_TO_UI64, RNMAXM, true }, - { "extF80_to_i32_rx_near_even", EXTF80_TO_I32, RNEVEN, true }, - { "extF80_to_i32_rx_minMag", EXTF80_TO_I32, RMINM, true }, - { "extF80_to_i32_rx_min", EXTF80_TO_I32, RMIN, true }, - { "extF80_to_i32_rx_max", EXTF80_TO_I32, RMAX, true }, - { "extF80_to_i32_rx_near_maxMag", EXTF80_TO_I32, RNMAXM, true }, - { "extF80_to_i64_rx_near_even", EXTF80_TO_I64, RNEVEN, true }, - { "extF80_to_i64_rx_minMag", EXTF80_TO_I64, RMINM, true }, - { "extF80_to_i64_rx_min", EXTF80_TO_I64, RMIN, true }, - { "extF80_to_i64_rx_max", EXTF80_TO_I64, RMAX, true }, - { "extF80_to_i64_rx_near_maxMag", EXTF80_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "extF80_to_f16", EXTF80_TO_F16, 0, 0 }, -#endif - { "extF80_to_f32", EXTF80_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "extF80_to_f64", EXTF80_TO_F64, 0, 0 }, -#endif -#ifdef FLOAT128 - { "extF80_to_f128", EXTF80_TO_F128, 0, 0 }, -#endif - { "extF80_roundToInt_r_near_even", EXTF80_ROUNDTOINT, RNEVEN, false }, - { "extF80_roundToInt_r_minMag", EXTF80_ROUNDTOINT, RMINM, false }, - { "extF80_roundToInt_r_min", EXTF80_ROUNDTOINT, RMIN, false }, - { "extF80_roundToInt_r_max", EXTF80_ROUNDTOINT, RMAX, false }, - { "extF80_roundToInt_r_near_maxMag", EXTF80_ROUNDTOINT, RNMAXM, false }, - { "extF80_roundToInt_x", EXTF80_ROUNDTOINT, 0, true }, - { "extF80_add", EXTF80_ADD, 0, 0 }, - { "extF80_sub", EXTF80_SUB, 0, 0 }, - { "extF80_mul", EXTF80_MUL, 0, 0 }, - { "extF80_div", EXTF80_DIV, 0, 0 }, - { "extF80_rem", EXTF80_REM, 0, 0 }, - { "extF80_sqrt", EXTF80_SQRT, 0, 0 }, - { "extF80_eq", EXTF80_EQ, 0, 0 }, - { "extF80_le", EXTF80_LE, 0, 0 }, - { "extF80_lt", EXTF80_LT, 0, 0 }, - { "extF80_eq_signaling", EXTF80_EQ_SIGNALING, 0, 0 }, - { "extF80_le_quiet", EXTF80_LE_QUIET, 0, 0 }, - { "extF80_lt_quiet", EXTF80_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 - { "f128_to_ui32_r_near_even", F128_TO_UI32, RNEVEN, false }, - { "f128_to_ui32_r_minMag", F128_TO_UI32, RMINM, false }, - { "f128_to_ui32_r_min", F128_TO_UI32, RMIN, false }, - { "f128_to_ui32_r_max", F128_TO_UI32, RMAX, false }, - { "f128_to_ui32_r_near_maxMag", F128_TO_UI32, RNMAXM, false }, - { "f128_to_ui64_r_near_even", F128_TO_UI64, RNEVEN, false }, - { "f128_to_ui64_r_minMag", F128_TO_UI64, RMINM, false }, - { "f128_to_ui64_r_min", F128_TO_UI64, RMIN, false }, - { "f128_to_ui64_r_max", F128_TO_UI64, RMAX, false }, - { "f128_to_ui64_r_near_maxMag", F128_TO_UI64, RNMAXM, false }, - { "f128_to_i32_r_near_even", F128_TO_I32, RNEVEN, false }, - { "f128_to_i32_r_minMag", F128_TO_I32, RMINM, false }, - { "f128_to_i32_r_min", F128_TO_I32, RMIN, false }, - { "f128_to_i32_r_max", F128_TO_I32, RMAX, false }, - { "f128_to_i32_r_near_maxMag", F128_TO_I32, RNMAXM, false }, - { "f128_to_i64_r_near_even", F128_TO_I64, RNEVEN, false }, - { "f128_to_i64_r_minMag", F128_TO_I64, RMINM, false }, - { "f128_to_i64_r_min", F128_TO_I64, RMIN, false }, - { "f128_to_i64_r_max", F128_TO_I64, RMAX, false }, - { "f128_to_i64_r_near_maxMag", F128_TO_I64, RNMAXM, false }, - { "f128_to_ui32_rx_near_even", F128_TO_UI32, RNEVEN, true }, - { "f128_to_ui32_rx_minMag", F128_TO_UI32, RMINM, true }, - { "f128_to_ui32_rx_min", F128_TO_UI32, RMIN, true }, - { "f128_to_ui32_rx_max", F128_TO_UI32, RMAX, true }, - { "f128_to_ui32_rx_near_maxMag", F128_TO_UI32, RNMAXM, true }, - { "f128_to_ui64_rx_near_even", F128_TO_UI64, RNEVEN, true }, - { "f128_to_ui64_rx_minMag", F128_TO_UI64, RMINM, true }, - { "f128_to_ui64_rx_min", F128_TO_UI64, RMIN, true }, - { "f128_to_ui64_rx_max", F128_TO_UI64, RMAX, true }, - { "f128_to_ui64_rx_near_maxMag", F128_TO_UI64, RNMAXM, true }, - { "f128_to_i32_rx_near_even", F128_TO_I32, RNEVEN, true }, - { "f128_to_i32_rx_minMag", F128_TO_I32, RMINM, true }, - { "f128_to_i32_rx_min", F128_TO_I32, RMIN, true }, - { "f128_to_i32_rx_max", F128_TO_I32, RMAX, true }, - { "f128_to_i32_rx_near_maxMag", F128_TO_I32, RNMAXM, true }, - { "f128_to_i64_rx_near_even", F128_TO_I64, RNEVEN, true }, - { "f128_to_i64_rx_minMag", F128_TO_I64, RMINM, true }, - { "f128_to_i64_rx_min", F128_TO_I64, RMIN, true }, - { "f128_to_i64_rx_max", F128_TO_I64, RMAX, true }, - { "f128_to_i64_rx_near_maxMag", F128_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "f128_to_f16", F128_TO_F16, 0, 0 }, -#endif - { "f128_to_f32", F128_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "f128_to_f64", F128_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "f128_to_extF80", F128_TO_EXTF80, 0, 0 }, -#endif - { "f128_roundToInt_r_near_even", F128_ROUNDTOINT, RNEVEN, false }, - { "f128_roundToInt_r_minMag", F128_ROUNDTOINT, RMINM, false }, - { "f128_roundToInt_r_min", F128_ROUNDTOINT, RMIN, false }, - { "f128_roundToInt_r_max", F128_ROUNDTOINT, RMAX, false }, - { "f128_roundToInt_r_near_maxMag", F128_ROUNDTOINT, RNMAXM, false }, - { "f128_roundToInt_x", F128_ROUNDTOINT, 0, true }, - { "f128_add", F128_ADD, 0, 0 }, - { "f128_sub", F128_SUB, 0, 0 }, - { "f128_mul", F128_MUL, 0, 0 }, - { "f128_mulAdd", F128_MULADD, 0, 0 }, - { "f128_div", F128_DIV, 0, 0 }, - { "f128_rem", F128_REM, 0, 0 }, - { "f128_sqrt", F128_SQRT, 0, 0 }, - { "f128_eq", F128_EQ, 0, 0 }, - { "f128_le", F128_LE, 0, 0 }, - { "f128_lt", F128_LT, 0, 0 }, - { "f128_eq_signaling", F128_EQ_SIGNALING, 0, 0 }, - { "f128_le_quiet", F128_LE_QUIET, 0, 0 }, - { "f128_lt_quiet", F128_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - { 0, 0, 0, 0 } -}; - diff --git a/addins/TestFloat-3e/source/subj-C/subjfloat.c b/addins/TestFloat-3e/source/subj-C/subjfloat.c deleted file mode 100644 index 438d0ea37..000000000 --- a/addins/TestFloat-3e/source/subj-C/subjfloat.c +++ /dev/null @@ -1,856 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "subjfloat_config.h" -#include "subjfloat.h" - -#pragma STDC FENV_ACCESS ON - -void subjfloat_setRoundingMode( uint_fast8_t roundingMode ) -{ - - fesetround( - (roundingMode == softfloat_round_near_even) ? FE_TONEAREST - : (roundingMode == softfloat_round_minMag) ? FE_TOWARDZERO - : (roundingMode == softfloat_round_min) ? FE_DOWNWARD - : FE_UPWARD - ); - -} - -void subjfloat_setExtF80RoundingPrecision( uint_fast8_t roundingPrecision ) -{ - -} - -uint_fast8_t subjfloat_clearExceptionFlags( void ) -{ - int subjExceptionFlags; - uint_fast8_t exceptionFlags; - - subjExceptionFlags = - fetestexcept( - FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT - ); - feclearexcept( - FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT ); - exceptionFlags = 0; - if ( subjExceptionFlags & FE_INVALID ) { - exceptionFlags |= softfloat_flag_invalid; - } - if ( subjExceptionFlags & FE_DIVBYZERO ) { - exceptionFlags |= softfloat_flag_infinite; - } - if ( subjExceptionFlags & FE_OVERFLOW ) { - exceptionFlags |= softfloat_flag_overflow; - } - if ( subjExceptionFlags & FE_UNDERFLOW ) { - exceptionFlags |= softfloat_flag_underflow; - } - if ( subjExceptionFlags & FE_INEXACT ) { - exceptionFlags |= softfloat_flag_inexact; - } - return exceptionFlags; - -} - -union f32_f { float32_t f32; float f; }; - -float32_t subj_ui32_to_f32( uint32_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -float32_t subj_ui64_to_f32( uint64_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -float32_t subj_i32_to_f32( int32_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -float32_t subj_i64_to_f32( int64_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -uint_fast32_t subj_f32_to_ui32_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (uint32_t) uA.f; - -} - -uint_fast64_t subj_f32_to_ui64_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (uint64_t) uA.f; - -} - -int_fast32_t subj_f32_to_i32_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (int32_t) uA.f; - -} - -int_fast64_t subj_f32_to_i64_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (int64_t) uA.f; - -} - -float32_t subj_f32_add( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f + uB.f; - return uZ.f32; - -} - -float32_t subj_f32_sub( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f - uB.f; - return uZ.f32; - -} - -float32_t subj_f32_mul( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f * uB.f; - return uZ.f32; - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -float32_t subj_f32_mulAdd( float32_t a, float32_t b, float32_t c ) -{ - union f32_f uA, uB, uC, uZ; - - uA.f32 = a; - uB.f32 = b; - uC.f32 = c; - uZ.f = fmaf( uA.f, uB.f, uC.f ); - return uZ.f32; - -} - -#endif -#endif - -float32_t subj_f32_div( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f / uB.f; - return uZ.f32; - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -float32_t subj_f32_sqrt( float32_t a ) -{ - union f32_f uA, uZ; - - uA.f32 = a; - uZ.f = sqrtf( uA.f ); - return uZ.f32; - -} - -#endif -#endif - -bool subj_f32_eq( float32_t a, float32_t b ) -{ - union f32_f uA, uB; - - uA.f32 = a; - uB.f32 = b; - return (uA.f == uB.f); - -} - -bool subj_f32_le( float32_t a, float32_t b ) -{ - union f32_f uA, uB; - - uA.f32 = a; - uB.f32 = b; - return (uA.f <= uB.f); - -} - -bool subj_f32_lt( float32_t a, float32_t b ) -{ - union f32_f uA, uB; - - uA.f32 = a; - uB.f32 = b; - return (uA.f < uB.f); - -} - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#ifdef FLOAT64 - -union f64_d { float64_t f64; double d; }; - -float64_t subj_ui32_to_f64( uint32_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_ui64_to_f64( uint64_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_i32_to_f64( int32_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_i64_to_f64( int64_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_f32_to_f64( float32_t a ) -{ - union f32_f uA; - union f64_d uZ; - - uA.f32 = a; - uZ.d = uA.f; - return uZ.f64; - -} - -uint_fast32_t subj_f64_to_ui32_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (uint32_t) uA.d; - -} - -uint_fast64_t subj_f64_to_ui64_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (uint64_t) uA.d; - -} - -int_fast32_t subj_f64_to_i32_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (int32_t) uA.d; - -} - -int_fast64_t subj_f64_to_i64_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (int64_t) uA.d; - -} - -float32_t subj_f64_to_f32( float64_t a ) -{ - union f64_d uA; - union f32_f uZ; - - uA.f64 = a; - uZ.f = uA.d; - return uZ.f32; - -} - -float64_t subj_f64_add( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d + uB.d; - return uZ.f64; - -} - -float64_t subj_f64_sub( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d - uB.d; - return uZ.f64; - -} - -float64_t subj_f64_mul( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d * uB.d; - return uZ.f64; - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -float64_t subj_f64_mulAdd( float64_t a, float64_t b, float64_t c ) -{ - union f64_d uA, uB, uC, uZ; - - uA.f64 = a; - uB.f64 = b; - uC.f64 = c; - uZ.d = fma( uA.d, uB.d, uC.d ); - return uZ.f64; - -} - -#endif -#endif - -float64_t subj_f64_div( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d / uB.d; - return uZ.f64; - -} - -float64_t subj_f64_sqrt( float64_t a ) -{ - union f64_d uA, uZ; - - uA.f64 = a; - uZ.d = sqrt( uA.d ); - return uZ.f64; - -} - -bool subj_f64_eq( float64_t a, float64_t b ) -{ - union f64_d uA, uB; - - uA.f64 = a; - uB.f64 = b; - return (uA.d == uB.d); - -} - -bool subj_f64_le( float64_t a, float64_t b ) -{ - union f64_d uA, uB; - - uA.f64 = a; - uB.f64 = b; - return (uA.d <= uB.d); - -} - -bool subj_f64_lt( float64_t a, float64_t b ) -{ - union f64_d uA, uB; - - uA.f64 = a; - uB.f64 = b; - return (uA.d < uB.d); - -} - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#if defined EXTFLOAT80 && defined LONG_DOUBLE_IS_EXTFLOAT80 - -void subj_ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - union f32_f uA; - - uA.f32 = a; - *((long double *) zPtr) = uA.f; - -} - -#ifdef FLOAT64 - -void subj_f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - union f64_d uA; - - uA.f64 = a; - *((long double *) zPtr) = uA.d; - -} - -#endif - -uint_fast32_t subj_extF80M_to_ui32_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -uint_fast64_t subj_extF80M_to_ui64_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast32_t subj_extF80M_to_i32_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast64_t subj_extF80M_to_i64_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -float32_t subj_extF80M_to_f32( const extFloat80_t *aPtr ) -{ - union f32_f uZ; - - uZ.f = *((const long double *) aPtr); - return uZ.f32; - -} - -#ifdef FLOAT64 - -float64_t subj_extF80M_to_f64( const extFloat80_t *aPtr ) -{ - union f64_d uZ; - - uZ.d = *((const long double *) aPtr); - return uZ.f64; - -} - -#endif - -void - subj_extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) + *((const long double *) bPtr); - -} - -void - subj_extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) - *((const long double *) bPtr); - -} - -void - subj_extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) * *((const long double *) bPtr); - -} - -void - subj_extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) / *((const long double *) bPtr); - -} - -bool subj_extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return (*((const long double *) aPtr) == *((const long double *) bPtr)); - -} - -bool subj_extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return (*((const long double *) aPtr) <= *((const long double *) bPtr)); - -} - -bool subj_extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return (*((const long double *) aPtr) < *((const long double *) bPtr)); - -} - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#if defined FLOAT128 && defined LONG_DOUBLE_IS_FLOAT128 - -void subj_ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - union f32_f uA; - - uA.f32 = a; - *((long double *) zPtr) = uA.f; - -} - -#ifdef FLOAT64 - -void subj_f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - union f64_d uA; - - uA.f64 = a; - *((long double *) zPtr) = uA.d; - -} - -#endif - -uint_fast32_t subj_f128M_to_ui32_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -uint_fast64_t subj_f128M_to_ui64_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast32_t subj_f128M_to_i32_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast64_t subj_f128M_to_i64_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -float32_t subj_f128M_to_f32( const float128_t *aPtr ) -{ - union f32_f uZ; - - uZ.f = *((const long double *) aPtr); - return uZ.f32; - -} - -#ifdef FLOAT64 - -float64_t subj_f128M_to_f64( const float128_t *aPtr ) -{ - union f64_d uZ; - - uZ.d = *((const long double *) aPtr); - return uZ.f64; - -} - -#endif - -void - subj_f128M_add( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) + *((const long double *) bPtr); - -} - -void - subj_f128M_sub( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) - *((const long double *) bPtr); - -} - -void - subj_f128M_mul( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) * *((const long double *) bPtr); - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -void - subj_f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - - *((long double *) zPtr) = - fmal( - *((const long double *) aPtr), - *((const long double *) bPtr), - *((const long double *) cPtr) - ); - -} - -#endif -#endif - -void - subj_f128M_div( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) / *((const long double *) bPtr); - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -void subj_f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = sqrtl( *((const long double *) aPtr) ); - -} - -#endif -#endif - -bool subj_f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return (*((const long double *) aPtr) == *((const long double *) bPtr)); - -} - -bool subj_f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return (*((const long double *) aPtr) <= *((const long double *) bPtr)); - -} - -bool subj_f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return (*((const long double *) aPtr) < *((const long double *) bPtr)); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/subj-C/subjfloat_config.h b/addins/TestFloat-3e/source/subj-C/subjfloat_config.h deleted file mode 100644 index 01387e6d1..000000000 --- a/addins/TestFloat-3e/source/subj-C/subjfloat_config.h +++ /dev/null @@ -1,133 +0,0 @@ - -/*---------------------------------------------------------------------------- -| The following macros are defined to indicate all the subject functions that -| exist. -*----------------------------------------------------------------------------*/ - -#define SUBJ_UI32_TO_F32 -#define SUBJ_UI64_TO_F32 -#define SUBJ_I32_TO_F32 -#define SUBJ_I64_TO_F32 - -#define SUBJ_F32_TO_UI32_RX_MINMAG -#define SUBJ_F32_TO_UI64_RX_MINMAG -#define SUBJ_F32_TO_I32_RX_MINMAG -#define SUBJ_F32_TO_I64_RX_MINMAG -#define SUBJ_F32_ADD -#define SUBJ_F32_SUB -#define SUBJ_F32_MUL -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F32_MULADD -#endif -#endif -#define SUBJ_F32_DIV -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F32_SQRT -#endif -#endif -#define SUBJ_F32_EQ -#define SUBJ_F32_LE -#define SUBJ_F32_LT - -#ifdef FLOAT64 - -#define SUBJ_UI32_TO_F64 -#define SUBJ_UI64_TO_F64 -#define SUBJ_I32_TO_F64 -#define SUBJ_I64_TO_F64 - -#define SUBJ_F32_TO_F64 - -#define SUBJ_F64_TO_UI32_RX_MINMAG -#define SUBJ_F64_TO_UI64_RX_MINMAG -#define SUBJ_F64_TO_I32_RX_MINMAG -#define SUBJ_F64_TO_I64_RX_MINMAG -#define SUBJ_F64_TO_F32 -#define SUBJ_F64_ADD -#define SUBJ_F64_SUB -#define SUBJ_F64_MUL -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F64_MULADD -#endif -#endif -#define SUBJ_F64_DIV -#define SUBJ_F64_SQRT -#define SUBJ_F64_EQ -#define SUBJ_F64_LE -#define SUBJ_F64_LT - -#endif - -#if defined EXTFLOAT80 && defined LONG_DOUBLE_IS_EXTFLOAT80 - -#define SUBJ_UI32_TO_EXTF80 -#define SUBJ_UI64_TO_EXTF80 -#define SUBJ_I32_TO_EXTF80 -#define SUBJ_I64_TO_EXTF80 - -#define SUBJ_F32_TO_EXTF80 -#ifdef FLOAT64 -#define SUBJ_F64_TO_EXTF80 -#endif - -#define SUBJ_EXTF80_TO_UI32_RX_MINMAG -#define SUBJ_EXTF80_TO_UI64_RX_MINMAG -#define SUBJ_EXTF80_TO_I32_RX_MINMAG -#define SUBJ_EXTF80_TO_I64_RX_MINMAG -#define SUBJ_EXTF80_TO_F32 -#ifdef FLOAT64 -#define SUBJ_EXTF80_TO_F64 -#endif -#define SUBJ_EXTF80_ADD -#define SUBJ_EXTF80_SUB -#define SUBJ_EXTF80_MUL -#define SUBJ_EXTF80_DIV -#define SUBJ_EXTF80_EQ -#define SUBJ_EXTF80_LE -#define SUBJ_EXTF80_LT - -#endif - -#if defined FLOAT128 && defined LONG_DOUBLE_IS_FLOAT128 - -#define SUBJ_UI32_TO_F128 -#define SUBJ_UI64_TO_F128 -#define SUBJ_I32_TO_F128 -#define SUBJ_I64_TO_F128 - -#define SUBJ_F32_TO_F128 -#ifdef FLOAT64 -#define SUBJ_F64_TO_F128 -#endif - -#define SUBJ_F128_TO_UI32_RX_MINMAG -#define SUBJ_F128_TO_UI64_RX_MINMAG -#define SUBJ_F128_TO_I32_RX_MINMAG -#define SUBJ_F128_TO_I64_RX_MINMAG -#define SUBJ_F128_TO_F32 -#ifdef FLOAT64 -#define SUBJ_F128_TO_F64 -#endif -#define SUBJ_F128_ADD -#define SUBJ_F128_SUB -#define SUBJ_F128_MUL -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F128_MULADD -#endif -#endif -#define SUBJ_F128_DIV -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F128_SQRT -#endif -#endif -#define SUBJ_F128_EQ -#define SUBJ_F128_LE -#define SUBJ_F128_LT - -#endif - diff --git a/addins/TestFloat-3e/source/subjfloat.h b/addins/TestFloat-3e/source/subjfloat.h deleted file mode 100644 index 43076deee..000000000 --- a/addins/TestFloat-3e/source/subjfloat.h +++ /dev/null @@ -1,516 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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 -#include -#include "softfloat.h" - -extern void (*const subjfloat_functions[])(); - -void subjfloat_setRoundingMode( uint_fast8_t ); -void subjfloat_setExtF80RoundingPrecision( uint_fast8_t ); -uint_fast8_t subjfloat_clearExceptionFlags( void ); - -/*---------------------------------------------------------------------------- -| Subject function declarations. (Many of these functions may not exist.) -| WARNING: -| This file should not normally be modified. Use "subjfloat_config.h" to -| specify which of these functions actually exist. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 -float16_t subj_ui32_to_f16( uint32_t ); -#endif -float32_t subj_ui32_to_f32( uint32_t ); -#ifdef FLOAT64 -float64_t subj_ui32_to_f64( uint32_t ); -#endif -#ifdef EXTFLOAT80 -void subj_ui32_to_extF80M( uint32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_ui32_to_f128M( uint32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t subj_ui64_to_f16( uint64_t ); -#endif -float32_t subj_ui64_to_f32( uint64_t ); -#ifdef FLOAT64 -float64_t subj_ui64_to_f64( uint64_t ); -#endif -#ifdef EXTFLOAT80 -void subj_ui64_to_extF80M( uint64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_ui64_to_f128M( uint64_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t subj_i32_to_f16( int32_t ); -#endif -float32_t subj_i32_to_f32( int32_t ); -#ifdef FLOAT64 -float64_t subj_i32_to_f64( int32_t ); -#endif -#ifdef EXTFLOAT80 -void subj_i32_to_extF80M( int32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_i32_to_f128M( int32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t subj_i64_to_f16( int64_t ); -#endif -float32_t subj_i64_to_f32( int64_t ); -#ifdef FLOAT64 -float64_t subj_i64_to_f64( int64_t ); -#endif -#ifdef EXTFLOAT80 -void subj_i64_to_extF80M( int64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_i64_to_f128M( int64_t, float128_t * ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 - -uint_fast32_t subj_f16_to_ui32_r_near_even( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_minMag( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_min( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_max( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_near_maxMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_near_even( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_minMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_min( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_max( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_near_maxMag( float16_t ); -int_fast32_t subj_f16_to_i32_r_near_even( float16_t ); -int_fast32_t subj_f16_to_i32_r_minMag( float16_t ); -int_fast32_t subj_f16_to_i32_r_min( float16_t ); -int_fast32_t subj_f16_to_i32_r_max( float16_t ); -int_fast32_t subj_f16_to_i32_r_near_maxMag( float16_t ); -int_fast64_t subj_f16_to_i64_r_near_even( float16_t ); -int_fast64_t subj_f16_to_i64_r_minMag( float16_t ); -int_fast64_t subj_f16_to_i64_r_min( float16_t ); -int_fast64_t subj_f16_to_i64_r_max( float16_t ); -int_fast64_t subj_f16_to_i64_r_near_maxMag( float16_t ); - -uint_fast32_t subj_f16_to_ui32_rx_near_even( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_minMag( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_min( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_max( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_near_maxMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_near_even( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_minMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_min( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_max( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_near_maxMag( float16_t ); -int_fast32_t subj_f16_to_i32_rx_near_even( float16_t ); -int_fast32_t subj_f16_to_i32_rx_minMag( float16_t ); -int_fast32_t subj_f16_to_i32_rx_min( float16_t ); -int_fast32_t subj_f16_to_i32_rx_max( float16_t ); -int_fast32_t subj_f16_to_i32_rx_near_maxMag( float16_t ); -int_fast64_t subj_f16_to_i64_rx_near_even( float16_t ); -int_fast64_t subj_f16_to_i64_rx_minMag( float16_t ); -int_fast64_t subj_f16_to_i64_rx_min( float16_t ); -int_fast64_t subj_f16_to_i64_rx_max( float16_t ); -int_fast64_t subj_f16_to_i64_rx_near_maxMag( float16_t ); - -float32_t subj_f16_to_f32( float16_t ); -#ifdef FLOAT64 -float64_t subj_f16_to_f64( float16_t ); -#endif -#ifdef EXTFLOAT80 -void subj_f16_to_extF80M( float16_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_f16_to_f128M( float16_t, float128_t * ); -#endif - -float16_t subj_f16_roundToInt_r_near_even( float16_t ); -float16_t subj_f16_roundToInt_r_minMag( float16_t ); -float16_t subj_f16_roundToInt_r_min( float16_t ); -float16_t subj_f16_roundToInt_r_max( float16_t ); -float16_t subj_f16_roundToInt_r_near_maxMag( float16_t ); -float16_t subj_f16_roundToInt_x( float16_t ); -float16_t subj_f16_add( float16_t, float16_t ); -float16_t subj_f16_sub( float16_t, float16_t ); -float16_t subj_f16_mul( float16_t, float16_t ); -float16_t subj_f16_mulAdd( float16_t, float16_t, float16_t ); -float16_t subj_f16_div( float16_t, float16_t ); -float16_t subj_f16_rem( float16_t, float16_t ); -float16_t subj_f16_sqrt( float16_t ); -bool subj_f16_eq( float16_t, float16_t ); -bool subj_f16_le( float16_t, float16_t ); -bool subj_f16_lt( float16_t, float16_t ); -bool subj_f16_eq_signaling( float16_t, float16_t ); -bool subj_f16_le_quiet( float16_t, float16_t ); -bool subj_f16_lt_quiet( float16_t, float16_t ); - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -uint_fast32_t subj_f32_to_ui32_r_near_even( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_minMag( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_min( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_max( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_near_maxMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_near_even( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_minMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_min( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_max( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_near_maxMag( float32_t ); -int_fast32_t subj_f32_to_i32_r_near_even( float32_t ); -int_fast32_t subj_f32_to_i32_r_minMag( float32_t ); -int_fast32_t subj_f32_to_i32_r_min( float32_t ); -int_fast32_t subj_f32_to_i32_r_max( float32_t ); -int_fast32_t subj_f32_to_i32_r_near_maxMag( float32_t ); -int_fast64_t subj_f32_to_i64_r_near_even( float32_t ); -int_fast64_t subj_f32_to_i64_r_minMag( float32_t ); -int_fast64_t subj_f32_to_i64_r_min( float32_t ); -int_fast64_t subj_f32_to_i64_r_max( float32_t ); -int_fast64_t subj_f32_to_i64_r_near_maxMag( float32_t ); - -uint_fast32_t subj_f32_to_ui32_rx_near_even( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_minMag( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_min( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_max( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_near_maxMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_near_even( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_minMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_min( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_max( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_near_maxMag( float32_t ); -int_fast32_t subj_f32_to_i32_rx_near_even( float32_t ); -int_fast32_t subj_f32_to_i32_rx_minMag( float32_t ); -int_fast32_t subj_f32_to_i32_rx_min( float32_t ); -int_fast32_t subj_f32_to_i32_rx_max( float32_t ); -int_fast32_t subj_f32_to_i32_rx_near_maxMag( float32_t ); -int_fast64_t subj_f32_to_i64_rx_near_even( float32_t ); -int_fast64_t subj_f32_to_i64_rx_minMag( float32_t ); -int_fast64_t subj_f32_to_i64_rx_min( float32_t ); -int_fast64_t subj_f32_to_i64_rx_max( float32_t ); -int_fast64_t subj_f32_to_i64_rx_near_maxMag( float32_t ); - -#ifdef FLOAT16 -float16_t subj_f32_to_f16( float32_t ); -#endif -#ifdef FLOAT64 -float64_t subj_f32_to_f64( float32_t ); -#endif -#ifdef EXTFLOAT80 -void subj_f32_to_extF80M( float32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_f32_to_f128M( float32_t, float128_t * ); -#endif - -float32_t subj_f32_roundToInt_r_near_even( float32_t ); -float32_t subj_f32_roundToInt_r_minMag( float32_t ); -float32_t subj_f32_roundToInt_r_min( float32_t ); -float32_t subj_f32_roundToInt_r_max( float32_t ); -float32_t subj_f32_roundToInt_r_near_maxMag( float32_t ); -float32_t subj_f32_roundToInt_x( float32_t ); -float32_t subj_f32_add( float32_t, float32_t ); -float32_t subj_f32_sub( float32_t, float32_t ); -float32_t subj_f32_mul( float32_t, float32_t ); -float32_t subj_f32_mulAdd( float32_t, float32_t, float32_t ); -float32_t subj_f32_div( float32_t, float32_t ); -float32_t subj_f32_rem( float32_t, float32_t ); -float32_t subj_f32_sqrt( float32_t ); -bool subj_f32_eq( float32_t, float32_t ); -bool subj_f32_le( float32_t, float32_t ); -bool subj_f32_lt( float32_t, float32_t ); -bool subj_f32_eq_signaling( float32_t, float32_t ); -bool subj_f32_le_quiet( float32_t, float32_t ); -bool subj_f32_lt_quiet( float32_t, float32_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT64 - -uint_fast32_t subj_f64_to_ui32_r_near_even( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_minMag( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_min( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_max( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_near_maxMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_near_even( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_minMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_min( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_max( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_near_maxMag( float64_t ); -int_fast32_t subj_f64_to_i32_r_near_even( float64_t ); -int_fast32_t subj_f64_to_i32_r_minMag( float64_t ); -int_fast32_t subj_f64_to_i32_r_min( float64_t ); -int_fast32_t subj_f64_to_i32_r_max( float64_t ); -int_fast32_t subj_f64_to_i32_r_near_maxMag( float64_t ); -int_fast64_t subj_f64_to_i64_r_near_even( float64_t ); -int_fast64_t subj_f64_to_i64_r_minMag( float64_t ); -int_fast64_t subj_f64_to_i64_r_min( float64_t ); -int_fast64_t subj_f64_to_i64_r_max( float64_t ); -int_fast64_t subj_f64_to_i64_r_near_maxMag( float64_t ); - -uint_fast32_t subj_f64_to_ui32_rx_near_even( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_minMag( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_min( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_max( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_near_maxMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_near_even( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_minMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_min( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_max( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_near_maxMag( float64_t ); -int_fast32_t subj_f64_to_i32_rx_near_even( float64_t ); -int_fast32_t subj_f64_to_i32_rx_minMag( float64_t ); -int_fast32_t subj_f64_to_i32_rx_min( float64_t ); -int_fast32_t subj_f64_to_i32_rx_max( float64_t ); -int_fast32_t subj_f64_to_i32_rx_near_maxMag( float64_t ); -int_fast64_t subj_f64_to_i64_rx_near_even( float64_t ); -int_fast64_t subj_f64_to_i64_rx_minMag( float64_t ); -int_fast64_t subj_f64_to_i64_rx_min( float64_t ); -int_fast64_t subj_f64_to_i64_rx_max( float64_t ); -int_fast64_t subj_f64_to_i64_rx_near_maxMag( float64_t ); - -#ifdef FLOAT16 -float16_t subj_f64_to_f16( float64_t ); -#endif -float32_t subj_f64_to_f32( float64_t ); -#ifdef EXTFLOAT80 -void subj_f64_to_extF80M( float64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_f64_to_f128M( float64_t, float128_t * ); -#endif - -float64_t subj_f64_roundToInt_r_near_even( float64_t ); -float64_t subj_f64_roundToInt_r_minMag( float64_t ); -float64_t subj_f64_roundToInt_r_min( float64_t ); -float64_t subj_f64_roundToInt_r_max( float64_t ); -float64_t subj_f64_roundToInt_r_near_maxMag( float64_t ); -float64_t subj_f64_roundToInt_x( float64_t ); -float64_t subj_f64_add( float64_t, float64_t ); -float64_t subj_f64_sub( float64_t, float64_t ); -float64_t subj_f64_mul( float64_t, float64_t ); -float64_t subj_f64_mulAdd( float64_t, float64_t, float64_t ); -float64_t subj_f64_div( float64_t, float64_t ); -float64_t subj_f64_rem( float64_t, float64_t ); -float64_t subj_f64_sqrt( float64_t ); -bool subj_f64_eq( float64_t, float64_t ); -bool subj_f64_le( float64_t, float64_t ); -bool subj_f64_lt( float64_t, float64_t ); -bool subj_f64_eq_signaling( float64_t, float64_t ); -bool subj_f64_le_quiet( float64_t, float64_t ); -bool subj_f64_lt_quiet( float64_t, float64_t ); - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - -uint_fast32_t subj_extF80M_to_ui32_r_near_even( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_minMag( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_min( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_max( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_near_maxMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_near_even( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_minMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_min( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_max( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_near_maxMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_near_even( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_minMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_min( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_max( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_near_maxMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_near_even( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_minMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_min( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_max( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_near_maxMag( const extFloat80_t * ); - -uint_fast32_t subj_extF80M_to_ui32_rx_near_even( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_minMag( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_min( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_max( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_near_maxMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_near_even( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_minMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_min( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_max( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_near_maxMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_near_even( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_minMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_min( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_max( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_near_maxMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_near_even( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_minMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_min( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_max( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_near_maxMag( const extFloat80_t * ); - -#ifdef FLOAT16 -float16_t subj_extF80M_to_f16( const extFloat80_t * ); -#endif -float32_t subj_extF80M_to_f32( const extFloat80_t * ); -#ifdef FLOAT64 -float64_t subj_extF80M_to_f64( const extFloat80_t * ); -#endif -#ifdef EXTFLOAT80 -void subj_extF80M_to_f128M( const extFloat80_t *, float128_t * ); -#endif - -void - subj_extF80M_roundToInt_r_near_even( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_r_minMag( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_r_min( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_r_max( const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_roundToInt_r_near_maxMag( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_x( const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_add( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_sub( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_mul( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_div( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_rem( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_sqrt( const extFloat80_t *, extFloat80_t * ); -bool subj_extF80M_eq( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_le( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_lt( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_eq_signaling( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_le_quiet( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_lt_quiet( const extFloat80_t *, const extFloat80_t * ); - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT128 - -uint_fast32_t subj_f128M_to_ui32_r_near_even( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_minMag( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_min( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_max( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_near_maxMag( extFloat80_t * ); -uint_fast64_t subj_f128M_to_ui64_r_near_even( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_minMag( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_min( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_max( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_near_maxMag( extFloat80_t * ); -int_fast32_t subj_f128M_to_i32_r_near_even( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_minMag( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_min( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_max( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_near_maxMag( extFloat80_t * ); -int_fast64_t subj_f128M_to_i64_r_near_even( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_minMag( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_min( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_max( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_near_maxMag( extFloat80_t * ); - -uint_fast32_t subj_f128M_to_ui32_rx_near_even( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_minMag( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_min( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_max( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_near_maxMag( extFloat80_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_near_even( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_minMag( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_min( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_max( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_near_maxMag( extFloat80_t * ); -int_fast32_t subj_f128M_to_i32_rx_near_even( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_minMag( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_min( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_max( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_near_maxMag( extFloat80_t * ); -int_fast64_t subj_f128M_to_i64_rx_near_even( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_minMag( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_min( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_max( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_near_maxMag( extFloat80_t * ); - -#ifdef FLOAT16 -float16_t subj_f128M_to_f16( const float128_t * ); -#endif -float32_t subj_f128M_to_f32( const float128_t * ); -#ifdef FLOAT64 -float64_t subj_f128M_to_f64( const float128_t * ); -#endif -#ifdef FLOAT128 -void subj_f128M_to_extF80M( const float128_t *, extFloat80_t * ); -#endif - -void subj_f128M_roundToInt_r_near_even( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_minMag( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_min( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_max( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_near_maxMag( const float128_t, float128_t * ); -void subj_f128M_roundToInt_x( const float128_t, float128_t * ); -void subj_f128M_add( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_sub( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_mul( const float128_t *, const float128_t *, float128_t * ); -void - subj_f128M_mulAdd( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -void subj_f128M_div( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_rem( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_sqrt( const float128_t *, float128_t * ); -bool subj_f128M_eq( const float128_t *, const float128_t * ); -bool subj_f128M_le( const float128_t *, const float128_t * ); -bool subj_f128M_lt( const float128_t *, const float128_t * ); -bool subj_f128M_eq_signaling( const float128_t *, const float128_t * ); -bool subj_f128M_le_quiet( const float128_t *, const float128_t * ); -bool subj_f128M_lt_quiet( const float128_t *, const float128_t * ); - -#endif - diff --git a/addins/TestFloat-3e/source/subjfloat_functions.c b/addins/TestFloat-3e/source/subjfloat_functions.c deleted file mode 100644 index 4d3ff6248..000000000 --- a/addins/TestFloat-3e/source/subjfloat_functions.c +++ /dev/null @@ -1,1810 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 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 -#include "platform.h" -#include "subjfloat_config.h" -#include "subjfloat.h" -#include "functions.h" - -typedef void genericFuncType(); - -/*---------------------------------------------------------------------------- -| WARNING: -| This file should not normally be modified. See "subjfloat_config.h" -| instead. -| The order of these array entries must match the order in the array -| `standardFunctionInfos'. Be careful about making changes. -*----------------------------------------------------------------------------*/ - -genericFuncType *const subjfloat_functions[] = { - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 -#ifdef SUBJ_UI32_TO_F16 - (genericFuncType *) subj_ui32_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_UI32_TO_F32 - (genericFuncType *) subj_ui32_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI32_TO_F64 - (genericFuncType *) subj_ui32_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI32_TO_EXTF80 - (genericFuncType *) subj_ui32_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI32_TO_F128 - (genericFuncType *) subj_ui32_to_f128M, -#else - 0, -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_UI64_TO_F16 - (genericFuncType *) subj_ui64_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_UI64_TO_F32 - (genericFuncType *) subj_ui64_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI64_TO_F64 - (genericFuncType *) subj_ui64_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI64_TO_EXTF80 - (genericFuncType *) subj_ui64_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI64_TO_F128 - (genericFuncType *) subj_ui64_to_f128M, -#else - 0, -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I32_TO_F16 - (genericFuncType *) subj_i32_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_I32_TO_F32 - (genericFuncType *) subj_i32_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I32_TO_F64 - (genericFuncType *) subj_i32_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I32_TO_EXTF80 - (genericFuncType *) subj_i32_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I32_TO_F128 - (genericFuncType *) subj_i32_to_f128M, -#else - 0, -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I64_TO_F16 - (genericFuncType *) subj_i64_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_I64_TO_F32 - (genericFuncType *) subj_i64_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I64_TO_F64 - (genericFuncType *) subj_i64_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I64_TO_EXTF80 - (genericFuncType *) subj_i64_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I64_TO_F128 - (genericFuncType *) subj_i64_to_f128M, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 -#ifdef SUBJ_F16_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_MINMAG - (genericFuncType *) subj_f16_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_MIN - (genericFuncType *) subj_f16_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_MAX - (genericFuncType *) subj_f16_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_MINMAG - (genericFuncType *) subj_f16_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_MIN - (genericFuncType *) subj_f16_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_MAX - (genericFuncType *) subj_f16_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_MINMAG - (genericFuncType *) subj_f16_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_MIN - (genericFuncType *) subj_f16_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_MAX - (genericFuncType *) subj_f16_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_MINMAG - (genericFuncType *) subj_f16_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_MIN - (genericFuncType *) subj_f16_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_MAX - (genericFuncType *) subj_f16_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f16_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_MIN - (genericFuncType *) subj_f16_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_MAX - (genericFuncType *) subj_f16_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f16_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_MIN - (genericFuncType *) subj_f16_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_MAX - (genericFuncType *) subj_f16_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_MINMAG - (genericFuncType *) subj_f16_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_MIN - (genericFuncType *) subj_f16_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_MAX - (genericFuncType *) subj_f16_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_MINMAG - (genericFuncType *) subj_f16_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_MIN - (genericFuncType *) subj_f16_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_MAX - (genericFuncType *) subj_f16_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_F32 - (genericFuncType *) subj_f16_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F16_TO_F64 - (genericFuncType *) subj_f16_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F16_TO_EXTF80 - (genericFuncType *) subj_f16_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F16_TO_F128 - (genericFuncType *) subj_f16_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f16_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f16_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f16_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f16_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_X - (genericFuncType *) subj_f16_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F16_ADD - (genericFuncType *) subj_f16_add, -#else - 0, -#endif -#ifdef SUBJ_F16_SUB - (genericFuncType *) subj_f16_sub, -#else - 0, -#endif -#ifdef SUBJ_F16_MUL - (genericFuncType *) subj_f16_mul, -#else - 0, -#endif -#ifdef SUBJ_F16_MULADD - (genericFuncType *) subj_f16_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F16_DIV - (genericFuncType *) subj_f16_div, -#else - 0, -#endif -#ifdef SUBJ_F16_REM - (genericFuncType *) subj_f16_rem, -#else - 0, -#endif -#ifdef SUBJ_F16_SQRT - (genericFuncType *) subj_f16_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F16_EQ - (genericFuncType *) subj_f16_eq, -#else - 0, -#endif -#ifdef SUBJ_F16_LE - (genericFuncType *) subj_f16_le, -#else - 0, -#endif -#ifdef SUBJ_F16_LT - (genericFuncType *) subj_f16_lt, -#else - 0, -#endif -#ifdef SUBJ_F16_EQ_SIGNALING - (genericFuncType *) subj_f16_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F16_LE_QUIET - (genericFuncType *) subj_f16_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F16_LT_QUIET - (genericFuncType *) subj_f16_lt_quiet, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef SUBJ_F32_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_MINMAG - (genericFuncType *) subj_f32_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_MIN - (genericFuncType *) subj_f32_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_MAX - (genericFuncType *) subj_f32_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_MINMAG - (genericFuncType *) subj_f32_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_MIN - (genericFuncType *) subj_f32_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_MAX - (genericFuncType *) subj_f32_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_MINMAG - (genericFuncType *) subj_f32_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_MIN - (genericFuncType *) subj_f32_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_MAX - (genericFuncType *) subj_f32_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_MINMAG - (genericFuncType *) subj_f32_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_MIN - (genericFuncType *) subj_f32_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_MAX - (genericFuncType *) subj_f32_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f32_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_MIN - (genericFuncType *) subj_f32_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_MAX - (genericFuncType *) subj_f32_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f32_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_MIN - (genericFuncType *) subj_f32_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_MAX - (genericFuncType *) subj_f32_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_MINMAG - (genericFuncType *) subj_f32_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_MIN - (genericFuncType *) subj_f32_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_MAX - (genericFuncType *) subj_f32_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_MINMAG - (genericFuncType *) subj_f32_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_MIN - (genericFuncType *) subj_f32_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_MAX - (genericFuncType *) subj_f32_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_F32_TO_F16 - (genericFuncType *) subj_f32_to_f16, -#else - 0, -#endif -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F32_TO_F64 - (genericFuncType *) subj_f32_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F32_TO_EXTF80 - (genericFuncType *) subj_f32_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F32_TO_F128 - (genericFuncType *) subj_f32_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f32_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f32_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f32_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f32_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_X - (genericFuncType *) subj_f32_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F32_ADD - (genericFuncType *) subj_f32_add, -#else - 0, -#endif -#ifdef SUBJ_F32_SUB - (genericFuncType *) subj_f32_sub, -#else - 0, -#endif -#ifdef SUBJ_F32_MUL - (genericFuncType *) subj_f32_mul, -#else - 0, -#endif -#ifdef SUBJ_F32_MULADD - (genericFuncType *) subj_f32_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F32_DIV - (genericFuncType *) subj_f32_div, -#else - 0, -#endif -#ifdef SUBJ_F32_REM - (genericFuncType *) subj_f32_rem, -#else - 0, -#endif -#ifdef SUBJ_F32_SQRT - (genericFuncType *) subj_f32_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F32_EQ - (genericFuncType *) subj_f32_eq, -#else - 0, -#endif -#ifdef SUBJ_F32_LE - (genericFuncType *) subj_f32_le, -#else - 0, -#endif -#ifdef SUBJ_F32_LT - (genericFuncType *) subj_f32_lt, -#else - 0, -#endif -#ifdef SUBJ_F32_EQ_SIGNALING - (genericFuncType *) subj_f32_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F32_LE_QUIET - (genericFuncType *) subj_f32_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F32_LT_QUIET - (genericFuncType *) subj_f32_lt_quiet, -#else - 0, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 -#ifdef SUBJ_F64_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_MINMAG - (genericFuncType *) subj_f64_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_MIN - (genericFuncType *) subj_f64_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_MAX - (genericFuncType *) subj_f64_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_MINMAG - (genericFuncType *) subj_f64_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_MIN - (genericFuncType *) subj_f64_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_MAX - (genericFuncType *) subj_f64_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_MINMAG - (genericFuncType *) subj_f64_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_MIN - (genericFuncType *) subj_f64_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_MAX - (genericFuncType *) subj_f64_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_MINMAG - (genericFuncType *) subj_f64_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_MIN - (genericFuncType *) subj_f64_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_MAX - (genericFuncType *) subj_f64_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f64_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_MIN - (genericFuncType *) subj_f64_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_MAX - (genericFuncType *) subj_f64_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f64_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_MIN - (genericFuncType *) subj_f64_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_MAX - (genericFuncType *) subj_f64_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_MINMAG - (genericFuncType *) subj_f64_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_MIN - (genericFuncType *) subj_f64_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_MAX - (genericFuncType *) subj_f64_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_MINMAG - (genericFuncType *) subj_f64_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_MIN - (genericFuncType *) subj_f64_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_MAX - (genericFuncType *) subj_f64_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_F64_TO_F16 - (genericFuncType *) subj_f64_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_F64_TO_F32 - (genericFuncType *) subj_f64_to_f32, -#else - 0, -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F64_TO_EXTF80 - (genericFuncType *) subj_f64_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F64_TO_F128 - (genericFuncType *) subj_f64_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f64_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f64_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f64_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f64_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_X - (genericFuncType *) subj_f64_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F64_ADD - (genericFuncType *) subj_f64_add, -#else - 0, -#endif -#ifdef SUBJ_F64_SUB - (genericFuncType *) subj_f64_sub, -#else - 0, -#endif -#ifdef SUBJ_F64_MUL - (genericFuncType *) subj_f64_mul, -#else - 0, -#endif -#ifdef SUBJ_F64_MULADD - (genericFuncType *) subj_f64_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F64_DIV - (genericFuncType *) subj_f64_div, -#else - 0, -#endif -#ifdef SUBJ_F64_REM - (genericFuncType *) subj_f64_rem, -#else - 0, -#endif -#ifdef SUBJ_F64_SQRT - (genericFuncType *) subj_f64_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F64_EQ - (genericFuncType *) subj_f64_eq, -#else - 0, -#endif -#ifdef SUBJ_F64_LE - (genericFuncType *) subj_f64_le, -#else - 0, -#endif -#ifdef SUBJ_F64_LT - (genericFuncType *) subj_f64_lt, -#else - 0, -#endif -#ifdef SUBJ_F64_EQ_SIGNALING - (genericFuncType *) subj_f64_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F64_LE_QUIET - (genericFuncType *) subj_f64_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F64_LT_QUIET - (genericFuncType *) subj_f64_lt_quiet, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 -#ifdef SUBJ_EXTF80_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_MINMAG - (genericFuncType *) subj_extF80M_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_MIN - (genericFuncType *) subj_extF80M_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_MAX - (genericFuncType *) subj_extF80M_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_MINMAG - (genericFuncType *) subj_extF80M_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_MIN - (genericFuncType *) subj_extF80M_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_MAX - (genericFuncType *) subj_extF80M_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_MINMAG - (genericFuncType *) subj_extF80M_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_MIN - (genericFuncType *) subj_extF80M_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_MAX - (genericFuncType *) subj_extF80M_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_MINMAG - (genericFuncType *) subj_extF80M_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_MIN - (genericFuncType *) subj_extF80M_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_MAX - (genericFuncType *) subj_extF80M_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_MINMAG - (genericFuncType *) subj_extF80M_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_MIN - (genericFuncType *) subj_extF80M_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_MAX - (genericFuncType *) subj_extF80M_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_MINMAG - (genericFuncType *) subj_extF80M_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_MIN - (genericFuncType *) subj_extF80M_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_MAX - (genericFuncType *) subj_extF80M_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_MINMAG - (genericFuncType *) subj_extF80M_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_MIN - (genericFuncType *) subj_extF80M_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_MAX - (genericFuncType *) subj_extF80M_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_MINMAG - (genericFuncType *) subj_extF80M_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_MIN - (genericFuncType *) subj_extF80M_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_MAX - (genericFuncType *) subj_extF80M_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_EXTF80_TO_F16 - (genericFuncType *) subj_extF80M_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_EXTF80_TO_F32 - (genericFuncType *) subj_extF80M_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_EXTF80_TO_F64 - (genericFuncType *) subj_extF80M_to_f64, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_EXTF80_TO_F128 - (genericFuncType *) subj_extF80M_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_extF80M_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_MIN - (genericFuncType *) subj_extF80M_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_MAX - (genericFuncType *) subj_extF80M_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_X - (genericFuncType *) subj_extF80M_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ADD - (genericFuncType *) subj_extF80M_add, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_SUB - (genericFuncType *) subj_extF80M_sub, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_MUL - (genericFuncType *) subj_extF80M_mul, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_DIV - (genericFuncType *) subj_extF80M_div, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_REM - (genericFuncType *) subj_extF80M_rem, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_SQRT - (genericFuncType *) subj_extF80M_sqrt, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_EQ - (genericFuncType *) subj_extF80M_eq, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LE - (genericFuncType *) subj_extF80M_le, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LT - (genericFuncType *) subj_extF80M_lt, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_EQ_SIGNALING - (genericFuncType *) subj_extF80M_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LE_QUIET - (genericFuncType *) subj_extF80M_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LT_QUIET - (genericFuncType *) subj_extF80M_lt_quiet, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 -#ifdef SUBJ_F128_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_MINMAG - (genericFuncType *) subj_f128M_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_MIN - (genericFuncType *) subj_f128M_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_MAX - (genericFuncType *) subj_f128M_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_MINMAG - (genericFuncType *) subj_f128M_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_MIN - (genericFuncType *) subj_f128M_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_MAX - (genericFuncType *) subj_f128M_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_MINMAG - (genericFuncType *) subj_f128M_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_MIN - (genericFuncType *) subj_f128M_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_MAX - (genericFuncType *) subj_f128M_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_MINMAG - (genericFuncType *) subj_f128M_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_MIN - (genericFuncType *) subj_f128M_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_MAX - (genericFuncType *) subj_f128M_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f128M_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_MIN - (genericFuncType *) subj_f128M_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_MAX - (genericFuncType *) subj_f128M_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f128M_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_MIN - (genericFuncType *) subj_f128M_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_MAX - (genericFuncType *) subj_f128M_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_MINMAG - (genericFuncType *) subj_f128M_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_MIN - (genericFuncType *) subj_f128M_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_MAX - (genericFuncType *) subj_f128M_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_MINMAG - (genericFuncType *) subj_f128M_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_MIN - (genericFuncType *) subj_f128M_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_MAX - (genericFuncType *) subj_f128M_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_F128_TO_F16 - (genericFuncType *) subj_f128M_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_F128_TO_F32 - (genericFuncType *) subj_f128M_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F128_TO_F64 - (genericFuncType *) subj_f128M_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F128_TO_EXTF80 - (genericFuncType *) subj_f128M_to_extF80M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f128M_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f128M_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f128M_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f128M_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_X - (genericFuncType *) subj_f128M_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F128_ADD - (genericFuncType *) subj_f128M_add, -#else - 0, -#endif -#ifdef SUBJ_F128_SUB - (genericFuncType *) subj_f128M_sub, -#else - 0, -#endif -#ifdef SUBJ_F128_MUL - (genericFuncType *) subj_f128M_mul, -#else - 0, -#endif -#ifdef SUBJ_F128_MULADD - (genericFuncType *) subj_f128M_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F128_DIV - (genericFuncType *) subj_f128M_div, -#else - 0, -#endif -#ifdef SUBJ_F128_REM - (genericFuncType *) subj_f128M_rem, -#else - 0, -#endif -#ifdef SUBJ_F128_SQRT - (genericFuncType *) subj_f128M_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F128_EQ - (genericFuncType *) subj_f128M_eq, -#else - 0, -#endif -#ifdef SUBJ_F128_LE - (genericFuncType *) subj_f128M_le, -#else - 0, -#endif -#ifdef SUBJ_F128_LT - (genericFuncType *) subj_f128M_lt, -#else - 0, -#endif -#ifdef SUBJ_F128_EQ_SIGNALING - (genericFuncType *) subj_f128M_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F128_LE_QUIET - (genericFuncType *) subj_f128M_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F128_LT_QUIET - (genericFuncType *) subj_f128M_lt_quiet, -#else - 0, -#endif -#endif -}; - diff --git a/addins/TestFloat-3e/source/testLoops.h b/addins/TestFloat-3e/source/testLoops.h deleted file mode 100644 index e198eaefb..000000000 --- a/addins/TestFloat-3e/source/testLoops.h +++ /dev/null @@ -1,578 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include -#include -#include "softfloat.h" - -extern bool testLoops_forever; - -extern uint_fast8_t *testLoops_trueFlagsPtr; -extern uint_fast8_t (*testLoops_subjFlagsFunction)( void ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 -void test_a_ui32_z_f16( float16_t ( uint32_t ), float16_t ( uint32_t ) ); -#endif -void test_a_ui32_z_f32( float32_t ( uint32_t ), float32_t ( uint32_t ) ); -#ifdef FLOAT64 -void test_a_ui32_z_f64( float64_t ( uint32_t ), float64_t ( uint32_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_ui32_z_extF80( - void ( uint32_t, extFloat80_t * ), void ( uint32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_ui32_z_f128( - void ( uint32_t, float128_t * ), void ( uint32_t, float128_t * ) - ); -#endif -#ifdef FLOAT16 -void test_a_ui64_z_f16( float16_t ( uint64_t ), float16_t ( uint64_t ) ); -#endif -void test_a_ui64_z_f32( float32_t ( uint64_t ), float32_t ( uint64_t ) ); -#ifdef FLOAT64 -void test_a_ui64_z_f64( float64_t ( uint64_t ), float64_t ( uint64_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_ui64_z_extF80( - void ( uint64_t, extFloat80_t * ), void ( uint64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_ui64_z_f128( - void ( uint64_t, float128_t * ), void ( uint64_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void test_a_i32_z_f16( float16_t ( int32_t ), float16_t ( int32_t ) ); -#endif -void test_a_i32_z_f32( float32_t ( int32_t ), float32_t ( int32_t ) ); -#ifdef FLOAT64 -void test_a_i32_z_f64( float64_t ( int32_t ), float64_t ( int32_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_i32_z_extF80( - void ( int32_t, extFloat80_t * ), void ( int32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_i32_z_f128( - void ( int32_t, float128_t * ), void ( int32_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void test_a_i64_z_f16( float16_t ( int64_t ), float16_t ( int64_t ) ); -#endif -void test_a_i64_z_f32( float32_t ( int64_t ), float32_t ( int64_t ) ); -#ifdef FLOAT64 -void test_a_i64_z_f64( float64_t ( int64_t ), float64_t ( int64_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_i64_z_extF80( - void ( int64_t, extFloat80_t * ), void ( int64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_i64_z_f128( - void ( int64_t, float128_t * ), void ( int64_t, float128_t * ) ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 -void - test_a_f16_z_ui32_rx( - uint_fast32_t ( float16_t, uint_fast8_t, bool ), - uint_fast32_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_ui64_rx( - uint_fast64_t ( float16_t, uint_fast8_t, bool ), - uint_fast64_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_i32_rx( - int_fast32_t ( float16_t, uint_fast8_t, bool ), - int_fast32_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_i64_rx( - int_fast64_t ( float16_t, uint_fast8_t, bool ), - int_fast64_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_ui32_x( - uint_fast32_t ( float16_t, bool ), uint_fast32_t ( float16_t, bool ), bool - ); -void - test_a_f16_z_ui64_x( - uint_fast64_t ( float16_t, bool ), uint_fast64_t ( float16_t, bool ), bool - ); -void - test_a_f16_z_i32_x( - int_fast32_t ( float16_t, bool ), int_fast32_t ( float16_t, bool ), bool - ); -void - test_a_f16_z_i64_x( - int_fast64_t ( float16_t, bool ), int_fast64_t ( float16_t, bool ), bool - ); -void test_a_f16_z_f32( float32_t ( float16_t ), float32_t ( float16_t ) ); -#ifdef FLOAT64 -void test_a_f16_z_f64( float64_t ( float16_t ), float64_t ( float16_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_f16_z_extF80( - void ( float16_t, extFloat80_t * ), void ( float16_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_f16_z_f128( - void ( float16_t, float128_t * ), void ( float16_t, float128_t * ) ); -#endif -void test_az_f16( float16_t ( float16_t ), float16_t ( float16_t ) ); -void - test_az_f16_rx( - float16_t ( float16_t, uint_fast8_t, bool ), - float16_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_abz_f16( - float16_t ( float16_t, float16_t ), float16_t ( float16_t, float16_t ) ); -void - test_abcz_f16( - float16_t ( float16_t, float16_t, float16_t ), - float16_t ( float16_t, float16_t, float16_t ) - ); -void - test_ab_f16_z_bool( - bool ( float16_t, float16_t ), bool ( float16_t, float16_t ) ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -void - test_a_f32_z_ui32_rx( - uint_fast32_t ( float32_t, uint_fast8_t, bool ), - uint_fast32_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_ui64_rx( - uint_fast64_t ( float32_t, uint_fast8_t, bool ), - uint_fast64_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_i32_rx( - int_fast32_t ( float32_t, uint_fast8_t, bool ), - int_fast32_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_i64_rx( - int_fast64_t ( float32_t, uint_fast8_t, bool ), - int_fast64_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_ui32_x( - uint_fast32_t ( float32_t, bool ), uint_fast32_t ( float32_t, bool ), bool - ); -void - test_a_f32_z_ui64_x( - uint_fast64_t ( float32_t, bool ), uint_fast64_t ( float32_t, bool ), bool - ); -void - test_a_f32_z_i32_x( - int_fast32_t ( float32_t, bool ), int_fast32_t ( float32_t, bool ), bool - ); -void - test_a_f32_z_i64_x( - int_fast64_t ( float32_t, bool ), int_fast64_t ( float32_t, bool ), bool - ); -#ifdef FLOAT16 -void test_a_f32_z_f16( float16_t ( float32_t ), float16_t ( float32_t ) ); -#endif -#ifdef FLOAT64 -void test_a_f32_z_f64( float64_t ( float32_t ), float64_t ( float32_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_f32_z_extF80( - void ( float32_t, extFloat80_t * ), void ( float32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_f32_z_f128( - void ( float32_t, float128_t * ), void ( float32_t, float128_t * ) ); -#endif -void test_az_f32( float32_t ( float32_t ), float32_t ( float32_t ) ); -void - test_az_f32_rx( - float32_t ( float32_t, uint_fast8_t, bool ), - float32_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_abz_f32( - float32_t ( float32_t, float32_t ), float32_t ( float32_t, float32_t ) ); -void - test_abcz_f32( - float32_t ( float32_t, float32_t, float32_t ), - float32_t ( float32_t, float32_t, float32_t ) - ); -void - test_ab_f32_z_bool( - bool ( float32_t, float32_t ), bool ( float32_t, float32_t ) ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT64 -void - test_a_f64_z_ui32_rx( - uint_fast32_t ( float64_t, uint_fast8_t, bool ), - uint_fast32_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_ui64_rx( - uint_fast64_t ( float64_t, uint_fast8_t, bool ), - uint_fast64_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_i32_rx( - int_fast32_t ( float64_t, uint_fast8_t, bool ), - int_fast32_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_i64_rx( - int_fast64_t ( float64_t, uint_fast8_t, bool ), - int_fast64_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_ui32_x( - uint_fast32_t ( float64_t, bool ), uint_fast32_t ( float64_t, bool ), bool - ); -void - test_a_f64_z_ui64_x( - uint_fast64_t ( float64_t, bool ), uint_fast64_t ( float64_t, bool ), bool - ); -void - test_a_f64_z_i32_x( - int_fast32_t ( float64_t, bool ), int_fast32_t ( float64_t, bool ), bool - ); -void - test_a_f64_z_i64_x( - int_fast64_t ( float64_t, bool ), int_fast64_t ( float64_t, bool ), bool - ); -#ifdef FLOAT16 -void test_a_f64_z_f16( float16_t ( float64_t ), float16_t ( float64_t ) ); -#endif -void test_a_f64_z_f32( float32_t ( float64_t ), float32_t ( float64_t ) ); -#ifdef EXTFLOAT80 -void - test_a_f64_z_extF80( - void ( float64_t, extFloat80_t * ), void ( float64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_f64_z_f128( - void ( float64_t, float128_t * ), void ( float64_t, float128_t * ) ); -#endif -void test_az_f64( float64_t ( float64_t ), float64_t ( float64_t ) ); -void - test_az_f64_rx( - float64_t ( float64_t, uint_fast8_t, bool ), - float64_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_abz_f64( - float64_t ( float64_t, float64_t ), float64_t ( float64_t, float64_t ) ); -void - test_abcz_f64( - float64_t ( float64_t, float64_t, float64_t ), - float64_t ( float64_t, float64_t, float64_t ) - ); -void - test_ab_f64_z_bool( - bool ( float64_t, float64_t ), bool ( float64_t, float64_t ) ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 -void - test_a_extF80_z_ui32_rx( - uint_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_ui64_rx( - uint_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_i32_rx( - int_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - int_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_i64_rx( - int_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - int_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_ui32_x( - uint_fast32_t ( const extFloat80_t *, bool ), - uint_fast32_t ( const extFloat80_t *, bool ), - bool - ); -void - test_a_extF80_z_ui64_x( - uint_fast64_t ( const extFloat80_t *, bool ), - uint_fast64_t ( const extFloat80_t *, bool ), - bool - ); -void - test_a_extF80_z_i32_x( - int_fast32_t ( const extFloat80_t *, bool ), - int_fast32_t ( const extFloat80_t *, bool ), - bool - ); -void - test_a_extF80_z_i64_x( - int_fast64_t ( const extFloat80_t *, bool ), - int_fast64_t ( const extFloat80_t *, bool ), - bool - ); -#ifdef FLOAT16 -void - test_a_extF80_z_f16( - float16_t ( const extFloat80_t * ), float16_t ( const extFloat80_t * ) ); -#endif -void - test_a_extF80_z_f32( - float32_t ( const extFloat80_t * ), float32_t ( const extFloat80_t * ) ); -#ifdef FLOAT64 -void - test_a_extF80_z_f64( - float64_t ( const extFloat80_t * ), float64_t ( const extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_extF80_z_f128( - void ( const extFloat80_t *, float128_t * ), - void ( const extFloat80_t *, float128_t * ) - ); -#endif -void - test_az_extF80( - void ( const extFloat80_t *, extFloat80_t * ), - void ( const extFloat80_t *, extFloat80_t * ) - ); -void - test_az_extF80_rx( - void ( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - void ( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t, - bool - ); -void - test_abz_extF80( - void ( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ), - void ( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) - ); -void - test_ab_extF80_z_bool( - bool ( const extFloat80_t *, const extFloat80_t * ), - bool ( const extFloat80_t *, const extFloat80_t * ) - ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT128 -void - test_a_f128_z_ui32_rx( - uint_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_ui64_rx( - uint_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_i32_rx( - int_fast32_t ( const float128_t *, uint_fast8_t, bool ), - int_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_i64_rx( - int_fast64_t ( const float128_t *, uint_fast8_t, bool ), - int_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_ui32_x( - uint_fast32_t ( const float128_t *, bool ), - uint_fast32_t ( const float128_t *, bool ), - bool - ); -void - test_a_f128_z_ui64_x( - uint_fast64_t ( const float128_t *, bool ), - uint_fast64_t ( const float128_t *, bool ), - bool - ); -void - test_a_f128_z_i32_x( - int_fast32_t ( const float128_t *, bool ), - int_fast32_t ( const float128_t *, bool ), - bool - ); -void - test_a_f128_z_i64_x( - int_fast64_t ( const float128_t *, bool ), - int_fast64_t ( const float128_t *, bool ), - bool - ); -#ifdef FLOAT16 -void - test_a_f128_z_f16( - float16_t ( const float128_t * ), float16_t ( const float128_t * ) ); -#endif -void - test_a_f128_z_f32( - float32_t ( const float128_t * ), float32_t ( const float128_t * ) ); -#ifdef FLOAT64 -void - test_a_f128_z_f64( - float64_t ( const float128_t * ), float64_t ( const float128_t * ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_f128_z_extF80( - void ( const float128_t *, extFloat80_t * ), - void ( const float128_t *, extFloat80_t * ) - ); -#endif -void - test_az_f128( - void ( const float128_t *, float128_t * ), - void ( const float128_t *, float128_t * ) - ); -void - test_az_f128_rx( - void ( const float128_t *, uint_fast8_t, bool, float128_t * ), - void ( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t, - bool - ); -void - test_abz_f128( - void ( const float128_t *, const float128_t *, float128_t * ), - void ( const float128_t *, const float128_t *, float128_t * ) - ); -void - test_abcz_f128( - void - ( const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ), - void - ( const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ); -void - test_ab_f128_z_bool( - bool ( const float128_t *, const float128_t * ), - bool ( const float128_t *, const float128_t * ) - ); -#endif - diff --git a/addins/TestFloat-3e/source/testLoops_common.c b/addins/TestFloat-3e/source/testLoops_common.c deleted file mode 100644 index 1553aa110..000000000 --- a/addins/TestFloat-3e/source/testLoops_common.c +++ /dev/null @@ -1,47 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "testLoops.h" - -bool testLoops_forever = false; - -uint_fast8_t *testLoops_trueFlagsPtr; -uint_fast8_t (*testLoops_subjFlagsFunction)( void ); - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f128.c b/addins/TestFloat-3e/source/test_a_extF80_z_f128.c deleted file mode 100644 index 505ef1279..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f128.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined EXTFLOAT80 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f128( - void trueFunction( const extFloat80_t *, float128_t * ), - void subjFunction( const extFloat80_t *, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f16.c b/addins/TestFloat-3e/source/test_a_extF80_z_f16.c deleted file mode 100644 index e6a6651d2..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f16.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f16( - float16_t trueFunction( const extFloat80_t * ), - float16_t subjFunction( const extFloat80_t * ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f32.c b/addins/TestFloat-3e/source/test_a_extF80_z_f32.c deleted file mode 100644 index c752515d1..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f32.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f32( - float32_t trueFunction( const extFloat80_t * ), - float32_t subjFunction( const extFloat80_t * ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f64.c b/addins/TestFloat-3e/source/test_a_extF80_z_f64.c deleted file mode 100644 index 4d24fb194..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f64.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f64( - float64_t trueFunction( const extFloat80_t * ), - float64_t subjFunction( const extFloat80_t * ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_i32_rx.c deleted file mode 100644 index fd2eea41d..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i32_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i32_rx( - int_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - int_fast32_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i32_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_i32_x.c deleted file mode 100644 index 2260614d6..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i32_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i32_x( - int_fast32_t trueFunction( const extFloat80_t *, bool ), - int_fast32_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_i64_rx.c deleted file mode 100644 index 0b99e99b4..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i64_rx.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i64_rx( - int_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - int_fast64_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i64_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_i64_x.c deleted file mode 100644 index 9e7a5b179..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i64_x.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i64_x( - int_fast64_t trueFunction( const extFloat80_t *, bool ), - int_fast64_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui32_rx.c deleted file mode 100644 index fcc92da85..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui32_rx( - uint_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast32_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui32_x.c deleted file mode 100644 index ff16f1998..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui32_x( - uint_fast32_t trueFunction( const extFloat80_t *, bool ), - uint_fast32_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui64_rx.c deleted file mode 100644 index efab40e80..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui64_rx( - uint_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast64_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui64_x.c deleted file mode 100644 index 1c1d04ef1..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui64_x( - uint_fast64_t trueFunction( const extFloat80_t *, bool ), - uint_fast64_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_extF80.c b/addins/TestFloat-3e/source/test_a_f128_z_extF80.c deleted file mode 100644 index 1bb3e19d2..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_extF80.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined EXTFLOAT80 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_extF80( - void trueFunction( const float128_t *, extFloat80_t * ), - void subjFunction( const float128_t *, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_f16.c b/addins/TestFloat-3e/source/test_a_f128_z_f16.c deleted file mode 100644 index eb8b3fbec..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_f16.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_f16( - float16_t trueFunction( const float128_t * ), - float16_t subjFunction( const float128_t * ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_f32.c b/addins/TestFloat-3e/source/test_a_f128_z_f32.c deleted file mode 100644 index 7df7b1fb0..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_f32.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_f32( - float32_t trueFunction( const float128_t * ), - float32_t subjFunction( const float128_t * ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_f64.c b/addins/TestFloat-3e/source/test_a_f128_z_f64.c deleted file mode 100644 index 96ac1e00a..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_f64.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_f64( - float64_t trueFunction( const float128_t * ), - float64_t subjFunction( const float128_t * ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_i32_rx.c deleted file mode 100644 index 7aa68b9fd..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i32_rx.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i32_rx( - int_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - int_fast32_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f128_z_i32_x.c deleted file mode 100644 index 3f2b1cb68..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i32_x.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i32_x( - int_fast32_t trueFunction( const float128_t *, bool ), - int_fast32_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_i64_rx.c deleted file mode 100644 index cac33bf3c..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i64_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i64_rx( - int_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - int_fast64_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f128_z_i64_x.c deleted file mode 100644 index c5004c879..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i64_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i64_x( - int_fast64_t trueFunction( const float128_t *, bool ), - int_fast64_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_ui32_rx.c deleted file mode 100644 index e4ae8cdfa..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui32_rx( - uint_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast32_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f128_z_ui32_x.c deleted file mode 100644 index 9493f4e67..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui32_x( - uint_fast32_t trueFunction( const float128_t *, bool ), - uint_fast32_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_ui64_rx.c deleted file mode 100644 index 2f336de34..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui64_rx( - uint_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast64_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f128_z_ui64_x.c deleted file mode 100644 index 37f703a4b..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui64_x( - uint_fast64_t trueFunction( const float128_t *, bool ), - uint_fast64_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_extF80.c b/addins/TestFloat-3e/source/test_a_f16_z_extF80.c deleted file mode 100644 index d8f39f6fd..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_extF80.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_extF80( - void trueFunction( float16_t, extFloat80_t * ), - void subjFunction( float16_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f16_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_f128.c b/addins/TestFloat-3e/source/test_a_f16_z_f128.c deleted file mode 100644 index 433418b63..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_f128.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_f128( - void trueFunction( float16_t, float128_t * ), - void subjFunction( float16_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f16_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_f32.c b/addins/TestFloat-3e/source/test_a_f16_z_f32.c deleted file mode 100644 index 8e8460787..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_f32.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_f32( - float32_t trueFunction( float16_t ), float32_t subjFunction( float16_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_f64.c b/addins/TestFloat-3e/source/test_a_f16_z_f64.c deleted file mode 100644 index bf0f343c5..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_f64.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_f64( - float64_t trueFunction( float16_t ), float64_t subjFunction( float16_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_i32_rx.c deleted file mode 100644 index c73fc7625..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i32_rx.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i32_rx( - int_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - int_fast32_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f16_z_i32_x.c deleted file mode 100644 index 2eaba6f2a..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i32_x.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i32_x( - int_fast32_t trueFunction( float16_t, bool ), - int_fast32_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_i64_rx.c deleted file mode 100644 index e31d3d380..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i64_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i64_rx( - int_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - int_fast64_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f16_z_i64_x.c deleted file mode 100644 index bda01182e..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i64_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i64_x( - int_fast64_t trueFunction( float16_t, bool ), - int_fast64_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_ui32_rx.c deleted file mode 100644 index fc302f7b0..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui32_rx( - uint_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast32_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f16_z_ui32_x.c deleted file mode 100644 index 3905bd39d..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui32_x( - uint_fast32_t trueFunction( float16_t, bool ), - uint_fast32_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_ui64_rx.c deleted file mode 100644 index 9b34ae9cf..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui64_rx( - uint_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast64_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f16_z_ui64_x.c deleted file mode 100644 index 2527de482..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui64_x( - uint_fast64_t trueFunction( float16_t, bool ), - uint_fast64_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_extF80.c b/addins/TestFloat-3e/source/test_a_f32_z_extF80.c deleted file mode 100644 index 000ade09c..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_extF80.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_extF80( - void trueFunction( float32_t, extFloat80_t * ), - void subjFunction( float32_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_f128.c b/addins/TestFloat-3e/source/test_a_f32_z_f128.c deleted file mode 100644 index bc05438b8..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_f128.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_f128( - void trueFunction( float32_t, float128_t * ), - void subjFunction( float32_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_f16.c b/addins/TestFloat-3e/source/test_a_f32_z_f16.c deleted file mode 100644 index b89002c66..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_f16.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_f16( - float16_t trueFunction( float32_t ), float16_t subjFunction( float32_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_f64.c b/addins/TestFloat-3e/source/test_a_f32_z_f64.c deleted file mode 100644 index 19267cbef..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_f64.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_f64( - float64_t trueFunction( float32_t ), float64_t subjFunction( float32_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_i32_rx.c deleted file mode 100644 index d4ff4782c..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i32_rx.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i32_rx( - int_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - int_fast32_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f32_z_i32_x.c deleted file mode 100644 index 4883d19c8..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i32_x.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i32_x( - int_fast32_t trueFunction( float32_t, bool ), - int_fast32_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_i64_rx.c deleted file mode 100644 index d3216bd8f..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i64_rx.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i64_rx( - int_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - int_fast64_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f32_z_i64_x.c deleted file mode 100644 index 4038135d0..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i64_x.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i64_x( - int_fast64_t trueFunction( float32_t, bool ), - int_fast64_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_ui32_rx.c deleted file mode 100644 index 9b120a589..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui32_rx.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui32_rx( - uint_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast32_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f32_z_ui32_x.c deleted file mode 100644 index 18dc88126..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui32_x.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui32_x( - uint_fast32_t trueFunction( float32_t, bool ), - uint_fast32_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_ui64_rx.c deleted file mode 100644 index 2c792c2a1..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui64_rx.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui64_rx( - uint_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast64_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f32_z_ui64_x.c deleted file mode 100644 index 7cf7c3173..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui64_x.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui64_x( - uint_fast64_t trueFunction( float32_t, bool ), - uint_fast64_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_extF80.c b/addins/TestFloat-3e/source/test_a_f64_z_extF80.c deleted file mode 100644 index 76a69acce..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_extF80.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_extF80( - void trueFunction( float64_t, extFloat80_t * ), - void subjFunction( float64_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_f128.c b/addins/TestFloat-3e/source/test_a_f64_z_f128.c deleted file mode 100644 index b53a75e7e..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_f128.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_f128( - void trueFunction( float64_t, float128_t * ), - void subjFunction( float64_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_f16.c b/addins/TestFloat-3e/source/test_a_f64_z_f16.c deleted file mode 100644 index 9f43160b4..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_f16.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_f16( - float16_t trueFunction( float64_t ), float16_t subjFunction( float64_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_f32.c b/addins/TestFloat-3e/source/test_a_f64_z_f32.c deleted file mode 100644 index 48ece56be..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_f32.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_f32( - float32_t trueFunction( float64_t ), float32_t subjFunction( float64_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_i32_rx.c deleted file mode 100644 index 9c0f5ffa7..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i32_rx.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i32_rx( - int_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - int_fast32_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f64_z_i32_x.c deleted file mode 100644 index 5ff5dcb7a..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i32_x.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i32_x( - int_fast32_t trueFunction( float64_t, bool ), - int_fast32_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_i64_rx.c deleted file mode 100644 index ead748726..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i64_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i64_rx( - int_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - int_fast64_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f64_z_i64_x.c deleted file mode 100644 index 03ddce529..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i64_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i64_x( - int_fast64_t trueFunction( float64_t, bool ), - int_fast64_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_ui32_rx.c deleted file mode 100644 index 0aecb2243..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui32_rx( - uint_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast32_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f64_z_ui32_x.c deleted file mode 100644 index 7bf6282bc..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui32_x( - uint_fast32_t trueFunction( float64_t, bool ), - uint_fast32_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_ui64_rx.c deleted file mode 100644 index 48066f61e..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui64_rx( - uint_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast64_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f64_z_ui64_x.c deleted file mode 100644 index 65cecb460..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui64_x( - uint_fast64_t trueFunction( float64_t, bool ), - uint_fast64_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_extF80.c b/addins/TestFloat-3e/source/test_a_i32_z_extF80.c deleted file mode 100644 index deb846e64..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_extF80( - void trueFunction( int32_t, extFloat80_t * ), - void subjFunction( int32_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f128.c b/addins/TestFloat-3e/source/test_a_i32_z_f128.c deleted file mode 100644 index ffb57412e..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f128( - void trueFunction( int32_t, float128_t * ), - void subjFunction( int32_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f16.c b/addins/TestFloat-3e/source/test_a_i32_z_f16.c deleted file mode 100644 index 350d70460..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f16( - float16_t trueFunction( int32_t ), float16_t subjFunction( int32_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f32.c b/addins/TestFloat-3e/source/test_a_i32_z_f32.c deleted file mode 100644 index cd8118aa5..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f32( - float32_t trueFunction( int32_t ), float32_t subjFunction( int32_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f64.c b/addins/TestFloat-3e/source/test_a_i32_z_f64.c deleted file mode 100644 index f9a2feb5e..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f64( - float64_t trueFunction( int32_t ), float64_t subjFunction( int32_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_extF80.c b/addins/TestFloat-3e/source/test_a_i64_z_extF80.c deleted file mode 100644 index c453ab28e..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_extF80( - void trueFunction( int64_t, extFloat80_t * ), - void subjFunction( int64_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f128.c b/addins/TestFloat-3e/source/test_a_i64_z_f128.c deleted file mode 100644 index b79a75533..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f128( - void trueFunction( int64_t, float128_t * ), - void subjFunction( int64_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f16.c b/addins/TestFloat-3e/source/test_a_i64_z_f16.c deleted file mode 100644 index 0f7f4e2a7..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f16( - float16_t trueFunction( int64_t ), float16_t subjFunction( int64_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f32.c b/addins/TestFloat-3e/source/test_a_i64_z_f32.c deleted file mode 100644 index d5bfb0ac8..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f32( - float32_t trueFunction( int64_t ), float32_t subjFunction( int64_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f64.c b/addins/TestFloat-3e/source/test_a_i64_z_f64.c deleted file mode 100644 index 39b07e88e..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f64( - float64_t trueFunction( int64_t ), float64_t subjFunction( int64_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_extF80.c b/addins/TestFloat-3e/source/test_a_ui32_z_extF80.c deleted file mode 100644 index 53d9b0861..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_extF80( - void trueFunction( uint32_t, extFloat80_t * ), - void subjFunction( uint32_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f128.c b/addins/TestFloat-3e/source/test_a_ui32_z_f128.c deleted file mode 100644 index cfa43b6b0..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f128( - void trueFunction( uint32_t, float128_t * ), - void subjFunction( uint32_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f16.c b/addins/TestFloat-3e/source/test_a_ui32_z_f16.c deleted file mode 100644 index 404d1d10e..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f16( - float16_t trueFunction( uint32_t ), float16_t subjFunction( uint32_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f32.c b/addins/TestFloat-3e/source/test_a_ui32_z_f32.c deleted file mode 100644 index c9618e15a..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f32( - float32_t trueFunction( uint32_t ), float32_t subjFunction( uint32_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f64.c b/addins/TestFloat-3e/source/test_a_ui32_z_f64.c deleted file mode 100644 index 00876b7f1..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f64( - float64_t trueFunction( uint32_t ), float64_t subjFunction( uint32_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_extF80.c b/addins/TestFloat-3e/source/test_a_ui64_z_extF80.c deleted file mode 100644 index 4e34e2002..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_extF80( - void trueFunction( uint64_t, extFloat80_t * ), - void subjFunction( uint64_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f128.c b/addins/TestFloat-3e/source/test_a_ui64_z_f128.c deleted file mode 100644 index 81ca81cc8..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f128( - void trueFunction( uint64_t, float128_t * ), - void subjFunction( uint64_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f16.c b/addins/TestFloat-3e/source/test_a_ui64_z_f16.c deleted file mode 100644 index 54e68badf..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f16( - float16_t trueFunction( uint64_t ), float16_t subjFunction( uint64_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f32.c b/addins/TestFloat-3e/source/test_a_ui64_z_f32.c deleted file mode 100644 index 98a0f5020..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f32( - float32_t trueFunction( uint64_t ), float32_t subjFunction( uint64_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f64.c b/addins/TestFloat-3e/source/test_a_ui64_z_f64.c deleted file mode 100644 index 2dc6c64a5..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f64( - float64_t trueFunction( uint64_t ), float64_t subjFunction( uint64_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_extF80_z_bool.c b/addins/TestFloat-3e/source/test_ab_extF80_z_bool.c deleted file mode 100644 index 3270b4f9d..000000000 --- a/addins/TestFloat-3e/source/test_ab_extF80_z_bool.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_extF80_z_bool( - bool trueFunction( const extFloat80_t *, const extFloat80_t * ), - bool subjFunction( const extFloat80_t *, const extFloat80_t * ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, &genCases_extF80_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, &genCases_extF80_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (extF80M_isSignalingNaN( &genCases_extF80_a ) - || extF80M_isSignalingNaN( &genCases_extF80_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_extF80M( - &genCases_extF80_a, &genCases_extF80_b, " " ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_f128_z_bool.c b/addins/TestFloat-3e/source/test_ab_f128_z_bool.c deleted file mode 100644 index 920420295..000000000 --- a/addins/TestFloat-3e/source/test_ab_f128_z_bool.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f128_z_bool( - bool trueFunction( const float128_t *, const float128_t * ), - bool subjFunction( const float128_t *, const float128_t * ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f128_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, &genCases_f128_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, &genCases_f128_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f128M_isSignalingNaN( &genCases_f128_a ) - || f128M_isSignalingNaN( &genCases_f128_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f128M( &genCases_f128_a, &genCases_f128_b ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_f16_z_bool.c b/addins/TestFloat-3e/source/test_ab_f16_z_bool.c deleted file mode 100644 index 712aa71e4..000000000 --- a/addins/TestFloat-3e/source/test_ab_f16_z_bool.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f16_z_bool( - bool trueFunction( float16_t, float16_t ), - bool subjFunction( float16_t, float16_t ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f16_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, genCases_f16_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f16_isSignalingNaN( genCases_f16_a ) - || f16_isSignalingNaN( genCases_f16_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f16( genCases_f16_a, genCases_f16_b ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_f32_z_bool.c b/addins/TestFloat-3e/source/test_ab_f32_z_bool.c deleted file mode 100644 index 01919d5e9..000000000 --- a/addins/TestFloat-3e/source/test_ab_f32_z_bool.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f32_z_bool( - bool trueFunction( float32_t, float32_t ), - bool subjFunction( float32_t, float32_t ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f32_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, genCases_f32_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f32_isSignalingNaN( genCases_f32_a ) - || f32_isSignalingNaN( genCases_f32_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f32( genCases_f32_a, genCases_f32_b ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_ab_f64_z_bool.c b/addins/TestFloat-3e/source/test_ab_f64_z_bool.c deleted file mode 100644 index 599b2bf46..000000000 --- a/addins/TestFloat-3e/source/test_ab_f64_z_bool.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f64_z_bool( - bool trueFunction( float64_t, float64_t ), - bool subjFunction( float64_t, float64_t ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f64_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, genCases_f64_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f64_isSignalingNaN( genCases_f64_a ) - || f64_isSignalingNaN( genCases_f64_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f64( genCases_f64_a, genCases_f64_b, " " ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abcz_f128.c b/addins/TestFloat-3e/source/test_abcz_f128.c deleted file mode 100644 index 94f5bc06c..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f128.c +++ /dev/null @@ -1,125 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f128( - void - trueFunction( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ), - void - subjFunction( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f128M_isSignalingNaN( &genCases_f128_a ) - || f128M_isSignalingNaN( &genCases_f128_b ) - || f128M_isSignalingNaN( &genCases_f128_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f128M( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abcz_f16.c b/addins/TestFloat-3e/source/test_abcz_f16.c deleted file mode 100644 index 6469cb4a3..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f16.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f16( - float16_t trueFunction( float16_t, float16_t, float16_t ), - float16_t subjFunction( float16_t, float16_t, float16_t ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b, genCases_f16_c ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, genCases_f16_b, genCases_f16_c ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f16_isSignalingNaN( genCases_f16_a ) - || f16_isSignalingNaN( genCases_f16_b ) - || f16_isSignalingNaN( genCases_f16_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f16( - genCases_f16_a, genCases_f16_b, genCases_f16_c ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abcz_f32.c b/addins/TestFloat-3e/source/test_abcz_f32.c deleted file mode 100644 index 48ae071b2..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f32.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f32( - float32_t trueFunction( float32_t, float32_t, float32_t ), - float32_t subjFunction( float32_t, float32_t, float32_t ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b, genCases_f32_c ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, genCases_f32_b, genCases_f32_c ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f32_isSignalingNaN( genCases_f32_a ) - || f32_isSignalingNaN( genCases_f32_b ) - || f32_isSignalingNaN( genCases_f32_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f32( - genCases_f32_a, genCases_f32_b, genCases_f32_c ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_abcz_f64.c b/addins/TestFloat-3e/source/test_abcz_f64.c deleted file mode 100644 index 36626a511..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f64.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f64( - float64_t trueFunction( float64_t, float64_t, float64_t ), - float64_t subjFunction( float64_t, float64_t, float64_t ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b, genCases_f64_c ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, genCases_f64_b, genCases_f64_c ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f64_isSignalingNaN( genCases_f64_a ) - || f64_isSignalingNaN( genCases_f64_b ) - || f64_isSignalingNaN( genCases_f64_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f64( - genCases_f64_a, genCases_f64_b, genCases_f64_c ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_extF80.c b/addins/TestFloat-3e/source/test_abz_extF80.c deleted file mode 100644 index c4239f07d..000000000 --- a/addins/TestFloat-3e/source/test_abz_extF80.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_extF80( - void - trueFunction( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ), - void - subjFunction( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &genCases_extF80_b, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, &genCases_extF80_b, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (extF80M_isSignalingNaN( &genCases_extF80_a ) - || extF80M_isSignalingNaN( &genCases_extF80_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_extF80M( - &genCases_extF80_a, &genCases_extF80_b, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_f128.c b/addins/TestFloat-3e/source/test_abz_f128.c deleted file mode 100644 index 6fe68415e..000000000 --- a/addins/TestFloat-3e/source/test_abz_f128.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f128( - void trueFunction( const float128_t *, const float128_t *, float128_t * ), - void subjFunction( const float128_t *, const float128_t *, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &genCases_f128_b, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, &genCases_f128_b, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f128M_isSignalingNaN( &genCases_f128_a ) - || f128M_isSignalingNaN( &genCases_f128_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f128M( &genCases_f128_a, &genCases_f128_b ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_f16.c b/addins/TestFloat-3e/source/test_abz_f16.c deleted file mode 100644 index cc5e9436f..000000000 --- a/addins/TestFloat-3e/source/test_abz_f16.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f16( - float16_t trueFunction( float16_t, float16_t ), - float16_t subjFunction( float16_t, float16_t ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, genCases_f16_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f16_isSignalingNaN( genCases_f16_a ) - || f16_isSignalingNaN( genCases_f16_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f16( genCases_f16_a, genCases_f16_b ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_f32.c b/addins/TestFloat-3e/source/test_abz_f32.c deleted file mode 100644 index cd595b6c9..000000000 --- a/addins/TestFloat-3e/source/test_abz_f32.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f32( - float32_t trueFunction( float32_t, float32_t ), - float32_t subjFunction( float32_t, float32_t ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, genCases_f32_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f32_isSignalingNaN( genCases_f32_a ) - || f32_isSignalingNaN( genCases_f32_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f32( genCases_f32_a, genCases_f32_b ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_abz_f64.c b/addins/TestFloat-3e/source/test_abz_f64.c deleted file mode 100644 index f54b90350..000000000 --- a/addins/TestFloat-3e/source/test_abz_f64.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f64( - float64_t trueFunction( float64_t, float64_t ), - float64_t subjFunction( float64_t, float64_t ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, genCases_f64_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f64_isSignalingNaN( genCases_f64_a ) - || f64_isSignalingNaN( genCases_f64_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f64( genCases_f64_a, genCases_f64_b, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_extF80.c b/addins/TestFloat-3e/source/test_az_extF80.c deleted file mode 100644 index e1e6a4618..000000000 --- a/addins/TestFloat-3e/source/test_az_extF80.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_az_extF80( - void trueFunction( const extFloat80_t *, extFloat80_t * ), - void subjFunction( const extFloat80_t *, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_extF80_rx.c b/addins/TestFloat-3e/source/test_az_extF80_rx.c deleted file mode 100644 index 91a7cbad2..000000000 --- a/addins/TestFloat-3e/source/test_az_extF80_rx.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_az_extF80_rx( - void - trueFunction( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - void - subjFunction( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, roundingMode, exact, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, roundingMode, exact, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f128.c b/addins/TestFloat-3e/source/test_az_f128.c deleted file mode 100644 index f10e7415d..000000000 --- a/addins/TestFloat-3e/source/test_az_f128.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f128( - void trueFunction( const float128_t *, float128_t * ), - void subjFunction( const float128_t *, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f128_rx.c b/addins/TestFloat-3e/source/test_az_f128_rx.c deleted file mode 100644 index 9c93e8a0a..000000000 --- a/addins/TestFloat-3e/source/test_az_f128_rx.c +++ /dev/null @@ -1,110 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f128_rx( - void trueFunction( const float128_t *, uint_fast8_t, bool, float128_t * ), - void subjFunction( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, roundingMode, exact, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, roundingMode, exact, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f16.c b/addins/TestFloat-3e/source/test_az_f16.c deleted file mode 100644 index ef9f45a5e..000000000 --- a/addins/TestFloat-3e/source/test_az_f16.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f16( - float16_t trueFunction( float16_t ), float16_t subjFunction( float16_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f16_rx.c b/addins/TestFloat-3e/source/test_az_f16_rx.c deleted file mode 100644 index 11c37e832..000000000 --- a/addins/TestFloat-3e/source/test_az_f16_rx.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f16_rx( - float16_t trueFunction( float16_t, uint_fast8_t, bool ), - float16_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f32.c b/addins/TestFloat-3e/source/test_az_f32.c deleted file mode 100644 index 499c07b58..000000000 --- a/addins/TestFloat-3e/source/test_az_f32.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_az_f32( - float32_t trueFunction( float32_t ), float32_t subjFunction( float32_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_az_f32_rx.c b/addins/TestFloat-3e/source/test_az_f32_rx.c deleted file mode 100644 index 5aeecaaf3..000000000 --- a/addins/TestFloat-3e/source/test_az_f32_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_az_f32_rx( - float32_t trueFunction( float32_t, uint_fast8_t, bool ), - float32_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_az_f64.c b/addins/TestFloat-3e/source/test_az_f64.c deleted file mode 100644 index 24963142b..000000000 --- a/addins/TestFloat-3e/source/test_az_f64.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f64( - float64_t trueFunction( float64_t ), float64_t subjFunction( float64_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f64_rx.c b/addins/TestFloat-3e/source/test_az_f64_rx.c deleted file mode 100644 index c146c7320..000000000 --- a/addins/TestFloat-3e/source/test_az_f64_rx.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 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 -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f64_rx( - float64_t trueFunction( float64_t, uint_fast8_t, bool ), - float64_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/testfloat.c b/addins/TestFloat-3e/source/testfloat.c deleted file mode 100644 index f83ca6d60..000000000 --- a/addins/TestFloat-3e/source/testfloat.c +++ /dev/null @@ -1,1715 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 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 -#include -#include -#include -#include -#include -#include "platform.h" -#include "fail.h" -#include "softfloat.h" -#include "subjfloat_config.h" -#include "subjfloat.h" -#include "functions.h" -#include "genCases.h" -#include "verCases.h" -#include "testLoops.h" - -static void catchSIGINT( int signalCode ) -{ - - if ( verCases_stop ) exit( EXIT_FAILURE ); - verCases_stop = true; - -} - -static void (*subjFunctionPtr)(); - -#ifdef FLOAT16 -typedef float16_t funcType_a_ui32_z_f16( uint32_t ); -#endif -typedef float32_t funcType_a_ui32_z_f32( uint32_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_ui32_z_f64( uint32_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_ui32_z_extF80( uint32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_ui32_z_f128( uint32_t, float128_t * ); -#endif -#ifdef FLOAT16 -typedef float16_t funcType_a_ui64_z_f16( uint64_t ); -#endif -typedef float32_t funcType_a_ui64_z_f32( uint64_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_ui64_z_f64( uint64_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_ui64_z_extF80( uint64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_ui64_z_f128( uint64_t, float128_t * ); -#endif -#ifdef FLOAT16 -typedef float16_t funcType_a_i32_z_f16( int32_t ); -#endif -typedef float32_t funcType_a_i32_z_f32( int32_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_i32_z_f64( int32_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_i32_z_extF80( int32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_i32_z_f128( int32_t, float128_t * ); -#endif -#ifdef FLOAT16 -typedef float16_t funcType_a_i64_z_f16( int64_t ); -#endif -typedef float32_t funcType_a_i64_z_f32( int64_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_i64_z_f64( int64_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_i64_z_extF80( int64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_i64_z_f128( int64_t, float128_t * ); -#endif - -#ifdef FLOAT16 -typedef uint_fast32_t funcType_a_f16_z_ui32( float16_t ); -typedef uint_fast64_t funcType_a_f16_z_ui64( float16_t ); -typedef int_fast32_t funcType_a_f16_z_i32( float16_t ); -typedef int_fast64_t funcType_a_f16_z_i64( float16_t ); -typedef float32_t funcType_a_f16_z_f32( float16_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_f16_z_f64( float16_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_f16_z_extF80( float16_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_f16_z_f128( float16_t, float128_t * ); -#endif -typedef float16_t funcType_az_f16( float16_t ); -typedef float16_t funcType_abz_f16( float16_t, float16_t ); -typedef float16_t funcType_abcz_f16( float16_t, float16_t, float16_t ); -typedef bool funcType_ab_f16_z_bool( float16_t, float16_t ); -#endif - -typedef uint_fast32_t funcType_a_f32_z_ui32( float32_t ); -typedef uint_fast64_t funcType_a_f32_z_ui64( float32_t ); -typedef int_fast32_t funcType_a_f32_z_i32( float32_t ); -typedef int_fast64_t funcType_a_f32_z_i64( float32_t ); -#ifdef FLOAT16 -typedef float16_t funcType_a_f32_z_f16( float32_t ); -#endif -#ifdef FLOAT64 -typedef float64_t funcType_a_f32_z_f64( float32_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_f32_z_extF80( float32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_f32_z_f128( float32_t, float128_t * ); -#endif -typedef float32_t funcType_az_f32( float32_t ); -typedef float32_t funcType_abz_f32( float32_t, float32_t ); -typedef float32_t funcType_abcz_f32( float32_t, float32_t, float32_t ); -typedef bool funcType_ab_f32_z_bool( float32_t, float32_t ); - -#ifdef FLOAT64 -typedef uint_fast32_t funcType_a_f64_z_ui32( float64_t ); -typedef uint_fast64_t funcType_a_f64_z_ui64( float64_t ); -typedef int_fast32_t funcType_a_f64_z_i32( float64_t ); -typedef int_fast64_t funcType_a_f64_z_i64( float64_t ); -#ifdef FLOAT16 -typedef float16_t funcType_a_f64_z_f16( float64_t ); -#endif -typedef float32_t funcType_a_f64_z_f32( float64_t ); -#ifdef EXTFLOAT80 -typedef void funcType_a_f64_z_extF80( float64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_f64_z_f128( float64_t, float128_t * ); -#endif -typedef float64_t funcType_az_f64( float64_t ); -typedef float64_t funcType_abz_f64( float64_t, float64_t ); -typedef float64_t funcType_abcz_f64( float64_t, float64_t, float64_t ); -typedef bool funcType_ab_f64_z_bool( float64_t, float64_t ); -#endif - -#ifdef EXTFLOAT80 -typedef uint_fast32_t funcType_a_extF80_z_ui32( const extFloat80_t * ); -typedef uint_fast64_t funcType_a_extF80_z_ui64( const extFloat80_t * ); -typedef int_fast32_t funcType_a_extF80_z_i32( const extFloat80_t * ); -typedef int_fast64_t funcType_a_extF80_z_i64( const extFloat80_t * ); -#ifdef FLOAT16 -typedef float16_t funcType_a_extF80_z_f16( const extFloat80_t * ); -#endif -typedef float32_t funcType_a_extF80_z_f32( const extFloat80_t * ); -#ifdef FLOAT64 -typedef float64_t funcType_a_extF80_z_f64( const extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_extF80_z_f128( const extFloat80_t *, float128_t * ); -#endif -typedef void funcType_az_extF80( const extFloat80_t *, extFloat80_t * ); -typedef - void - funcType_abz_extF80( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -typedef - bool funcType_ab_extF80_z_bool( const extFloat80_t *, const extFloat80_t * ); -#endif - -#ifdef FLOAT128 -typedef uint_fast32_t funcType_a_f128_z_ui32( const float128_t * ); -typedef uint_fast64_t funcType_a_f128_z_ui64( const float128_t * ); -typedef int_fast32_t funcType_a_f128_z_i32( const float128_t * ); -typedef int_fast64_t funcType_a_f128_z_i64( const float128_t * ); -#ifdef FLOAT16 -typedef float16_t funcType_a_f128_z_f16( const float128_t * ); -#endif -typedef float32_t funcType_a_f128_z_f32( const float128_t * ); -#ifdef FLOAT64 -typedef float64_t funcType_a_f128_z_f64( const float128_t * ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_f128_z_extF80( const float128_t *, extFloat80_t * ); -#endif -typedef void funcType_az_f128( const float128_t *, float128_t * ); -typedef - void - funcType_abz_f128( const float128_t *, const float128_t *, float128_t * ); -typedef - void - funcType_abcz_f128( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -typedef bool funcType_ab_f128_z_bool( const float128_t *, const float128_t * ); -#endif - -#ifdef FLOAT16 - -static -uint_fast32_t - subjFunction_a_f16_z_ui32_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_ui32 *) subjFunctionPtr)( a ); - -} - -static -uint_fast64_t - subjFunction_a_f16_z_ui64_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_ui64 *) subjFunctionPtr)( a ); - -} - -static -int_fast32_t - subjFunction_a_f16_z_i32_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_i32 *) subjFunctionPtr)( a ); - -} - -static -int_fast64_t - subjFunction_a_f16_z_i64_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_i64 *) subjFunctionPtr)( a ); - -} - -static -float16_t - subjFunction_az_f16_rx( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_az_f16 *) subjFunctionPtr)( a ); - -} - -#endif - -static -uint_fast32_t - subjFunction_a_f32_z_ui32_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_ui32 *) subjFunctionPtr)( a ); - -} - -static -uint_fast64_t - subjFunction_a_f32_z_ui64_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_ui64 *) subjFunctionPtr)( a ); - -} - -static -int_fast32_t - subjFunction_a_f32_z_i32_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_i32 *) subjFunctionPtr)( a ); - -} - -static -int_fast64_t - subjFunction_a_f32_z_i64_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_i64 *) subjFunctionPtr)( a ); - -} - -static -float32_t - subjFunction_az_f32_rx( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_az_f32 *) subjFunctionPtr)( a ); - -} - -#ifdef FLOAT64 - -static -uint_fast32_t - subjFunction_a_f64_z_ui32_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_ui32 *) subjFunctionPtr)( a ); - -} - -static -uint_fast64_t - subjFunction_a_f64_z_ui64_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_ui64 *) subjFunctionPtr)( a ); - -} - -static -int_fast32_t - subjFunction_a_f64_z_i32_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_i32 *) subjFunctionPtr)( a ); - -} - -static -int_fast64_t - subjFunction_a_f64_z_i64_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_i64 *) subjFunctionPtr)( a ); - -} - -static -float64_t - subjFunction_az_f64_rx( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_az_f64 *) subjFunctionPtr)( a ); - -} - -#endif - -#ifdef EXTFLOAT80 - -static -uint_fast32_t - subjFunction_a_extF80_z_ui32_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_ui32 *) subjFunctionPtr)( aPtr ); - -} - -static -uint_fast64_t - subjFunction_a_extF80_z_ui64_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_ui64 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast32_t - subjFunction_a_extF80_z_i32_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_i32 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast64_t - subjFunction_a_extF80_z_i64_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_i64 *) subjFunctionPtr)( aPtr ); - -} - -static -void - subjFunction_az_extF80_rx( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - - return ((funcType_az_extF80 *) subjFunctionPtr)( aPtr, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -static -uint_fast32_t - subjFunction_a_f128_z_ui32_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_ui32 *) subjFunctionPtr)( aPtr ); - -} - -static -uint_fast64_t - subjFunction_a_f128_z_ui64_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_ui64 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast32_t - subjFunction_a_f128_z_i32_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_i32 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast64_t - subjFunction_a_f128_z_i64_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_i64 *) subjFunctionPtr)( aPtr ); - -} - -static -void - subjFunction_az_f128_rx( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - - return ((funcType_az_f128 *) subjFunctionPtr)( aPtr, zPtr ); - -} - -#endif - -static -void - testFunctionInstance( - int functionCode, uint_fast8_t roundingMode, bool exact ) -{ -#ifdef FLOAT16 - funcType_abz_f16 *trueFunction_abz_f16; - funcType_ab_f16_z_bool *trueFunction_ab_f16_z_bool; -#endif - funcType_abz_f32 *trueFunction_abz_f32; - funcType_ab_f32_z_bool *trueFunction_ab_f32_z_bool; -#ifdef FLOAT64 - funcType_abz_f64 *trueFunction_abz_f64; - funcType_ab_f64_z_bool *trueFunction_ab_f64_z_bool; -#endif -#ifdef EXTFLOAT80 - funcType_abz_extF80 *trueFunction_abz_extF80; - funcType_ab_extF80_z_bool *trueFunction_ab_extF80_z_bool; -#endif -#ifdef FLOAT128 - funcType_abz_f128 *trueFunction_abz_f128; - funcType_ab_f128_z_bool *trueFunction_ab_f128_z_bool; -#endif - - fputs( "Testing ", stderr ); - verCases_writeFunctionName( stderr ); - fputs( ".\n", stderr ); - switch ( functionCode ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT16 -#ifdef SUBJ_UI32_TO_F16 - case UI32_TO_F16: - test_a_ui32_z_f16( - ui32_to_f16, (funcType_a_ui32_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_UI32_TO_F32 - case UI32_TO_F32: - test_a_ui32_z_f32( - ui32_to_f32, (funcType_a_ui32_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI32_TO_F64 - case UI32_TO_F64: - test_a_ui32_z_f64( - ui32_to_f64, (funcType_a_ui32_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI32_TO_EXTF80 - case UI32_TO_EXTF80: - test_a_ui32_z_extF80( - ui32_to_extF80M, (funcType_a_ui32_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI32_TO_F128 - case UI32_TO_F128: - test_a_ui32_z_f128( - ui32_to_f128M, (funcType_a_ui32_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_UI64_TO_F16 - case UI64_TO_F16: - test_a_ui64_z_f16( - ui64_to_f16, (funcType_a_ui64_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_UI64_TO_F32 - case UI64_TO_F32: - test_a_ui64_z_f32( - ui64_to_f32, (funcType_a_ui64_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI64_TO_F64 - case UI64_TO_F64: - test_a_ui64_z_f64( - ui64_to_f64, (funcType_a_ui64_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI64_TO_EXTF80 - case UI64_TO_EXTF80: - test_a_ui64_z_extF80( - ui64_to_extF80M, (funcType_a_ui64_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI64_TO_F128 - case UI64_TO_F128: - test_a_ui64_z_f128( - ui64_to_f128M, (funcType_a_ui64_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I32_TO_F16 - case I32_TO_F16: - test_a_i32_z_f16( - i32_to_f16, (funcType_a_i32_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_I32_TO_F32 - case I32_TO_F32: - test_a_i32_z_f32( - i32_to_f32, (funcType_a_i32_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I32_TO_F64 - case I32_TO_F64: - test_a_i32_z_f64( - i32_to_f64, (funcType_a_i32_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I32_TO_EXTF80 - case I32_TO_EXTF80: - test_a_i32_z_extF80( - i32_to_extF80M, (funcType_a_i32_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I32_TO_F128 - case I32_TO_F128: - test_a_i32_z_f128( - i32_to_f128M, (funcType_a_i32_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I64_TO_F16 - case I64_TO_F16: - test_a_i64_z_f16( - i64_to_f16, (funcType_a_i64_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_I64_TO_F32 - case I64_TO_F32: - test_a_i64_z_f32( - i64_to_f32, (funcType_a_i64_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I64_TO_F64 - case I64_TO_F64: - test_a_i64_z_f64( - i64_to_f64, (funcType_a_i64_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I64_TO_EXTF80 - case I64_TO_EXTF80: - test_a_i64_z_extF80( - i64_to_extF80M, (funcType_a_i64_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I64_TO_F128 - case I64_TO_F128: - test_a_i64_z_f128( - i64_to_f128M, (funcType_a_i64_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT16 - case F16_TO_UI32: - test_a_f16_z_ui32_rx( - f16_to_ui32, subjFunction_a_f16_z_ui32_rx, roundingMode, exact ); - break; - case F16_TO_UI64: - test_a_f16_z_ui64_rx( - f16_to_ui64, subjFunction_a_f16_z_ui64_rx, roundingMode, exact ); - break; - case F16_TO_I32: - test_a_f16_z_i32_rx( - f16_to_i32, subjFunction_a_f16_z_i32_rx, roundingMode, exact ); - break; - case F16_TO_I64: - test_a_f16_z_i64_rx( - f16_to_i64, subjFunction_a_f16_z_i64_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F16_TO_F32 - case F16_TO_F32: - test_a_f16_z_f32( - f16_to_f32, (funcType_a_f16_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F16_TO_F64 - case F16_TO_F64: - test_a_f16_z_f64( - f16_to_f64, (funcType_a_f16_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F16_TO_EXTF80 - case F16_TO_EXTF80: - test_a_f16_z_extF80( - f16_to_extF80M, (funcType_a_f16_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F16_TO_F128 - case F16_TO_F128: - test_a_f16_z_f128( - f16_to_f128M, (funcType_a_f16_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case F16_ROUNDTOINT: - test_az_f16_rx( - f16_roundToInt, subjFunction_az_f16_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F16_ADD - case F16_ADD: - trueFunction_abz_f16 = f16_add; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_SUB - case F16_SUB: - trueFunction_abz_f16 = f16_sub; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_MUL - case F16_MUL: - trueFunction_abz_f16 = f16_mul; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_MULADD - case F16_MULADD: - test_abcz_f16( f16_mulAdd, (funcType_abcz_f16 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F16_DIV - case F16_DIV: - trueFunction_abz_f16 = f16_div; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_REM - case F16_REM: - trueFunction_abz_f16 = f16_rem; - goto test_abz_f16; -#endif - test_abz_f16: - test_abz_f16( - trueFunction_abz_f16, (funcType_abz_f16 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F16_SQRT - case F16_SQRT: - test_az_f16( f16_sqrt, (funcType_az_f16 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F16_EQ - case F16_EQ: - trueFunction_ab_f16_z_bool = f16_eq; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LE - case F16_LE: - trueFunction_ab_f16_z_bool = f16_le; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LT - case F16_LT: - trueFunction_ab_f16_z_bool = f16_lt; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_EQ_SIGNALING - case F16_EQ_SIGNALING: - trueFunction_ab_f16_z_bool = f16_eq_signaling; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LE_QUIET - case F16_LE_QUIET: - trueFunction_ab_f16_z_bool = f16_le_quiet; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LT_QUIET - case F16_LT_QUIET: - trueFunction_ab_f16_z_bool = f16_lt_quiet; - goto test_ab_f16_z_bool; -#endif - test_ab_f16_z_bool: - test_ab_f16_z_bool( - trueFunction_ab_f16_z_bool, - (funcType_ab_f16_z_bool *) subjFunctionPtr - ); - break; -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - case F32_TO_UI32: - test_a_f32_z_ui32_rx( - f32_to_ui32, subjFunction_a_f32_z_ui32_rx, roundingMode, exact ); - break; - case F32_TO_UI64: - test_a_f32_z_ui64_rx( - f32_to_ui64, subjFunction_a_f32_z_ui64_rx, roundingMode, exact ); - break; - case F32_TO_I32: - test_a_f32_z_i32_rx( - f32_to_i32, subjFunction_a_f32_z_i32_rx, roundingMode, exact ); - break; - case F32_TO_I64: - test_a_f32_z_i64_rx( - f32_to_i64, subjFunction_a_f32_z_i64_rx, roundingMode, exact ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_F32_TO_F16 - case F32_TO_F16: - test_a_f32_z_f16( - f32_to_f16, (funcType_a_f32_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F32_TO_F64 - case F32_TO_F64: - test_a_f32_z_f64( - f32_to_f64, (funcType_a_f32_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F32_TO_EXTF80 - case F32_TO_EXTF80: - test_a_f32_z_extF80( - f32_to_extF80M, (funcType_a_f32_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F32_TO_F128 - case F32_TO_F128: - test_a_f32_z_f128( - f32_to_f128M, (funcType_a_f32_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case F32_ROUNDTOINT: - test_az_f32_rx( - f32_roundToInt, subjFunction_az_f32_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F32_ADD - case F32_ADD: - trueFunction_abz_f32 = f32_add; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_SUB - case F32_SUB: - trueFunction_abz_f32 = f32_sub; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_MUL - case F32_MUL: - trueFunction_abz_f32 = f32_mul; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_MULADD - case F32_MULADD: - test_abcz_f32( f32_mulAdd, (funcType_abcz_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F32_DIV - case F32_DIV: - trueFunction_abz_f32 = f32_div; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_REM - case F32_REM: - trueFunction_abz_f32 = f32_rem; - goto test_abz_f32; -#endif - test_abz_f32: - test_abz_f32( - trueFunction_abz_f32, (funcType_abz_f32 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F32_SQRT - case F32_SQRT: - test_az_f32( f32_sqrt, (funcType_az_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F32_EQ - case F32_EQ: - trueFunction_ab_f32_z_bool = f32_eq; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LE - case F32_LE: - trueFunction_ab_f32_z_bool = f32_le; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LT - case F32_LT: - trueFunction_ab_f32_z_bool = f32_lt; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_EQ_SIGNALING - case F32_EQ_SIGNALING: - trueFunction_ab_f32_z_bool = f32_eq_signaling; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LE_QUIET - case F32_LE_QUIET: - trueFunction_ab_f32_z_bool = f32_le_quiet; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LT_QUIET - case F32_LT_QUIET: - trueFunction_ab_f32_z_bool = f32_lt_quiet; - goto test_ab_f32_z_bool; -#endif - test_ab_f32_z_bool: - test_ab_f32_z_bool( - trueFunction_ab_f32_z_bool, - (funcType_ab_f32_z_bool *) subjFunctionPtr - ); - break; - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT64 - case F64_TO_UI32: - test_a_f64_z_ui32_rx( - f64_to_ui32, subjFunction_a_f64_z_ui32_rx, roundingMode, exact ); - break; - case F64_TO_UI64: - test_a_f64_z_ui64_rx( - f64_to_ui64, subjFunction_a_f64_z_ui64_rx, roundingMode, exact ); - break; - case F64_TO_I32: - test_a_f64_z_i32_rx( - f64_to_i32, subjFunction_a_f64_z_i32_rx, roundingMode, exact ); - break; - case F64_TO_I64: - test_a_f64_z_i64_rx( - f64_to_i64, subjFunction_a_f64_z_i64_rx, roundingMode, exact ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_F64_TO_F16 - case F64_TO_F16: - test_a_f64_z_f16( - f64_to_f16, (funcType_a_f64_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_F64_TO_F32 - case F64_TO_F32: - test_a_f64_z_f32( - f64_to_f32, (funcType_a_f64_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F64_TO_EXTF80 - case F64_TO_EXTF80: - test_a_f64_z_extF80( - f64_to_extF80M, (funcType_a_f64_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F64_TO_F128 - case F64_TO_F128: - test_a_f64_z_f128( - f64_to_f128M, (funcType_a_f64_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case F64_ROUNDTOINT: - test_az_f64_rx( - f64_roundToInt, subjFunction_az_f64_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F64_ADD - case F64_ADD: - trueFunction_abz_f64 = f64_add; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_SUB - case F64_SUB: - trueFunction_abz_f64 = f64_sub; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_MUL - case F64_MUL: - trueFunction_abz_f64 = f64_mul; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_MULADD - case F64_MULADD: - test_abcz_f64( f64_mulAdd, (funcType_abcz_f64 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F64_DIV - case F64_DIV: - trueFunction_abz_f64 = f64_div; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_REM - case F64_REM: - trueFunction_abz_f64 = f64_rem; - goto test_abz_f64; -#endif - test_abz_f64: - test_abz_f64( - trueFunction_abz_f64, (funcType_abz_f64 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F64_SQRT - case F64_SQRT: - test_az_f64( f64_sqrt, (funcType_az_f64 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F64_EQ - case F64_EQ: - trueFunction_ab_f64_z_bool = f64_eq; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LE - case F64_LE: - trueFunction_ab_f64_z_bool = f64_le; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LT - case F64_LT: - trueFunction_ab_f64_z_bool = f64_lt; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_EQ_SIGNALING - case F64_EQ_SIGNALING: - trueFunction_ab_f64_z_bool = f64_eq_signaling; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LE_QUIET - case F64_LE_QUIET: - trueFunction_ab_f64_z_bool = f64_le_quiet; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LT_QUIET - case F64_LT_QUIET: - trueFunction_ab_f64_z_bool = f64_lt_quiet; - goto test_ab_f64_z_bool; -#endif - test_ab_f64_z_bool: - test_ab_f64_z_bool( - trueFunction_ab_f64_z_bool, - (funcType_ab_f64_z_bool *) subjFunctionPtr - ); - break; -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - case EXTF80_TO_UI32: - test_a_extF80_z_ui32_rx( - extF80M_to_ui32, - subjFunction_a_extF80_z_ui32_rx, - roundingMode, - exact - ); - break; - case EXTF80_TO_UI64: - test_a_extF80_z_ui64_rx( - extF80M_to_ui64, - subjFunction_a_extF80_z_ui64_rx, - roundingMode, - exact - ); - break; - case EXTF80_TO_I32: - test_a_extF80_z_i32_rx( - extF80M_to_i32, subjFunction_a_extF80_z_i32_rx, roundingMode, exact - ); - break; - case EXTF80_TO_I64: - test_a_extF80_z_i64_rx( - extF80M_to_i64, subjFunction_a_extF80_z_i64_rx, roundingMode, exact - ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_EXTF80_TO_F16 - case EXTF80_TO_F16: - test_a_extF80_z_f16( - extF80M_to_f16, (funcType_a_extF80_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_EXTF80_TO_F32 - case EXTF80_TO_F32: - test_a_extF80_z_f32( - extF80M_to_f32, (funcType_a_extF80_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_EXTF80_TO_F64 - case EXTF80_TO_F64: - test_a_extF80_z_f64( - extF80M_to_f64, (funcType_a_extF80_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_EXTF80_TO_F128 - case EXTF80_TO_F128: - test_a_extF80_z_f128( - extF80M_to_f128M, (funcType_a_extF80_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case EXTF80_ROUNDTOINT: - test_az_extF80_rx( - extF80M_roundToInt, subjFunction_az_extF80_rx, roundingMode, exact - ); - break; -#ifdef SUBJ_EXTF80_ADD - case EXTF80_ADD: - trueFunction_abz_extF80 = extF80M_add; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_SUB - case EXTF80_SUB: - trueFunction_abz_extF80 = extF80M_sub; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_MUL - case EXTF80_MUL: - trueFunction_abz_extF80 = extF80M_mul; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_DIV - case EXTF80_DIV: - trueFunction_abz_extF80 = extF80M_div; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_REM - case EXTF80_REM: - trueFunction_abz_extF80 = extF80M_rem; - goto test_abz_extF80; -#endif - test_abz_extF80: - test_abz_extF80( - trueFunction_abz_extF80, (funcType_abz_extF80 *) subjFunctionPtr ); - break; -#ifdef SUBJ_EXTF80_SQRT - case EXTF80_SQRT: - test_az_extF80( extF80M_sqrt, (funcType_az_extF80 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_EXTF80_EQ - case EXTF80_EQ: - trueFunction_ab_extF80_z_bool = extF80M_eq; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LE - case EXTF80_LE: - trueFunction_ab_extF80_z_bool = extF80M_le; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LT - case EXTF80_LT: - trueFunction_ab_extF80_z_bool = extF80M_lt; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_EQ_SIGNALING - case EXTF80_EQ_SIGNALING: - trueFunction_ab_extF80_z_bool = extF80M_eq_signaling; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LE_QUIET - case EXTF80_LE_QUIET: - trueFunction_ab_extF80_z_bool = extF80M_le_quiet; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LT_QUIET - case EXTF80_LT_QUIET: - trueFunction_ab_extF80_z_bool = extF80M_lt_quiet; - goto test_ab_extF80_z_bool; -#endif - test_ab_extF80_z_bool: - test_ab_extF80_z_bool( - trueFunction_ab_extF80_z_bool, - (funcType_ab_extF80_z_bool *) subjFunctionPtr - ); - break; -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT128 - case F128_TO_UI32: - test_a_f128_z_ui32_rx( - f128M_to_ui32, subjFunction_a_f128_z_ui32_rx, roundingMode, exact - ); - break; - case F128_TO_UI64: - test_a_f128_z_ui64_rx( - f128M_to_ui64, subjFunction_a_f128_z_ui64_rx, roundingMode, exact - ); - break; - case F128_TO_I32: - test_a_f128_z_i32_rx( - f128M_to_i32, subjFunction_a_f128_z_i32_rx, roundingMode, exact ); - break; - case F128_TO_I64: - test_a_f128_z_i64_rx( - f128M_to_i64, subjFunction_a_f128_z_i64_rx, roundingMode, exact ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_F128_TO_F16 - case F128_TO_F16: - test_a_f128_z_f16( - f128M_to_f16, (funcType_a_f128_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_F128_TO_F32 - case F128_TO_F32: - test_a_f128_z_f32( - f128M_to_f32, (funcType_a_f128_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F128_TO_F64 - case F128_TO_F64: - test_a_f128_z_f64( - f128M_to_f64, (funcType_a_f128_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F128_TO_EXTF80 - case F128_TO_EXTF80: - test_a_f128_z_extF80( - f128M_to_extF80M, (funcType_a_f128_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif - case F128_ROUNDTOINT: - test_az_f128_rx( - f128M_roundToInt, subjFunction_az_f128_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F128_ADD - case F128_ADD: - trueFunction_abz_f128 = f128M_add; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_SUB - case F128_SUB: - trueFunction_abz_f128 = f128M_sub; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_MUL - case F128_MUL: - trueFunction_abz_f128 = f128M_mul; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_MULADD - case F128_MULADD: - test_abcz_f128( f128M_mulAdd, (funcType_abcz_f128 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F128_DIV - case F128_DIV: - trueFunction_abz_f128 = f128M_div; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_REM - case F128_REM: - trueFunction_abz_f128 = f128M_rem; - goto test_abz_f128; -#endif - test_abz_f128: - test_abz_f128( - trueFunction_abz_f128, (funcType_abz_f128 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F128_SQRT - case F128_SQRT: - test_az_f128( f128M_sqrt, (funcType_az_f128 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F128_EQ - case F128_EQ: - trueFunction_ab_f128_z_bool = f128M_eq; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LE - case F128_LE: - trueFunction_ab_f128_z_bool = f128M_le; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LT - case F128_LT: - trueFunction_ab_f128_z_bool = f128M_lt; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_EQ_SIGNALING - case F128_EQ_SIGNALING: - trueFunction_ab_f128_z_bool = f128M_eq_signaling; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LE_QUIET - case F128_LE_QUIET: - trueFunction_ab_f128_z_bool = f128M_le_quiet; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LT_QUIET - case F128_LT_QUIET: - trueFunction_ab_f128_z_bool = f128M_lt_quiet; - goto test_ab_f128_z_bool; -#endif - test_ab_f128_z_bool: - test_ab_f128_z_bool( - trueFunction_ab_f128_z_bool, - (funcType_ab_f128_z_bool *) subjFunctionPtr - ); - break; -#endif - } - if ( (verCases_errorStop && verCases_anyErrors) || verCases_stop ) { - verCases_exitWithStatus(); - } - -} - -static -void - testFunction( - const struct standardFunctionInfo *standardFunctionInfoPtr, - uint_fast8_t roundingPrecisionIn, - int roundingCodeIn - ) -{ - int functionCode, functionAttribs; - bool standardFunctionHasFixedRounding; - int roundingCode; - bool exact; - uint_fast8_t roundingPrecision, roundingMode; - - functionCode = standardFunctionInfoPtr->functionCode; - functionAttribs = functionInfos[functionCode].attribs; - standardFunctionHasFixedRounding = false; - if ( functionAttribs & FUNC_ARG_ROUNDINGMODE ) { - roundingCode = standardFunctionInfoPtr->roundingCode; - if ( roundingCode ) { - standardFunctionHasFixedRounding = true; - roundingCodeIn = roundingCode; - } - } - exact = standardFunctionInfoPtr->exact; - verCases_functionNamePtr = standardFunctionInfoPtr->namePtr; - roundingPrecision = 32; - for (;;) { - if ( functionAttribs & FUNC_EFF_ROUNDINGPRECISION ) { - if ( roundingPrecisionIn ) roundingPrecision = roundingPrecisionIn; - } else { - roundingPrecision = 0; - } -#ifdef EXTFLOAT80 - verCases_roundingPrecision = roundingPrecision; - if ( roundingPrecision ) { - extF80_roundingPrecision = roundingPrecision; - subjfloat_setExtF80RoundingPrecision( roundingPrecision ); - } -#endif - for ( - roundingCode = 1; roundingCode < NUM_ROUNDINGMODES; ++roundingCode - ) { -#ifndef SUBJFLOAT_ROUND_NEAR_MAXMAG - if ( roundingCode != ROUND_NEAR_MAXMAG ) { -#endif -#if defined FLOAT_ROUND_ODD && ! defined SUBJFLOAT_ROUND_NEAR_MAXMAG - if ( roundingCode != ROUND_ODD ) { -#endif - if ( - functionAttribs - & (FUNC_ARG_ROUNDINGMODE | FUNC_EFF_ROUNDINGMODE) - ) { - if ( roundingCodeIn ) roundingCode = roundingCodeIn; - } else { - roundingCode = 0; - } - verCases_roundingCode = - standardFunctionHasFixedRounding ? 0 : roundingCode; - if ( roundingCode ) { - roundingMode = roundingModes[roundingCode]; - softfloat_roundingMode = roundingMode; - if ( ! standardFunctionHasFixedRounding ) { - subjfloat_setRoundingMode( roundingMode ); - } - } - testFunctionInstance( functionCode, roundingMode, exact ); - if ( roundingCodeIn || ! roundingCode ) break; -#if defined FLOAT_ROUND_ODD && ! defined SUBJFLOAT_ROUND_NEAR_MAXMAG - } -#endif -#ifndef SUBJFLOAT_ROUND_NEAR_MAXMAG - } -#endif - } - if ( roundingPrecisionIn || ! roundingPrecision ) break; - if ( roundingPrecision == 80 ) { - break; - } else if ( roundingPrecision == 64 ) { - roundingPrecision = 80; - } else if ( roundingPrecision == 32 ) { - roundingPrecision = 64; - } - } - -} - -int main( int argc, char *argv[] ) -{ - bool haveFunctionArg; - const struct standardFunctionInfo *standardFunctionInfoPtr; - int numOperands; - uint_fast8_t roundingPrecision; - int roundingCode; - const char *argPtr; - void (*const *subjFunctionPtrPtr)(); - const char *functionNamePtr; - unsigned long ui; - long i; - int functionMatchAttrib; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - fail_programName = "testfloat"; - if ( argc <= 1 ) goto writeHelpMessage; - genCases_setLevel( 1 ); - verCases_maxErrorCount = 20; - testLoops_trueFlagsPtr = &softfloat_exceptionFlags; - testLoops_subjFlagsFunction = subjfloat_clearExceptionFlags; - haveFunctionArg = false; - standardFunctionInfoPtr = 0; - numOperands = 0; - roundingPrecision = 0; - roundingCode = 0; - for (;;) { - --argc; - if ( ! argc ) break; - argPtr = *++argv; - if ( ! argPtr ) break; - if ( argPtr[0] == '-' ) ++argPtr; - if ( - ! strcmp( argPtr, "help" ) || ! strcmp( argPtr, "-help" ) - || ! strcmp( argPtr, "h" ) - ) { - writeHelpMessage: - fputs( -"testfloat [