From 57c49a74f9f4baf3ba864bbce35d975efd18a8e3 Mon Sep 17 00:00:00 2001 From: John Hauser Date: Thu, 11 Dec 2014 14:38:33 -0800 Subject: Update in RC for Release 3, fixing some bugs and improving the documentation. --- build/Linux-386-GCC/Makefile | 70 ++++++--- build/Linux-386-GCC/platform.h | 56 +++---- build/Linux-x86_64-GCC/Makefile | 317 ++++++++++++++++++++++++++++++++++++++ build/Linux-x86_64-GCC/platform.h | 42 +++++ build/Win32-MinGW/Makefile | 317 ++++++++++++++++++++++++++++++++++++++ build/Win32-MinGW/platform.h | 42 +++++ build/Win64-MinGW-w64/Makefile | 317 ++++++++++++++++++++++++++++++++++++++ build/Win64-MinGW-w64/platform.h | 42 +++++ build/template/Makefile | 315 +++++++++++++++++++++++++++++++++++++ build/template/platform.h | 44 ++++++ doc/TestFloat-source.html | 18 ++- source/genCases.h | 8 +- source/genCases_i32.c | 10 +- source/genCases_i64.c | 10 +- source/genCases_ui32.c | 14 +- source/genCases_ui64.c | 14 +- source/genLoops.c | 32 ++-- source/genLoops.h | 32 ++-- source/subj-C/subjfloat.c | 32 ++-- source/subjfloat.h | 32 ++-- source/test_a_extF80_z_ui64_rx.c | 2 +- source/testfloat.c | 32 ++-- source/verLoops.c | 32 ++-- source/verLoops.h | 32 ++-- 24 files changed, 1665 insertions(+), 197 deletions(-) create mode 100644 build/Linux-x86_64-GCC/Makefile create mode 100644 build/Linux-x86_64-GCC/platform.h create mode 100644 build/Win32-MinGW/Makefile create mode 100644 build/Win32-MinGW/platform.h create mode 100644 build/Win64-MinGW-w64/Makefile create mode 100644 build/Win64-MinGW-w64/platform.h create mode 100644 build/template/Makefile create mode 100644 build/template/platform.h diff --git a/build/Linux-386-GCC/Makefile b/build/Linux-386-GCC/Makefile index ceaebb2..e543382 100644 --- a/build/Linux-386-GCC/Makefile +++ b/build/Linux-386-GCC/Makefile @@ -1,4 +1,37 @@ +#============================================================================= +# +# This Makefile is part of TestFloat, Release 3, 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 +# (Regents). All Rights Reserved. Redistribution and use in source and +# binary forms, with or without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer in +# the documentation and/or other materials provided with the distribution. +# Neither the name of the Regents nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +# SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +# REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +# HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +# MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +#============================================================================= + SOURCE_DIR = ../../source SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C SOFTFLOAT_DIR = ../../../berkeley-softfloat-rc3 @@ -10,19 +43,19 @@ SOFTFLOAT_H = \ $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) -TYPE_OPTS = -DEXTFLOAT80 -DFLOAT128 +TESTFLOAT_OPTS = -DEXTFLOAT80 -DFLOAT128 -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 $(TYPE_OPTS) $(C_INCLUDES) -O2 \ - -o $@ + gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ + $(C_INCLUDES) -O2 -o $@ COMPILE_SLOWFLOAT_C = \ - gcc -c -Werror-implicit-function-declaration $(TYPE_OPTS) $(C_INCLUDES) -O3 \ - -o $@ + gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ + $(C_INCLUDES) -O3 -o $@ MAKELIB = ar crs $@ -LINK = gcc -o $@ +LINK = gcc -lm -o $@ OBJ = .o LIB = .a @@ -155,6 +188,7 @@ OBJS_LIB = \ fail$(OBJ) \ functions_common$(OBJ) \ functionInfos$(OBJ) \ + standardFunctionInfos$(OBJ) \ random$(OBJ) \ genCases_common$(OBJ) \ $(OBJS_GENCASES) \ @@ -166,11 +200,8 @@ OBJS_LIB = \ $(OBJS_WRITECASE) \ testLoops_common$(OBJ) \ $(OBJS_TEST) \ - standardFunctionInfos$(OBJ) \ - -#*** EVERYBODY SHOULD INCLUDE "platform.h", RIGHT? -uint128$(OBJ): platform.h $(SOURCE_DIR)/uint128.h +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 @@ -179,22 +210,19 @@ 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): platform.h $(SOURCE_DIR)/uint128.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): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -writeCase_common$(OBJ): $(SOURCE_DIR)/writeCase.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): \ - platform.h $(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): $(SOURCE_DIR)/%.c + $(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) $^ @@ -261,11 +289,11 @@ testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) subjfloat$(OBJ): \ - $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ + 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): \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ + 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): \ @@ -276,7 +304,7 @@ testfloat$(OBJ): \ $(COMPILE_C) $(SOURCE_DIR)/testfloat.c testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ -lm + $(LINK) $^ .PHONY: clean clean: diff --git a/build/Linux-386-GCC/platform.h b/build/Linux-386-GCC/platform.h index 2ea4f73..4b38236 100644 --- a/build/Linux-386-GCC/platform.h +++ b/build/Linux-386-GCC/platform.h @@ -1,34 +1,34 @@ /*============================================================================ -*** FIX. - -This C source fragment is part of the SoftFloat IEC/IEEE Floating-point -Arithmetic Package, Release 2b. - -Written by John R. Hauser. This work was made possible in part by the -International Computer Science Institute, located at Suite 600, 1947 Center -Street, Berkeley, California 94704. Funding was partially provided by the -National Science Foundation under grant MIP-9311980. The original version -of this code was written as part of a project to build a fixed-point vector -processor in collaboration with the University of California at Berkeley, -overseen by Profs. Nelson Morgan and John Wawrzynek. More information -is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ -arithmetic/SoftFloat.html'. - -THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has -been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES -RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS -AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, -COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE -EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE -INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR -OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. - -Derivative works are acceptable, even for commercial purposes, so long as -(1) the source code for the derivative work includes prominent notice that -the work is derivative, and (2) the source code includes prominent notice with -these four paragraphs for those parts of this code that are retained. +This C header file is part of TestFloat, Release 3, 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 +(Regents). All Rights Reserved. Redistribution and use in source and binary +forms, with or without modification, are permitted provided that the following +conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer. +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer in the +documentation and/or other materials provided with the distribution. Neither +the name of the Regents nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING +OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. =============================================================================*/ diff --git a/build/Linux-x86_64-GCC/Makefile b/build/Linux-x86_64-GCC/Makefile new file mode 100644 index 0000000..86407ee --- /dev/null +++ b/build/Linux-x86_64-GCC/Makefile @@ -0,0 +1,317 @@ + +#============================================================================= +# +# This Makefile is part of TestFloat, Release 3, 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 +# (Regents). All Rights Reserved. Redistribution and use in source and +# binary forms, with or without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer in +# the documentation and/or other materials provided with the distribution. +# Neither the name of the Regents nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +# SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +# REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +# HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +# MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +#============================================================================= + +SOURCE_DIR = ../../source +SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C +SOFTFLOAT_DIR = ../../../berkeley-softfloat-rc3 +SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include +PLATFORM = Linux-x86_64-GCC + +SOFTFLOAT_H = \ + $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ + $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h +SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) + +TESTFLOAT_OPTS = -DEXTFLOAT80 -DFLOAT128 -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 -lm -o $@ + +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_f32$(OBJ) \ + genCases_f64$(OBJ) \ + genCases_extF80$(OBJ) \ + genCases_f128$(OBJ) \ + +OBJS_WRITECASE = \ + writeCase_a_ui32$(OBJ) \ + writeCase_a_ui64$(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_abc_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_f32$(OBJ) \ + writeCase_z_f64$(OBJ) \ + writeCase_z_extF80M$(OBJ) \ + writeCase_z_f128M$(OBJ) \ + +OBJS_TEST = \ + 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_f32$(OBJ) \ + test_a_ui64_z_f64$(OBJ) \ + test_a_ui64_z_extF80$(OBJ) \ + test_a_ui64_z_f128$(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_f32$(OBJ) \ + test_a_i64_z_f64$(OBJ) \ + test_a_i64_z_extF80$(OBJ) \ + test_a_i64_z_f128$(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_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_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_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_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$(OBJ) \ + fail$(OBJ) \ + functions_common$(OBJ) \ + functionInfos$(OBJ) \ + standardFunctionInfos$(OBJ) \ + random$(OBJ) \ + genCases_common$(OBJ) \ + $(OBJS_GENCASES) \ + genCases_writeTestsTotal$(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) $^ + +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) $^ + +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) $^ + +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) $^ + +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) $^ + +.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/build/Linux-x86_64-GCC/platform.h b/build/Linux-x86_64-GCC/platform.h new file mode 100644 index 0000000..4b38236 --- /dev/null +++ b/build/Linux-x86_64-GCC/platform.h @@ -0,0 +1,42 @@ + +/*============================================================================ + +This C header file is part of TestFloat, Release 3, 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 +(Regents). All Rights Reserved. Redistribution and use in source and binary +forms, with or without modification, are permitted provided that the following +conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer. +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer in the +documentation and/or other materials provided with the distribution. Neither +the name of the Regents nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING +OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +=============================================================================*/ + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +#define LITTLEENDIAN 1 + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +#define INLINE extern inline + diff --git a/build/Win32-MinGW/Makefile b/build/Win32-MinGW/Makefile new file mode 100644 index 0000000..58f2a4e --- /dev/null +++ b/build/Win32-MinGW/Makefile @@ -0,0 +1,317 @@ + +#============================================================================= +# +# This Makefile is part of TestFloat, Release 3, 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 +# (Regents). All Rights Reserved. Redistribution and use in source and +# binary forms, with or without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer in +# the documentation and/or other materials provided with the distribution. +# Neither the name of the Regents nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +# SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +# REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +# HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +# MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +#============================================================================= + +SOURCE_DIR = ../../source +SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C +SOFTFLOAT_DIR = ../../../berkeley-softfloat-rc3 +SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include +PLATFORM = Win32-MinGW + +SOFTFLOAT_H = \ + $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ + $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h +SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) + +TESTFLOAT_OPTS = -DEXTFLOAT80 -DFLOAT128 -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 -lm -o $@ + +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_f32$(OBJ) \ + genCases_f64$(OBJ) \ + genCases_extF80$(OBJ) \ + genCases_f128$(OBJ) \ + +OBJS_WRITECASE = \ + writeCase_a_ui32$(OBJ) \ + writeCase_a_ui64$(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_abc_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_f32$(OBJ) \ + writeCase_z_f64$(OBJ) \ + writeCase_z_extF80M$(OBJ) \ + writeCase_z_f128M$(OBJ) \ + +OBJS_TEST = \ + 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_f32$(OBJ) \ + test_a_ui64_z_f64$(OBJ) \ + test_a_ui64_z_extF80$(OBJ) \ + test_a_ui64_z_f128$(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_f32$(OBJ) \ + test_a_i64_z_f64$(OBJ) \ + test_a_i64_z_extF80$(OBJ) \ + test_a_i64_z_f128$(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_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_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_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_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$(OBJ) \ + fail$(OBJ) \ + functions_common$(OBJ) \ + functionInfos$(OBJ) \ + standardFunctionInfos$(OBJ) \ + random$(OBJ) \ + genCases_common$(OBJ) \ + $(OBJS_GENCASES) \ + genCases_writeTestsTotal$(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) $^ + +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) $^ + +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) $^ + +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) $^ + +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) $^ + +.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/build/Win32-MinGW/platform.h b/build/Win32-MinGW/platform.h new file mode 100644 index 0000000..4b38236 --- /dev/null +++ b/build/Win32-MinGW/platform.h @@ -0,0 +1,42 @@ + +/*============================================================================ + +This C header file is part of TestFloat, Release 3, 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 +(Regents). All Rights Reserved. Redistribution and use in source and binary +forms, with or without modification, are permitted provided that the following +conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer. +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer in the +documentation and/or other materials provided with the distribution. Neither +the name of the Regents nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING +OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +=============================================================================*/ + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +#define LITTLEENDIAN 1 + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +#define INLINE extern inline + diff --git a/build/Win64-MinGW-w64/Makefile b/build/Win64-MinGW-w64/Makefile new file mode 100644 index 0000000..8040540 --- /dev/null +++ b/build/Win64-MinGW-w64/Makefile @@ -0,0 +1,317 @@ + +#============================================================================= +# +# This Makefile is part of TestFloat, Release 3, 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 +# (Regents). All Rights Reserved. Redistribution and use in source and +# binary forms, with or without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer in +# the documentation and/or other materials provided with the distribution. +# Neither the name of the Regents nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +# SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +# REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +# HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +# MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +#============================================================================= + +SOURCE_DIR = ../../source +SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C +SOFTFLOAT_DIR = ../../../berkeley-softfloat-rc3 +SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include +PLATFORM = Win64-MinGW-w64 + +SOFTFLOAT_H = \ + $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ + $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h +SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) + +TESTFLOAT_OPTS = -DEXTFLOAT80 -DFLOAT128 -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 -c -Werror-implicit-function-declaration \ + $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ +COMPILE_SLOWFLOAT_C = \ + x86_64-w64-mingw32-gcc -c -Werror-implicit-function-declaration \ + $(TESTFLOAT_OPTS) $(C_INCLUDES) -O3 -o $@ +MAKELIB = x86_64-w64-mingw32-ar crs $@ +LINK = x86_64-w64-mingw32-gcc -lm -o $@ + +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_f32$(OBJ) \ + genCases_f64$(OBJ) \ + genCases_extF80$(OBJ) \ + genCases_f128$(OBJ) \ + +OBJS_WRITECASE = \ + writeCase_a_ui32$(OBJ) \ + writeCase_a_ui64$(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_abc_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_f32$(OBJ) \ + writeCase_z_f64$(OBJ) \ + writeCase_z_extF80M$(OBJ) \ + writeCase_z_f128M$(OBJ) \ + +OBJS_TEST = \ + 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_f32$(OBJ) \ + test_a_ui64_z_f64$(OBJ) \ + test_a_ui64_z_extF80$(OBJ) \ + test_a_ui64_z_f128$(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_f32$(OBJ) \ + test_a_i64_z_f64$(OBJ) \ + test_a_i64_z_extF80$(OBJ) \ + test_a_i64_z_f128$(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_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_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_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_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$(OBJ) \ + fail$(OBJ) \ + functions_common$(OBJ) \ + functionInfos$(OBJ) \ + standardFunctionInfos$(OBJ) \ + random$(OBJ) \ + genCases_common$(OBJ) \ + $(OBJS_GENCASES) \ + genCases_writeTestsTotal$(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) $^ + +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) $^ + +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) $^ + +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) $^ + +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) $^ + +.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/build/Win64-MinGW-w64/platform.h b/build/Win64-MinGW-w64/platform.h new file mode 100644 index 0000000..4b38236 --- /dev/null +++ b/build/Win64-MinGW-w64/platform.h @@ -0,0 +1,42 @@ + +/*============================================================================ + +This C header file is part of TestFloat, Release 3, 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 +(Regents). All Rights Reserved. Redistribution and use in source and binary +forms, with or without modification, are permitted provided that the following +conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer. +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer in the +documentation and/or other materials provided with the distribution. Neither +the name of the Regents nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING +OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +=============================================================================*/ + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +#define LITTLEENDIAN 1 + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +#define INLINE extern inline + diff --git a/build/template/Makefile b/build/template/Makefile new file mode 100644 index 0000000..69ae812 --- /dev/null +++ b/build/template/Makefile @@ -0,0 +1,315 @@ + +#============================================================================= +# +# This Makefile template is part of TestFloat, Release 3, 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 +# (Regents). All Rights Reserved. Redistribution and use in source and +# binary forms, with or without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following two paragraphs of disclaimer in +# the documentation and/or other materials provided with the distribution. +# Neither the name of the Regents nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +# SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +# REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +# HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +# MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +#============================================================================= + +# Edit lines marked with `==>'. See "TestFloat-source.html". + +==> SOURCE_DIR = ../../source +==> SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C +==> SOFTFLOAT_DIR = ../../../SoftFloat-3 +==> SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include +==> PLATFORM = Win32-MinGW + +==> SOFTFLOAT_H = \ +==> $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ +==> $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h +==> SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) + +==> TESTFLOAT_OPTS = -DEXTFLOAT80 -DFLOAT128 -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 $@ + +==> 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_f32$(OBJ) \ + genCases_f64$(OBJ) \ + genCases_extF80$(OBJ) \ + genCases_f128$(OBJ) \ + +OBJS_WRITECASE = \ + writeCase_a_ui32$(OBJ) \ + writeCase_a_ui64$(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_abc_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_f32$(OBJ) \ + writeCase_z_f64$(OBJ) \ + writeCase_z_extF80M$(OBJ) \ + writeCase_z_f128M$(OBJ) \ + +OBJS_TEST = \ + 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_f32$(OBJ) \ + test_a_ui64_z_f64$(OBJ) \ + test_a_ui64_z_extF80$(OBJ) \ + test_a_ui64_z_f128$(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_f32$(OBJ) \ + test_a_i64_z_f64$(OBJ) \ + test_a_i64_z_extF80$(OBJ) \ + test_a_i64_z_f128$(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_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_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_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_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$(OBJ) \ + fail$(OBJ) \ + functions_common$(OBJ) \ + functionInfos$(OBJ) \ + standardFunctionInfos$(OBJ) \ + random$(OBJ) \ + genCases_common$(OBJ) \ + $(OBJS_GENCASES) \ + genCases_writeTestsTotal$(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) $^ + +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) $^ + +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) $^ + +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) $^ + +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) $^ + +.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/build/template/platform.h b/build/template/platform.h new file mode 100644 index 0000000..cc8f97b --- /dev/null +++ b/build/template/platform.h @@ -0,0 +1,44 @@ + +/*============================================================================ + +This C header template is part of TestFloat, Release 3, 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 +(Regents). All Rights Reserved. Redistribution and use in source and binary +forms, with or without modification, are permitted provided that the following +conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer. +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions, and the following two paragraphs of disclaimer in the +documentation and/or other materials provided with the distribution. Neither +the name of the Regents nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING +OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +=============================================================================*/ + +// Edit lines marked with `==>'. See "TestFloat-source.html". + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +==> #define LITTLEENDIAN 1 + +/*---------------------------------------------------------------------------- +*----------------------------------------------------------------------------*/ +==> #define INLINE inline + diff --git a/doc/TestFloat-source.html b/doc/TestFloat-source.html index a875479..9c42e59 100644 --- a/doc/TestFloat-source.html +++ b/doc/TestFloat-source.html @@ -60,7 +60,7 @@ For basic documentation about TestFloat refer to

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. +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. @@ -205,8 +205,10 @@ The supplied directory structure is as follows: subj-C build template - Win32-MinGW Linux-386-GCC + Linux-x86_64-GCC + Win32-MinGW + Win64-MinGW-w64 The majority of the TestFloat sources are provided in the source directory. @@ -240,9 +242,11 @@ 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 Win32 -and Linux-386, and <compiler> is -MinGW and GCC, respectively. +<execution-environment> is +Linux-386, Linux-x86_64, +Win32, or Win64, and +<compiler> is GCC, +MinGW, or MinGW-w64.

@@ -311,7 +315,7 @@ are changed.

SOFTFLOAT_LIB
The full path of the compiled SoftFloat library (usually -softfloat.a). +softfloat.a or libsoftfloat.a).

@@ -521,7 +525,7 @@ 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 -most UNIX-derived systems), TestFloat can be improved by overriding the given +UNIX-derived systems), TestFloat can be improved by overriding the given random.c with a target-specific one.

diff --git a/source/genCases.h b/source/genCases.h index d186592..56ef52a 100644 --- a/source/genCases.h +++ b/source/genCases.h @@ -45,19 +45,19 @@ extern bool genCases_done; void genCases_ui32_a_init( void ); void genCases_ui32_a_next( void ); -extern uint_fast32_t genCases_ui32_a; +extern uint32_t genCases_ui32_a; void genCases_ui64_a_init( void ); void genCases_ui64_a_next( void ); -extern uint_fast64_t genCases_ui64_a; +extern uint64_t genCases_ui64_a; void genCases_i32_a_init( void ); void genCases_i32_a_next( void ); -extern int_fast32_t genCases_i32_a; +extern int32_t genCases_i32_a; void genCases_i64_a_init( void ); void genCases_i64_a_next( void ); -extern int_fast64_t genCases_i64_a; +extern int64_t genCases_i64_a; void genCases_f32_a_init( void ); void genCases_f32_a_next( void ); diff --git a/source/genCases_i32.c b/source/genCases_i32.c index bc3287a..2e03881 100644 --- a/source/genCases_i32.c +++ b/source/genCases_i32.c @@ -173,7 +173,7 @@ static const uint32_t i32P1[i32NumP1] = { 0x00000003 }; -static int_fast32_t i32NextP1( struct sequence *sequencePtr ) +static int32_t i32NextP1( struct sequence *sequencePtr ) { int termNum; union ui32_i32 uZ; @@ -192,7 +192,7 @@ static int_fast32_t i32NextP1( struct sequence *sequencePtr ) static const int_fast32_t i32NumP2 = (i32NumP1 * i32NumP1 + i32NumP1) / 2; -static int_fast32_t i32NextP2( struct sequence *sequencePtr ) +static int32_t i32NextP2( struct sequence *sequencePtr ) { int term1Num, term2Num; union ui32_i32 uZ; @@ -215,7 +215,7 @@ static int_fast32_t i32NextP2( struct sequence *sequencePtr ) } -static int_fast32_t i32RandomP3( void ) +static int32_t i32RandomP3( void ) { union ui32_i32 uZ; @@ -290,7 +290,7 @@ static const uint32_t i32PInfWeightOffsets[i32NumPInfWeightMasks] = { 0xFFFFFFF8 }; -static int_fast32_t i32RandomPInf( void ) +static int32_t i32RandomPInf( void ) { int weightMaskNum; union ui32_i32 uZ; @@ -306,7 +306,7 @@ static int_fast32_t i32RandomPInf( void ) static struct sequence sequenceA; static int subcase; -int_fast32_t genCases_i32_a; +int32_t genCases_i32_a; void genCases_i32_a_init( void ) { diff --git a/source/genCases_i64.c b/source/genCases_i64.c index b98df8d..f912570 100644 --- a/source/genCases_i64.c +++ b/source/genCases_i64.c @@ -301,7 +301,7 @@ static const uint64_t i64P1[i64NumP1] = { UINT64_C( 0x0000000000000003 ) }; -static int_fast64_t i64NextP1( struct sequence *sequencePtr ) +static int64_t i64NextP1( struct sequence *sequencePtr ) { int termNum; union ui64_i64 uZ; @@ -320,7 +320,7 @@ static int_fast64_t i64NextP1( struct sequence *sequencePtr ) static const int_fast64_t i64NumP2 = (i64NumP1 * i64NumP1 + i64NumP1) / 2; -static int_fast64_t i64NextP2( struct sequence *sequencePtr ) +static int64_t i64NextP2( struct sequence *sequencePtr ) { int term1Num, term2Num; union ui64_i64 uZ; @@ -343,7 +343,7 @@ static int_fast64_t i64NextP2( struct sequence *sequencePtr ) } -static int_fast64_t i64RandomP3( void ) +static int64_t i64RandomP3( void ) { union ui64_i64 uZ; @@ -482,7 +482,7 @@ static const uint64_t i64PInfWeightOffsets[i64NumPInfWeightMasks] = { UINT64_C( 0xFFFFFFFFFFFFFFF8 ) }; -static int_fast64_t i64RandomPInf( void ) +static int64_t i64RandomPInf( void ) { int weightMaskNum; union ui64_i64 uZ; @@ -498,7 +498,7 @@ static int_fast64_t i64RandomPInf( void ) static struct sequence sequenceA; static int subcase; -int_fast64_t genCases_i64_a; +int64_t genCases_i64_a; void genCases_i64_a_init( void ) { diff --git a/source/genCases_ui32.c b/source/genCases_ui32.c index 3b890cb..cbc6e58 100644 --- a/source/genCases_ui32.c +++ b/source/genCases_ui32.c @@ -171,10 +171,10 @@ static const uint32_t ui32P1[ui32NumP1] = { 0x00000003 }; -static uint_fast32_t ui32NextP1( struct sequence *sequencePtr ) +static uint32_t ui32NextP1( struct sequence *sequencePtr ) { int termNum; - uint_fast32_t z; + uint32_t z; termNum = sequencePtr->term1Num; z = ui32P1[termNum]; @@ -190,10 +190,10 @@ static uint_fast32_t ui32NextP1( struct sequence *sequencePtr ) static const uint_fast32_t ui32NumP2 = (ui32NumP1 * ui32NumP1 + ui32NumP1) / 2; -static uint_fast32_t ui32NextP2( struct sequence *sequencePtr ) +static uint32_t ui32NextP2( struct sequence *sequencePtr ) { int term1Num, term2Num; - uint_fast32_t z; + uint32_t z; term2Num = sequencePtr->term2Num; term1Num = sequencePtr->term1Num; @@ -213,7 +213,7 @@ static uint_fast32_t ui32NextP2( struct sequence *sequencePtr ) } -static uint_fast32_t ui32RandomP3( void ) +static uint32_t ui32RandomP3( void ) { return @@ -255,7 +255,7 @@ static const uint32_t ui32PInfWeightMasks[ui32NumPInfWeightMasks] = { 0x0000000F }; -static uint_fast32_t ui32RandomPInf( void ) +static uint32_t ui32RandomPInf( void ) { int weightMaskNum; @@ -267,7 +267,7 @@ static uint_fast32_t ui32RandomPInf( void ) static struct sequence sequenceA; static int subcase; -uint_fast32_t genCases_ui32_a; +uint32_t genCases_ui32_a; void genCases_ui32_a_init( void ) { diff --git a/source/genCases_ui64.c b/source/genCases_ui64.c index 51dc428..c3526f3 100644 --- a/source/genCases_ui64.c +++ b/source/genCases_ui64.c @@ -299,10 +299,10 @@ static const uint64_t ui64P1[ui64NumP1] = { UINT64_C( 0x0000000000000003 ) }; -static uint_fast64_t ui64NextP1( struct sequence *sequencePtr ) +static uint64_t ui64NextP1( struct sequence *sequencePtr ) { int termNum; - uint_fast64_t z; + uint64_t z; termNum = sequencePtr->term1Num; z = ui64P1[termNum]; @@ -318,10 +318,10 @@ static uint_fast64_t ui64NextP1( struct sequence *sequencePtr ) static const uint_fast64_t ui64NumP2 = (ui64NumP1 * ui64NumP1 + ui64NumP1) / 2; -static uint_fast64_t ui64NextP2( struct sequence *sequencePtr ) +static uint64_t ui64NextP2( struct sequence *sequencePtr ) { int term1Num, term2Num; - uint_fast64_t z; + uint64_t z; term2Num = sequencePtr->term2Num; term1Num = sequencePtr->term1Num; @@ -341,7 +341,7 @@ static uint_fast64_t ui64NextP2( struct sequence *sequencePtr ) } -static uint_fast64_t ui64RandomP3( void ) +static uint64_t ui64RandomP3( void ) { return @@ -415,7 +415,7 @@ static const uint64_t ui64PInfWeightMasks[ui64NumPInfWeightMasks] = { UINT64_C( 0x000000000000000F ) }; -static uint_fast64_t ui64RandomPInf( void ) +static uint64_t ui64RandomPInf( void ) { int weightMaskNum; @@ -427,7 +427,7 @@ static uint_fast64_t ui64RandomPInf( void ) static struct sequence sequenceA; static int subcase; -uint_fast64_t genCases_ui64_a; +uint64_t genCases_ui64_a; void genCases_ui64_a_init( void ) { diff --git a/source/genLoops.c b/source/genLoops.c index 893c344..179ebea 100644 --- a/source/genLoops.c +++ b/source/genLoops.c @@ -474,7 +474,7 @@ void gen_abc_f128( void ) #endif -void gen_a_ui32_z_f32( float32_t trueFunction( uint_fast32_t ) ) +void gen_a_ui32_z_f32( float32_t trueFunction( uint32_t ) ) { union ui32_f32 uTrueZ; uint_fast8_t trueFlags; @@ -492,7 +492,7 @@ void gen_a_ui32_z_f32( float32_t trueFunction( uint_fast32_t ) ) } -void gen_a_ui32_z_f64( float64_t trueFunction( uint_fast32_t ) ) +void gen_a_ui32_z_f64( float64_t trueFunction( uint32_t ) ) { union ui64_f64 uTrueZ; uint_fast8_t trueFlags; @@ -512,7 +512,7 @@ void gen_a_ui32_z_f64( float64_t trueFunction( uint_fast32_t ) ) #ifdef EXTFLOAT80 -void gen_a_ui32_z_extF80( void trueFunction( uint_fast32_t, extFloat80_t * ) ) +void gen_a_ui32_z_extF80( void trueFunction( uint32_t, extFloat80_t * ) ) { extFloat80_t trueZ; uint_fast8_t trueFlags; @@ -534,7 +534,7 @@ void gen_a_ui32_z_extF80( void trueFunction( uint_fast32_t, extFloat80_t * ) ) #ifdef FLOAT128 -void gen_a_ui32_z_f128( void trueFunction( uint_fast32_t, float128_t * ) ) +void gen_a_ui32_z_f128( void trueFunction( uint32_t, float128_t * ) ) { float128_t trueZ; uint_fast8_t trueFlags; @@ -554,7 +554,7 @@ void gen_a_ui32_z_f128( void trueFunction( uint_fast32_t, float128_t * ) ) #endif -void gen_a_ui64_z_f32( float32_t trueFunction( uint_fast64_t ) ) +void gen_a_ui64_z_f32( float32_t trueFunction( uint64_t ) ) { union ui32_f32 uTrueZ; uint_fast8_t trueFlags; @@ -572,7 +572,7 @@ void gen_a_ui64_z_f32( float32_t trueFunction( uint_fast64_t ) ) } -void gen_a_ui64_z_f64( float64_t trueFunction( uint_fast64_t ) ) +void gen_a_ui64_z_f64( float64_t trueFunction( uint64_t ) ) { union ui64_f64 uTrueZ; uint_fast8_t trueFlags; @@ -592,7 +592,7 @@ void gen_a_ui64_z_f64( float64_t trueFunction( uint_fast64_t ) ) #ifdef EXTFLOAT80 -void gen_a_ui64_z_extF80( void trueFunction( uint_fast64_t, extFloat80_t * ) ) +void gen_a_ui64_z_extF80( void trueFunction( uint64_t, extFloat80_t * ) ) { extFloat80_t trueZ; uint_fast8_t trueFlags; @@ -614,7 +614,7 @@ void gen_a_ui64_z_extF80( void trueFunction( uint_fast64_t, extFloat80_t * ) ) #ifdef FLOAT128 -void gen_a_ui64_z_f128( void trueFunction( uint_fast64_t, float128_t * ) ) +void gen_a_ui64_z_f128( void trueFunction( uint64_t, float128_t * ) ) { float128_t trueZ; uint_fast8_t trueFlags; @@ -634,7 +634,7 @@ void gen_a_ui64_z_f128( void trueFunction( uint_fast64_t, float128_t * ) ) #endif -void gen_a_i32_z_f32( float32_t trueFunction( int_fast32_t ) ) +void gen_a_i32_z_f32( float32_t trueFunction( int32_t ) ) { union ui32_f32 uTrueZ; uint_fast8_t trueFlags; @@ -652,7 +652,7 @@ void gen_a_i32_z_f32( float32_t trueFunction( int_fast32_t ) ) } -void gen_a_i32_z_f64( float64_t trueFunction( int_fast32_t ) ) +void gen_a_i32_z_f64( float64_t trueFunction( int32_t ) ) { union ui64_f64 uTrueZ; uint_fast8_t trueFlags; @@ -672,7 +672,7 @@ void gen_a_i32_z_f64( float64_t trueFunction( int_fast32_t ) ) #ifdef EXTFLOAT80 -void gen_a_i32_z_extF80( void trueFunction( int_fast32_t, extFloat80_t * ) ) +void gen_a_i32_z_extF80( void trueFunction( int32_t, extFloat80_t * ) ) { extFloat80_t trueZ; uint_fast8_t trueFlags; @@ -694,7 +694,7 @@ void gen_a_i32_z_extF80( void trueFunction( int_fast32_t, extFloat80_t * ) ) #ifdef FLOAT128 -void gen_a_i32_z_f128( void trueFunction( int_fast32_t, float128_t * ) ) +void gen_a_i32_z_f128( void trueFunction( int32_t, float128_t * ) ) { float128_t trueZ; uint_fast8_t trueFlags; @@ -714,7 +714,7 @@ void gen_a_i32_z_f128( void trueFunction( int_fast32_t, float128_t * ) ) #endif -void gen_a_i64_z_f32( float32_t trueFunction( int_fast64_t ) ) +void gen_a_i64_z_f32( float32_t trueFunction( int64_t ) ) { union ui32_f32 uTrueZ; uint_fast8_t trueFlags; @@ -732,7 +732,7 @@ void gen_a_i64_z_f32( float32_t trueFunction( int_fast64_t ) ) } -void gen_a_i64_z_f64( float64_t trueFunction( int_fast64_t ) ) +void gen_a_i64_z_f64( float64_t trueFunction( int64_t ) ) { union ui64_f64 uTrueZ; uint_fast8_t trueFlags; @@ -752,7 +752,7 @@ void gen_a_i64_z_f64( float64_t trueFunction( int_fast64_t ) ) #ifdef EXTFLOAT80 -void gen_a_i64_z_extF80( void trueFunction( int_fast64_t, extFloat80_t * ) ) +void gen_a_i64_z_extF80( void trueFunction( int64_t, extFloat80_t * ) ) { extFloat80_t trueZ; uint_fast8_t trueFlags; @@ -774,7 +774,7 @@ void gen_a_i64_z_extF80( void trueFunction( int_fast64_t, extFloat80_t * ) ) #ifdef FLOAT128 -void gen_a_i64_z_f128( void trueFunction( int_fast64_t, float128_t * ) ) +void gen_a_i64_z_f128( void trueFunction( int64_t, float128_t * ) ) { float128_t trueZ; uint_fast8_t trueFlags; diff --git a/source/genLoops.h b/source/genLoops.h index 74ac42e..8cb5ded 100644 --- a/source/genLoops.h +++ b/source/genLoops.h @@ -64,37 +64,37 @@ void gen_ab_f128( void ); void gen_abc_f128( void ); #endif -void gen_a_ui32_z_f32( float32_t ( uint_fast32_t ) ); -void gen_a_ui32_z_f64( float64_t ( uint_fast32_t ) ); +void gen_a_ui32_z_f32( float32_t ( uint32_t ) ); +void gen_a_ui32_z_f64( float64_t ( uint32_t ) ); #ifdef EXTFLOAT80 -void gen_a_ui32_z_extF80( void ( uint_fast32_t, extFloat80_t * ) ); +void gen_a_ui32_z_extF80( void ( uint32_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void gen_a_ui32_z_f128( void ( uint_fast32_t, float128_t * ) ); +void gen_a_ui32_z_f128( void ( uint32_t, float128_t * ) ); #endif -void gen_a_ui64_z_f32( float32_t ( uint_fast64_t ) ); -void gen_a_ui64_z_f64( float64_t ( uint_fast64_t ) ); +void gen_a_ui64_z_f32( float32_t ( uint64_t ) ); +void gen_a_ui64_z_f64( float64_t ( uint64_t ) ); #ifdef EXTFLOAT80 -void gen_a_ui64_z_extF80( void ( uint_fast64_t, extFloat80_t * ) ); +void gen_a_ui64_z_extF80( void ( uint64_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void gen_a_ui64_z_f128( void ( uint_fast64_t, float128_t * ) ); +void gen_a_ui64_z_f128( void ( uint64_t, float128_t * ) ); #endif -void gen_a_i32_z_f32( float32_t ( int_fast32_t ) ); -void gen_a_i32_z_f64( float64_t ( int_fast32_t ) ); +void gen_a_i32_z_f32( float32_t ( int32_t ) ); +void gen_a_i32_z_f64( float64_t ( int32_t ) ); #ifdef EXTFLOAT80 -void gen_a_i32_z_extF80( void ( int_fast32_t, extFloat80_t * ) ); +void gen_a_i32_z_extF80( void ( int32_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void gen_a_i32_z_f128( void ( int_fast32_t, float128_t * ) ); +void gen_a_i32_z_f128( void ( int32_t, float128_t * ) ); #endif -void gen_a_i64_z_f32( float32_t ( int_fast64_t ) ); -void gen_a_i64_z_f64( float64_t ( int_fast64_t ) ); +void gen_a_i64_z_f32( float32_t ( int64_t ) ); +void gen_a_i64_z_f64( float64_t ( int64_t ) ); #ifdef EXTFLOAT80 -void gen_a_i64_z_extF80( void ( int_fast64_t, extFloat80_t * ) ); +void gen_a_i64_z_extF80( void ( int64_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void gen_a_i64_z_f128( void ( int_fast64_t, float128_t * ) ); +void gen_a_i64_z_f128( void ( int64_t, float128_t * ) ); #endif void diff --git a/source/subj-C/subjfloat.c b/source/subj-C/subjfloat.c index 4d1a0d6..52a5911 100644 --- a/source/subj-C/subjfloat.c +++ b/source/subj-C/subjfloat.c @@ -94,7 +94,7 @@ uint_fast8_t subjfloat_clearExceptionFlags( void ) union f32_f { float32_t f32; float f; }; union f64_d { float64_t f64; double d; }; -float32_t subj_ui32_to_f32( uint_fast32_t a ) +float32_t subj_ui32_to_f32( uint32_t a ) { union f32_f uZ; @@ -103,7 +103,7 @@ float32_t subj_ui32_to_f32( uint_fast32_t a ) } -float64_t subj_ui32_to_f64( uint_fast32_t a ) +float64_t subj_ui32_to_f64( uint32_t a ) { union f64_d uZ; @@ -112,7 +112,7 @@ float64_t subj_ui32_to_f64( uint_fast32_t a ) } -float32_t subj_ui64_to_f32( uint_fast64_t a ) +float32_t subj_ui64_to_f32( uint64_t a ) { union f32_f uZ; @@ -121,7 +121,7 @@ float32_t subj_ui64_to_f32( uint_fast64_t a ) } -float64_t subj_ui64_to_f64( uint_fast64_t a ) +float64_t subj_ui64_to_f64( uint64_t a ) { union f64_d uZ; @@ -130,7 +130,7 @@ float64_t subj_ui64_to_f64( uint_fast64_t a ) } -float32_t subj_i32_to_f32( int_fast32_t a ) +float32_t subj_i32_to_f32( int32_t a ) { union f32_f uZ; @@ -139,7 +139,7 @@ float32_t subj_i32_to_f32( int_fast32_t a ) } -float64_t subj_i32_to_f64( int_fast32_t a ) +float64_t subj_i32_to_f64( int32_t a ) { union f64_d uZ; @@ -148,7 +148,7 @@ float64_t subj_i32_to_f64( int_fast32_t a ) } -float32_t subj_i64_to_f32( int_fast64_t a ) +float32_t subj_i64_to_f32( int64_t a ) { union f32_f uZ; @@ -157,7 +157,7 @@ float32_t subj_i64_to_f32( int_fast64_t a ) } -float64_t subj_i64_to_f64( int_fast64_t a ) +float64_t subj_i64_to_f64( int64_t a ) { union f64_d uZ; @@ -420,28 +420,28 @@ bool subj_f64_lt( float64_t a, float64_t b ) #if defined EXTFLOAT80 && defined LONG_DOUBLE_IS_EXTFLOAT80 -void subj_ui32_to_extF80M( uint_fast32_t a, extFloat80_t *zPtr ) +void subj_ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) { *((long double *) zPtr) = a; } -void subj_ui64_to_extF80M( uint_fast64_t a, extFloat80_t *zPtr ) +void subj_ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) { *((long double *) zPtr) = a; } -void subj_i32_to_extF80M( int_fast32_t a, extFloat80_t *zPtr ) +void subj_i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) { *((long double *) zPtr) = a; } -void subj_i64_to_extF80M( int_fast64_t a, extFloat80_t *zPtr ) +void subj_i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) { *((long double *) zPtr) = a; @@ -577,28 +577,28 @@ bool subj_extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) #if defined FLOAT128 && defined LONG_DOUBLE_IS_FLOAT128 -void subj_ui32_to_f128M( uint_fast32_t a, float128_t *zPtr ) +void subj_ui32_to_f128M( uint32_t a, float128_t *zPtr ) { *((long double *) zPtr) = a; } -void subj_ui64_to_f128M( uint_fast64_t a, float128_t *zPtr ) +void subj_ui64_to_f128M( uint64_t a, float128_t *zPtr ) { *((long double *) zPtr) = a; } -void subj_i32_to_f128M( int_fast32_t a, float128_t *zPtr ) +void subj_i32_to_f128M( int32_t a, float128_t *zPtr ) { *((long double *) zPtr) = a; } -void subj_i64_to_f128M( int_fast64_t a, float128_t *zPtr ) +void subj_i64_to_f128M( int64_t a, float128_t *zPtr ) { *((long double *) zPtr) = a; diff --git a/source/subjfloat.h b/source/subjfloat.h index 4423944..44d6964 100644 --- a/source/subjfloat.h +++ b/source/subjfloat.h @@ -51,37 +51,37 @@ uint_fast8_t subjfloat_clearExceptionFlags( void ); /*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/ -float32_t subj_ui32_to_f32( uint_fast32_t ); -float64_t subj_ui32_to_f64( uint_fast32_t ); +float32_t subj_ui32_to_f32( uint32_t ); +float64_t subj_ui32_to_f64( uint32_t ); #ifdef EXTFLOAT80 -void subj_ui32_to_extF80M( uint_fast32_t, extFloat80_t * ); +void subj_ui32_to_extF80M( uint32_t, extFloat80_t * ); #endif #ifdef FLOAT128 -void subj_ui32_to_f128M( uint_fast32_t, float128_t * ); +void subj_ui32_to_f128M( uint32_t, float128_t * ); #endif -float32_t subj_ui64_to_f32( uint_fast64_t ); -float64_t subj_ui64_to_f64( uint_fast64_t ); +float32_t subj_ui64_to_f32( uint64_t ); +float64_t subj_ui64_to_f64( uint64_t ); #ifdef EXTFLOAT80 -void subj_ui64_to_extF80M( uint_fast64_t, extFloat80_t * ); +void subj_ui64_to_extF80M( uint64_t, extFloat80_t * ); #endif #ifdef FLOAT128 -void subj_ui64_to_f128M( uint_fast64_t, float128_t * ); +void subj_ui64_to_f128M( uint64_t, float128_t * ); #endif -float32_t subj_i32_to_f32( int_fast32_t ); -float64_t subj_i32_to_f64( int_fast32_t ); +float32_t subj_i32_to_f32( int32_t ); +float64_t subj_i32_to_f64( int32_t ); #ifdef EXTFLOAT80 -void subj_i32_to_extF80M( int_fast32_t, extFloat80_t * ); +void subj_i32_to_extF80M( int32_t, extFloat80_t * ); #endif #ifdef FLOAT128 -void subj_i32_to_f128M( int_fast32_t, float128_t * ); +void subj_i32_to_f128M( int32_t, float128_t * ); #endif -float32_t subj_i64_to_f32( int_fast64_t ); -float64_t subj_i64_to_f64( int_fast64_t ); +float32_t subj_i64_to_f32( int64_t ); +float64_t subj_i64_to_f64( int64_t ); #ifdef EXTFLOAT80 -void subj_i64_to_extF80M( int_fast64_t, extFloat80_t * ); +void subj_i64_to_extF80M( int64_t, extFloat80_t * ); #endif #ifdef FLOAT128 -void subj_i64_to_f128M( int_fast64_t, float128_t * ); +void subj_i64_to_f128M( int64_t, float128_t * ); #endif /*---------------------------------------------------------------------------- diff --git a/source/test_a_extF80_z_ui64_rx.c b/source/test_a_extF80_z_ui64_rx.c index 83dff24..71bf340 100644 --- a/source/test_a_extF80_z_ui64_rx.c +++ b/source/test_a_extF80_z_ui64_rx.c @@ -92,7 +92,7 @@ void ) { ++verCases_errorCount; verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); + writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); if ( verCases_errorCount == verCases_maxErrorCount ) break; } diff --git a/source/testfloat.c b/source/testfloat.c index 73044f8..bc8e820 100644 --- a/source/testfloat.c +++ b/source/testfloat.c @@ -58,37 +58,37 @@ static void catchSIGINT( int signalCode ) static void (*subjFunctionPtr)(); -typedef float32_t funcType_a_ui32_z_f32( uint_fast32_t ); -typedef float64_t funcType_a_ui32_z_f64( uint_fast32_t ); +typedef float32_t funcType_a_ui32_z_f32( uint32_t ); +typedef float64_t funcType_a_ui32_z_f64( uint32_t ); #ifdef EXTFLOAT80 -typedef void funcType_a_ui32_z_extF80( uint_fast32_t, extFloat80_t * ); +typedef void funcType_a_ui32_z_extF80( uint32_t, extFloat80_t * ); #endif #ifdef FLOAT128 -typedef void funcType_a_ui32_z_f128( uint_fast32_t, float128_t * ); +typedef void funcType_a_ui32_z_f128( uint32_t, float128_t * ); #endif -typedef float32_t funcType_a_ui64_z_f32( uint_fast64_t ); -typedef float64_t funcType_a_ui64_z_f64( uint_fast64_t ); +typedef float32_t funcType_a_ui64_z_f32( uint64_t ); +typedef float64_t funcType_a_ui64_z_f64( uint64_t ); #ifdef EXTFLOAT80 -typedef void funcType_a_ui64_z_extF80( uint_fast64_t, extFloat80_t * ); +typedef void funcType_a_ui64_z_extF80( uint64_t, extFloat80_t * ); #endif #ifdef FLOAT128 -typedef void funcType_a_ui64_z_f128( uint_fast64_t, float128_t * ); +typedef void funcType_a_ui64_z_f128( uint64_t, float128_t * ); #endif -typedef float32_t funcType_a_i32_z_f32( int_fast32_t ); -typedef float64_t funcType_a_i32_z_f64( int_fast32_t ); +typedef float32_t funcType_a_i32_z_f32( int32_t ); +typedef float64_t funcType_a_i32_z_f64( int32_t ); #ifdef EXTFLOAT80 -typedef void funcType_a_i32_z_extF80( int_fast32_t, extFloat80_t * ); +typedef void funcType_a_i32_z_extF80( int32_t, extFloat80_t * ); #endif #ifdef FLOAT128 -typedef void funcType_a_i32_z_f128( int_fast32_t, float128_t * ); +typedef void funcType_a_i32_z_f128( int32_t, float128_t * ); #endif -typedef float32_t funcType_a_i64_z_f32( int_fast64_t ); -typedef float64_t funcType_a_i64_z_f64( int_fast64_t ); +typedef float32_t funcType_a_i64_z_f32( int64_t ); +typedef float64_t funcType_a_i64_z_f64( int64_t ); #ifdef EXTFLOAT80 -typedef void funcType_a_i64_z_extF80( int_fast64_t, extFloat80_t * ); +typedef void funcType_a_i64_z_extF80( int64_t, extFloat80_t * ); #endif #ifdef FLOAT128 -typedef void funcType_a_i64_z_f128( int_fast64_t, float128_t * ); +typedef void funcType_a_i64_z_f128( int64_t, float128_t * ); #endif typedef uint_fast32_t funcType_a_f32_z_ui32( float32_t ); diff --git a/source/verLoops.c b/source/verLoops.c index b607a4d..fe162b4 100644 --- a/source/verLoops.c +++ b/source/verLoops.c @@ -184,7 +184,7 @@ static void readVerInput_flags( uint_fast8_t *flagsPtr ) /*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/ -void ver_a_ui32_z_f32( float32_t trueFunction( uint_fast32_t ) ) +void ver_a_ui32_z_f32( float32_t trueFunction( uint32_t ) ) { int count; uint_fast32_t a; @@ -228,7 +228,7 @@ void ver_a_ui32_z_f32( float32_t trueFunction( uint_fast32_t ) ) } -void ver_a_ui32_z_f64( float64_t trueFunction( uint_fast32_t ) ) +void ver_a_ui32_z_f64( float64_t trueFunction( uint32_t ) ) { int count; uint_fast32_t a; @@ -274,7 +274,7 @@ void ver_a_ui32_z_f64( float64_t trueFunction( uint_fast32_t ) ) #ifdef EXTFLOAT80 -void ver_a_ui32_z_extF80( void trueFunction( uint_fast32_t, extFloat80_t * ) ) +void ver_a_ui32_z_extF80( void trueFunction( uint32_t, extFloat80_t * ) ) { int count; uint_fast32_t a; @@ -322,7 +322,7 @@ void ver_a_ui32_z_extF80( void trueFunction( uint_fast32_t, extFloat80_t * ) ) #ifdef FLOAT128 -void ver_a_ui32_z_f128( void trueFunction( uint_fast32_t, float128_t * ) ) +void ver_a_ui32_z_f128( void trueFunction( uint32_t, float128_t * ) ) { int count; uint_fast32_t a; @@ -370,7 +370,7 @@ void ver_a_ui32_z_f128( void trueFunction( uint_fast32_t, float128_t * ) ) /*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/ -void ver_a_ui64_z_f32( float32_t trueFunction( uint_fast64_t ) ) +void ver_a_ui64_z_f32( float32_t trueFunction( uint64_t ) ) { int count; uint_fast64_t a; @@ -414,7 +414,7 @@ void ver_a_ui64_z_f32( float32_t trueFunction( uint_fast64_t ) ) } -void ver_a_ui64_z_f64( float64_t trueFunction( uint_fast64_t ) ) +void ver_a_ui64_z_f64( float64_t trueFunction( uint64_t ) ) { int count; uint_fast64_t a; @@ -460,7 +460,7 @@ void ver_a_ui64_z_f64( float64_t trueFunction( uint_fast64_t ) ) #ifdef EXTFLOAT80 -void ver_a_ui64_z_extF80( void trueFunction( uint_fast64_t, extFloat80_t * ) ) +void ver_a_ui64_z_extF80( void trueFunction( uint64_t, extFloat80_t * ) ) { int count; uint_fast64_t a; @@ -508,7 +508,7 @@ void ver_a_ui64_z_extF80( void trueFunction( uint_fast64_t, extFloat80_t * ) ) #ifdef FLOAT128 -void ver_a_ui64_z_f128( void trueFunction( uint_fast64_t, float128_t * ) ) +void ver_a_ui64_z_f128( void trueFunction( uint64_t, float128_t * ) ) { int count; uint_fast64_t a; @@ -556,7 +556,7 @@ void ver_a_ui64_z_f128( void trueFunction( uint_fast64_t, float128_t * ) ) /*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/ -void ver_a_i32_z_f32( float32_t trueFunction( int_fast32_t ) ) +void ver_a_i32_z_f32( float32_t trueFunction( int32_t ) ) { int count; int_fast32_t a; @@ -600,7 +600,7 @@ void ver_a_i32_z_f32( float32_t trueFunction( int_fast32_t ) ) } -void ver_a_i32_z_f64( float64_t trueFunction( int_fast32_t ) ) +void ver_a_i32_z_f64( float64_t trueFunction( int32_t ) ) { int count; int_fast32_t a; @@ -646,7 +646,7 @@ void ver_a_i32_z_f64( float64_t trueFunction( int_fast32_t ) ) #ifdef EXTFLOAT80 -void ver_a_i32_z_extF80( void trueFunction( int_fast32_t, extFloat80_t * ) ) +void ver_a_i32_z_extF80( void trueFunction( int32_t, extFloat80_t * ) ) { int count; int_fast32_t a; @@ -694,7 +694,7 @@ void ver_a_i32_z_extF80( void trueFunction( int_fast32_t, extFloat80_t * ) ) #ifdef FLOAT128 -void ver_a_i32_z_f128( void trueFunction( int_fast32_t, float128_t * ) ) +void ver_a_i32_z_f128( void trueFunction( int32_t, float128_t * ) ) { int count; int_fast32_t a; @@ -742,7 +742,7 @@ void ver_a_i32_z_f128( void trueFunction( int_fast32_t, float128_t * ) ) /*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/ -void ver_a_i64_z_f32( float32_t trueFunction( int_fast64_t ) ) +void ver_a_i64_z_f32( float32_t trueFunction( int64_t ) ) { int count; int_fast64_t a; @@ -786,7 +786,7 @@ void ver_a_i64_z_f32( float32_t trueFunction( int_fast64_t ) ) } -void ver_a_i64_z_f64( float64_t trueFunction( int_fast64_t ) ) +void ver_a_i64_z_f64( float64_t trueFunction( int64_t ) ) { int count; int_fast64_t a; @@ -832,7 +832,7 @@ void ver_a_i64_z_f64( float64_t trueFunction( int_fast64_t ) ) #ifdef EXTFLOAT80 -void ver_a_i64_z_extF80( void trueFunction( int_fast64_t, extFloat80_t * ) ) +void ver_a_i64_z_extF80( void trueFunction( int64_t, extFloat80_t * ) ) { int count; int_fast64_t a; @@ -880,7 +880,7 @@ void ver_a_i64_z_extF80( void trueFunction( int_fast64_t, extFloat80_t * ) ) #ifdef FLOAT128 -void ver_a_i64_z_f128( void trueFunction( int_fast64_t, float128_t * ) ) +void ver_a_i64_z_f128( void trueFunction( int64_t, float128_t * ) ) { int count; int_fast64_t a; diff --git a/source/verLoops.h b/source/verLoops.h index b575641..63fae3d 100644 --- a/source/verLoops.h +++ b/source/verLoops.h @@ -38,37 +38,37 @@ MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. extern uint_fast8_t *verLoops_trueFlagsPtr; -void ver_a_ui32_z_f32( float32_t ( uint_fast32_t ) ); -void ver_a_ui32_z_f64( float64_t ( uint_fast32_t ) ); +void ver_a_ui32_z_f32( float32_t ( uint32_t ) ); +void ver_a_ui32_z_f64( float64_t ( uint32_t ) ); #ifdef EXTFLOAT80 -void ver_a_ui32_z_extF80( void ( uint_fast32_t, extFloat80_t * ) ); +void ver_a_ui32_z_extF80( void ( uint32_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void ver_a_ui32_z_f128( void ( uint_fast32_t, float128_t * ) ); +void ver_a_ui32_z_f128( void ( uint32_t, float128_t * ) ); #endif -void ver_a_ui64_z_f32( float32_t ( uint_fast64_t ) ); -void ver_a_ui64_z_f64( float64_t ( uint_fast64_t ) ); +void ver_a_ui64_z_f32( float32_t ( uint64_t ) ); +void ver_a_ui64_z_f64( float64_t ( uint64_t ) ); #ifdef EXTFLOAT80 -void ver_a_ui64_z_extF80( void ( uint_fast64_t, extFloat80_t * ) ); +void ver_a_ui64_z_extF80( void ( uint64_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void ver_a_ui64_z_f128( void ( uint_fast64_t, float128_t * ) ); +void ver_a_ui64_z_f128( void ( uint64_t, float128_t * ) ); #endif -void ver_a_i32_z_f32( float32_t ( int_fast32_t ) ); -void ver_a_i32_z_f64( float64_t ( int_fast32_t ) ); +void ver_a_i32_z_f32( float32_t ( int32_t ) ); +void ver_a_i32_z_f64( float64_t ( int32_t ) ); #ifdef EXTFLOAT80 -void ver_a_i32_z_extF80( void ( int_fast32_t, extFloat80_t * ) ); +void ver_a_i32_z_extF80( void ( int32_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void ver_a_i32_z_f128( void ( int_fast32_t, float128_t * ) ); +void ver_a_i32_z_f128( void ( int32_t, float128_t * ) ); #endif -void ver_a_i64_z_f32( float32_t ( int_fast64_t ) ); -void ver_a_i64_z_f64( float64_t ( int_fast64_t ) ); +void ver_a_i64_z_f32( float32_t ( int64_t ) ); +void ver_a_i64_z_f64( float64_t ( int64_t ) ); #ifdef EXTFLOAT80 -void ver_a_i64_z_extF80( void ( int_fast64_t, extFloat80_t * ) ); +void ver_a_i64_z_extF80( void ( int64_t, extFloat80_t * ) ); #endif #ifdef FLOAT128 -void ver_a_i64_z_f128( void ( int_fast64_t, float128_t * ) ); +void ver_a_i64_z_f128( void ( int64_t, float128_t * ) ); #endif void -- cgit v1.1