8 Commits

492 changed files with 49633 additions and 48809 deletions

View File

@ -100,7 +100,12 @@ protected:
using compile_ret_t = virt_addr_t; using compile_ret_t = virt_addr_t;
using compile_func = compile_ret_t (this_class::*)(virt_addr_t &pc, code_word_t instr); using compile_func = compile_ret_t (this_class::*)(virt_addr_t &pc, code_word_t instr);
inline const char *name(size_t index){return index<traits::reg_aliases.size()?traits::reg_aliases[index]:"illegal";} inline const char *name(size_t index){return traits::reg_aliases.at(index);}
<%
def fcsr = registers.find {it.name=='FCSR'}
if(fcsr != null) {%>
inline const char *fname(size_t index){return index < 32?name(index+traits::F0):"illegal";}
<%}%>
virt_addr_t execute_inst(finish_cond_e cond, virt_addr_t start, uint64_t icount_limit) override; virt_addr_t execute_inst(finish_cond_e cond, virt_addr_t start, uint64_t icount_limit) override;

2
softfloat/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
build/*/*.o
build/*/*.a

View File

@ -1,37 +1,37 @@
License for Berkeley SoftFloat Release 3e License for Berkeley SoftFloat Release 3e
John R. Hauser John R. Hauser
2018 January 20 2018 January 20
The following applies to the whole of SoftFloat Release 3e as well as to The following applies to the whole of SoftFloat Release 3e as well as to
each source file individually. each source file individually.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright 2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions, and the following disclaimer in the notice, this list of conditions, and the following disclaimer in the
documentation and/or other materials provided with the distribution. documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors 3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software may be used to endorse or promote products derived from this software
without specific prior written permission. without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,49 +1,49 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>Berkeley SoftFloat Package Overview</TITLE> <TITLE>Berkeley SoftFloat Package Overview</TITLE>
</HEAD> </HEAD>
<BODY> <BODY>
<H1>Package Overview for Berkeley SoftFloat Release 3e</H1> <H1>Package Overview for Berkeley SoftFloat Release 3e</H1>
<P> <P>
John R. Hauser<BR> John R. Hauser<BR>
2018 January 20<BR> 2018 January 20<BR>
</P> </P>
<P> <P>
Berkeley SoftFloat is a software implementation of binary floating-point that Berkeley SoftFloat is a software implementation of binary floating-point that
conforms to the IEEE Standard for Floating-Point Arithmetic. conforms to the IEEE Standard for Floating-Point Arithmetic.
SoftFloat is distributed in the form of C source code. SoftFloat is distributed in the form of C source code.
Building the SoftFloat sources generates a library file (typically Building the SoftFloat sources generates a library file (typically
<CODE>softfloat.a</CODE> or <CODE>libsoftfloat.a</CODE>) containing the <CODE>softfloat.a</CODE> or <CODE>libsoftfloat.a</CODE>) containing the
floating-point subroutines. floating-point subroutines.
</P> </P>
<P> <P>
The SoftFloat package is documented in the following files in the The SoftFloat package is documented in the following files in the
<CODE>doc</CODE> subdirectory: <CODE>doc</CODE> subdirectory:
<BLOCKQUOTE> <BLOCKQUOTE>
<TABLE> <TABLE>
<TR> <TR>
<TD><A HREF="doc/SoftFloat.html"><NOBR><CODE>SoftFloat.html</CODE></NOBR></A></TD> <TD><A HREF="doc/SoftFloat.html"><NOBR><CODE>SoftFloat.html</CODE></NOBR></A></TD>
<TD>Documentation for using the SoftFloat functions.</TD> <TD>Documentation for using the SoftFloat functions.</TD>
</TR> </TR>
<TR> <TR>
<TD><A HREF="doc/SoftFloat-source.html"><NOBR><CODE>SoftFloat-source.html</CODE></NOBR></A></TD> <TD><A HREF="doc/SoftFloat-source.html"><NOBR><CODE>SoftFloat-source.html</CODE></NOBR></A></TD>
<TD>Documentation for building SoftFloat.</TD> <TD>Documentation for building SoftFloat.</TD>
</TR> </TR>
<TR> <TR>
<TD><A HREF="doc/SoftFloat-history.html"><NOBR><CODE>SoftFloat-history.html</CODE></A><CODE>&nbsp;&nbsp;&nbsp;</CODE></NOBR></TD> <TD><A HREF="doc/SoftFloat-history.html"><NOBR><CODE>SoftFloat-history.html</CODE></A><CODE>&nbsp;&nbsp;&nbsp;</CODE></NOBR></TD>
<TD>History of the major changes to SoftFloat.</TD> <TD>History of the major changes to SoftFloat.</TD>
</TR> </TR>
</TABLE> </TABLE>
</BLOCKQUOTE> </BLOCKQUOTE>
Other files in the package comprise the source code for SoftFloat. Other files in the package comprise the source code for SoftFloat.
</P> </P>
</BODY> </BODY>

24
softfloat/README.md Normal file
View File

@ -0,0 +1,24 @@
Package Overview for Berkeley SoftFloat Release 3e
==================================================
John R. Hauser<br>
2018 January 20
Berkeley SoftFloat is a software implementation of binary floating-point
that conforms to the IEEE Standard for Floating-Point Arithmetic. SoftFloat
is distributed in the form of C source code. Building the SoftFloat sources
generates a library file (typically `softfloat.a` or `libsoftfloat.a`)
containing the floating-point subroutines.
The SoftFloat package is documented in the following files in the `doc`
subdirectory:
* [SoftFloat.html](http://www.jhauser.us/arithmetic/SoftFloat-3/doc/SoftFloat.html) Documentation for using the SoftFloat functions.
* [SoftFloat-source.html](http://www.jhauser.us/arithmetic/SoftFloat-3/doc/SoftFloat-source.html) Documentation for building SoftFloat.
* [SoftFloat-history.html](http://www.jhauser.us/arithmetic/SoftFloat-3/doc/SoftFloat-history.html) History of the major changes to SoftFloat.
Other files in the package comprise the source code for SoftFloat.

View File

@ -1,21 +1,21 @@
Package Overview for Berkeley SoftFloat Release 3e Package Overview for Berkeley SoftFloat Release 3e
John R. Hauser John R. Hauser
2018 January 20 2018 January 20
Berkeley SoftFloat is a software implementation of binary floating-point Berkeley SoftFloat is a software implementation of binary floating-point
that conforms to the IEEE Standard for Floating-Point Arithmetic. SoftFloat that conforms to the IEEE Standard for Floating-Point Arithmetic. SoftFloat
is distributed in the form of C source code. Building the SoftFloat sources is distributed in the form of C source code. Building the SoftFloat sources
generates a library file (typically "softfloat.a" or "libsoftfloat.a") generates a library file (typically "softfloat.a" or "libsoftfloat.a")
containing the floating-point subroutines. containing the floating-point subroutines.
The SoftFloat package is documented in the following files in the "doc" The SoftFloat package is documented in the following files in the "doc"
subdirectory: subdirectory:
SoftFloat.html Documentation for using the SoftFloat functions. SoftFloat.html Documentation for using the SoftFloat functions.
SoftFloat-source.html Documentation for building SoftFloat. SoftFloat-source.html Documentation for building SoftFloat.
SoftFloat-history.html History of the major changes to SoftFloat. SoftFloat-history.html History of the major changes to SoftFloat.
Other files in the package comprise the source code for SoftFloat. Other files in the package comprise the source code for SoftFloat.

View File

@ -1,325 +1,325 @@
#============================================================================= #=============================================================================
# #
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic # This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser. # Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
SOURCE_DIR ?= ../../source SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= 8086 SPECIALIZE_TYPE ?= 8086
SOFTFLOAT_OPTS ?= \ SOFTFLOAT_OPTS ?= \
-DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
-DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_DIV64TO32
DELETE = rm -f DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \ COMPILE_C = \
gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
$(C_INCLUDES) -O2 -o $@ $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@ MAKELIB = ar crs $@
OBJ = .o OBJ = .o
LIB = .a LIB = .a
OTHER_HEADERS = OTHER_HEADERS =
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_compare96M$(OBJ) \ s_compare96M$(OBJ) \
s_compare128M$(OBJ) \ s_compare128M$(OBJ) \
s_shortShiftLeft64To96M$(OBJ) \ s_shortShiftLeft64To96M$(OBJ) \
s_shortShiftLeftM$(OBJ) \ s_shortShiftLeftM$(OBJ) \
s_shiftLeftM$(OBJ) \ s_shiftLeftM$(OBJ) \
s_shortShiftRightM$(OBJ) \ s_shortShiftRightM$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJamM$(OBJ) \ s_shortShiftRightJamM$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJamM$(OBJ) \ s_shiftRightJamM$(OBJ) \
s_shiftRightM$(OBJ) \ s_shiftRightM$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_addM$(OBJ) \ s_addM$(OBJ) \
s_addCarryM$(OBJ) \ s_addCarryM$(OBJ) \
s_addComplCarryM$(OBJ) \ s_addComplCarryM$(OBJ) \
s_negXM$(OBJ) \ s_negXM$(OBJ) \
s_sub1XM$(OBJ) \ s_sub1XM$(OBJ) \
s_subM$(OBJ) \ s_subM$(OBJ) \
s_mul64To128M$(OBJ) \ s_mul64To128M$(OBJ) \
s_mul128MTo256M$(OBJ) \ s_mul128MTo256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
s_remStepMBy32$(OBJ) \ s_remStepMBy32$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80MToCommonNaN$(OBJ) \ s_extF80MToCommonNaN$(OBJ) \
s_commonNaNToExtF80M$(OBJ) \ s_commonNaNToExtF80M$(OBJ) \
s_propagateNaNExtF80M$(OBJ) \ s_propagateNaNExtF80M$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128MToCommonNaN$(OBJ) \ s_f128MToCommonNaN$(OBJ) \
s_commonNaNToF128M$(OBJ) \ s_commonNaNToF128M$(OBJ) \
s_propagateNaNF128M$(OBJ) \ s_propagateNaNF128M$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundMToUI64$(OBJ) \ s_roundMToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundMToI64$(OBJ) \ s_roundMToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_mulAddF64$(OBJ) \
s_tryPropagateNaNExtF80M$(OBJ) \ s_tryPropagateNaNExtF80M$(OBJ) \
s_invalidExtF80M$(OBJ) \ s_invalidExtF80M$(OBJ) \
s_normExtF80SigM$(OBJ) \ s_normExtF80SigM$(OBJ) \
s_roundPackMToExtF80M$(OBJ) \ s_roundPackMToExtF80M$(OBJ) \
s_normRoundPackMToExtF80M$(OBJ) \ s_normRoundPackMToExtF80M$(OBJ) \
s_addExtF80M$(OBJ) \ s_addExtF80M$(OBJ) \
s_compareNonnormExtF80M$(OBJ) \ s_compareNonnormExtF80M$(OBJ) \
s_isNaNF128M$(OBJ) \ s_isNaNF128M$(OBJ) \
s_tryPropagateNaNF128M$(OBJ) \ s_tryPropagateNaNF128M$(OBJ) \
s_invalidF128M$(OBJ) \ s_invalidF128M$(OBJ) \
s_shiftNormSigF128M$(OBJ) \ s_shiftNormSigF128M$(OBJ) \
s_roundPackMToF128M$(OBJ) \ s_roundPackMToF128M$(OBJ) \
s_normRoundPackMToF128M$(OBJ) \ s_normRoundPackMToF128M$(OBJ) \
s_addF128M$(OBJ) \ s_addF128M$(OBJ) \
s_mulAddF128M$(OBJ) \ s_mulAddF128M$(OBJ) \
softfloat_state$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_extF80M$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_extF80M$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_extF80M$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_f64$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \ f16_roundToInt$(OBJ) \
f16_add$(OBJ) \ f16_add$(OBJ) \
f16_sub$(OBJ) \ f16_sub$(OBJ) \
f16_mul$(OBJ) \ f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \ f16_mulAdd$(OBJ) \
f16_div$(OBJ) \ f16_div$(OBJ) \
f16_rem$(OBJ) \ f16_rem$(OBJ) \
f16_sqrt$(OBJ) \ f16_sqrt$(OBJ) \
f16_eq$(OBJ) \ f16_eq$(OBJ) \
f16_le$(OBJ) \ f16_le$(OBJ) \
f16_lt$(OBJ) \ f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \ f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_f64$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_add$(OBJ) \ f32_add$(OBJ) \
f32_sub$(OBJ) \ f32_sub$(OBJ) \
f32_mul$(OBJ) \ f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \ f32_mulAdd$(OBJ) \
f32_div$(OBJ) \ f32_div$(OBJ) \
f32_rem$(OBJ) \ f32_rem$(OBJ) \
f32_sqrt$(OBJ) \ f32_sqrt$(OBJ) \
f32_eq$(OBJ) \ f32_eq$(OBJ) \
f32_le$(OBJ) \ f32_le$(OBJ) \
f32_lt$(OBJ) \ f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \ f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_f32$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_add$(OBJ) \ f64_add$(OBJ) \
f64_sub$(OBJ) \ f64_sub$(OBJ) \
f64_mul$(OBJ) \ f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \ f64_mulAdd$(OBJ) \
f64_div$(OBJ) \ f64_div$(OBJ) \
f64_rem$(OBJ) \ f64_rem$(OBJ) \
f64_sqrt$(OBJ) \ f64_sqrt$(OBJ) \
f64_eq$(OBJ) \ f64_eq$(OBJ) \
f64_le$(OBJ) \ f64_le$(OBJ) \
f64_lt$(OBJ) \ f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \ f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \ extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \ extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \ extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128M_to_ui32$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \ f128M_add$(OBJ) \
f128M_sub$(OBJ) \ f128M_sub$(OBJ) \
f128M_mul$(OBJ) \ f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \ f128M_div$(OBJ) \
f128M_rem$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \ f128M_le$(OBJ) \
f128M_lt$(OBJ) \ f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \ $(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h $(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL) softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(DELETE) $@
$(MAKELIB) $^ $(MAKELIB) $^
.PHONY: clean .PHONY: clean
clean: clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,52 +1,53 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1 #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__ #ifdef __GNUC_STDC_INLINE__
#define INLINE inline #define INLINE inline
#else #else
#define INLINE extern inline #define INLINE extern inline
#endif #endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define SOFTFLOAT_BUILTIN_CLZ 1 #define SOFTFLOAT_BUILTIN_CLZ 1
#include "opts-GCC.h" #include "opts-GCC.h"

View File

@ -1,325 +1,325 @@
#============================================================================= #=============================================================================
# #
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic # This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser. # Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
SOURCE_DIR ?= ../../source SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= 8086-SSE SPECIALIZE_TYPE ?= 8086-SSE
SOFTFLOAT_OPTS ?= \ SOFTFLOAT_OPTS ?= \
-DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
-DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_DIV64TO32
DELETE = rm -f DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \ COMPILE_C = \
gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
$(C_INCLUDES) -O2 -o $@ $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@ MAKELIB = ar crs $@
OBJ = .o OBJ = .o
LIB = .a LIB = .a
OTHER_HEADERS = OTHER_HEADERS =
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_compare96M$(OBJ) \ s_compare96M$(OBJ) \
s_compare128M$(OBJ) \ s_compare128M$(OBJ) \
s_shortShiftLeft64To96M$(OBJ) \ s_shortShiftLeft64To96M$(OBJ) \
s_shortShiftLeftM$(OBJ) \ s_shortShiftLeftM$(OBJ) \
s_shiftLeftM$(OBJ) \ s_shiftLeftM$(OBJ) \
s_shortShiftRightM$(OBJ) \ s_shortShiftRightM$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJamM$(OBJ) \ s_shortShiftRightJamM$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJamM$(OBJ) \ s_shiftRightJamM$(OBJ) \
s_shiftRightM$(OBJ) \ s_shiftRightM$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_addM$(OBJ) \ s_addM$(OBJ) \
s_addCarryM$(OBJ) \ s_addCarryM$(OBJ) \
s_addComplCarryM$(OBJ) \ s_addComplCarryM$(OBJ) \
s_negXM$(OBJ) \ s_negXM$(OBJ) \
s_sub1XM$(OBJ) \ s_sub1XM$(OBJ) \
s_subM$(OBJ) \ s_subM$(OBJ) \
s_mul64To128M$(OBJ) \ s_mul64To128M$(OBJ) \
s_mul128MTo256M$(OBJ) \ s_mul128MTo256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
s_remStepMBy32$(OBJ) \ s_remStepMBy32$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80MToCommonNaN$(OBJ) \ s_extF80MToCommonNaN$(OBJ) \
s_commonNaNToExtF80M$(OBJ) \ s_commonNaNToExtF80M$(OBJ) \
s_propagateNaNExtF80M$(OBJ) \ s_propagateNaNExtF80M$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128MToCommonNaN$(OBJ) \ s_f128MToCommonNaN$(OBJ) \
s_commonNaNToF128M$(OBJ) \ s_commonNaNToF128M$(OBJ) \
s_propagateNaNF128M$(OBJ) \ s_propagateNaNF128M$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundMToUI64$(OBJ) \ s_roundMToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundMToI64$(OBJ) \ s_roundMToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_mulAddF64$(OBJ) \
s_tryPropagateNaNExtF80M$(OBJ) \ s_tryPropagateNaNExtF80M$(OBJ) \
s_invalidExtF80M$(OBJ) \ s_invalidExtF80M$(OBJ) \
s_normExtF80SigM$(OBJ) \ s_normExtF80SigM$(OBJ) \
s_roundPackMToExtF80M$(OBJ) \ s_roundPackMToExtF80M$(OBJ) \
s_normRoundPackMToExtF80M$(OBJ) \ s_normRoundPackMToExtF80M$(OBJ) \
s_addExtF80M$(OBJ) \ s_addExtF80M$(OBJ) \
s_compareNonnormExtF80M$(OBJ) \ s_compareNonnormExtF80M$(OBJ) \
s_isNaNF128M$(OBJ) \ s_isNaNF128M$(OBJ) \
s_tryPropagateNaNF128M$(OBJ) \ s_tryPropagateNaNF128M$(OBJ) \
s_invalidF128M$(OBJ) \ s_invalidF128M$(OBJ) \
s_shiftNormSigF128M$(OBJ) \ s_shiftNormSigF128M$(OBJ) \
s_roundPackMToF128M$(OBJ) \ s_roundPackMToF128M$(OBJ) \
s_normRoundPackMToF128M$(OBJ) \ s_normRoundPackMToF128M$(OBJ) \
s_addF128M$(OBJ) \ s_addF128M$(OBJ) \
s_mulAddF128M$(OBJ) \ s_mulAddF128M$(OBJ) \
softfloat_state$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_extF80M$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_extF80M$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_extF80M$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_f64$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \ f16_roundToInt$(OBJ) \
f16_add$(OBJ) \ f16_add$(OBJ) \
f16_sub$(OBJ) \ f16_sub$(OBJ) \
f16_mul$(OBJ) \ f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \ f16_mulAdd$(OBJ) \
f16_div$(OBJ) \ f16_div$(OBJ) \
f16_rem$(OBJ) \ f16_rem$(OBJ) \
f16_sqrt$(OBJ) \ f16_sqrt$(OBJ) \
f16_eq$(OBJ) \ f16_eq$(OBJ) \
f16_le$(OBJ) \ f16_le$(OBJ) \
f16_lt$(OBJ) \ f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \ f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_f64$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_add$(OBJ) \ f32_add$(OBJ) \
f32_sub$(OBJ) \ f32_sub$(OBJ) \
f32_mul$(OBJ) \ f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \ f32_mulAdd$(OBJ) \
f32_div$(OBJ) \ f32_div$(OBJ) \
f32_rem$(OBJ) \ f32_rem$(OBJ) \
f32_sqrt$(OBJ) \ f32_sqrt$(OBJ) \
f32_eq$(OBJ) \ f32_eq$(OBJ) \
f32_le$(OBJ) \ f32_le$(OBJ) \
f32_lt$(OBJ) \ f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \ f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_f32$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_add$(OBJ) \ f64_add$(OBJ) \
f64_sub$(OBJ) \ f64_sub$(OBJ) \
f64_mul$(OBJ) \ f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \ f64_mulAdd$(OBJ) \
f64_div$(OBJ) \ f64_div$(OBJ) \
f64_rem$(OBJ) \ f64_rem$(OBJ) \
f64_sqrt$(OBJ) \ f64_sqrt$(OBJ) \
f64_eq$(OBJ) \ f64_eq$(OBJ) \
f64_le$(OBJ) \ f64_le$(OBJ) \
f64_lt$(OBJ) \ f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \ f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \ extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \ extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \ extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128M_to_ui32$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \ f128M_add$(OBJ) \
f128M_sub$(OBJ) \ f128M_sub$(OBJ) \
f128M_mul$(OBJ) \ f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \ f128M_div$(OBJ) \
f128M_rem$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \ f128M_le$(OBJ) \
f128M_lt$(OBJ) \ f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \ $(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h $(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL) softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(DELETE) $@
$(MAKELIB) $^ $(MAKELIB) $^
.PHONY: clean .PHONY: clean
clean: clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,52 +1,53 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1 #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__ #ifdef __GNUC_STDC_INLINE__
#define INLINE inline #define INLINE inline
#else #else
#define INLINE extern inline #define INLINE extern inline
#endif #endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define SOFTFLOAT_BUILTIN_CLZ 1 #define SOFTFLOAT_BUILTIN_CLZ 1
#include "opts-GCC.h" #include "opts-GCC.h"

View File

@ -1,323 +1,323 @@
#============================================================================= #=============================================================================
# #
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic # This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser. # Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
SOURCE_DIR ?= ../../source SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= ARM-VFPv2 SPECIALIZE_TYPE ?= ARM-VFPv2
SOFTFLOAT_OPTS ?= -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 SOFTFLOAT_OPTS ?= -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5
DELETE = rm -f DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \ COMPILE_C = \
gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
$(C_INCLUDES) -O2 -o $@ $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@ MAKELIB = ar crs $@
OBJ = .o OBJ = .o
LIB = .a LIB = .a
OTHER_HEADERS = OTHER_HEADERS =
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_compare96M$(OBJ) \ s_compare96M$(OBJ) \
s_compare128M$(OBJ) \ s_compare128M$(OBJ) \
s_shortShiftLeft64To96M$(OBJ) \ s_shortShiftLeft64To96M$(OBJ) \
s_shortShiftLeftM$(OBJ) \ s_shortShiftLeftM$(OBJ) \
s_shiftLeftM$(OBJ) \ s_shiftLeftM$(OBJ) \
s_shortShiftRightM$(OBJ) \ s_shortShiftRightM$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJamM$(OBJ) \ s_shortShiftRightJamM$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJamM$(OBJ) \ s_shiftRightJamM$(OBJ) \
s_shiftRightM$(OBJ) \ s_shiftRightM$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_addM$(OBJ) \ s_addM$(OBJ) \
s_addCarryM$(OBJ) \ s_addCarryM$(OBJ) \
s_addComplCarryM$(OBJ) \ s_addComplCarryM$(OBJ) \
s_negXM$(OBJ) \ s_negXM$(OBJ) \
s_sub1XM$(OBJ) \ s_sub1XM$(OBJ) \
s_subM$(OBJ) \ s_subM$(OBJ) \
s_mul64To128M$(OBJ) \ s_mul64To128M$(OBJ) \
s_mul128MTo256M$(OBJ) \ s_mul128MTo256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
s_remStepMBy32$(OBJ) \ s_remStepMBy32$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80MToCommonNaN$(OBJ) \ s_extF80MToCommonNaN$(OBJ) \
s_commonNaNToExtF80M$(OBJ) \ s_commonNaNToExtF80M$(OBJ) \
s_propagateNaNExtF80M$(OBJ) \ s_propagateNaNExtF80M$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128MToCommonNaN$(OBJ) \ s_f128MToCommonNaN$(OBJ) \
s_commonNaNToF128M$(OBJ) \ s_commonNaNToF128M$(OBJ) \
s_propagateNaNF128M$(OBJ) \ s_propagateNaNF128M$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundMToUI64$(OBJ) \ s_roundMToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundMToI64$(OBJ) \ s_roundMToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_mulAddF64$(OBJ) \
s_tryPropagateNaNExtF80M$(OBJ) \ s_tryPropagateNaNExtF80M$(OBJ) \
s_invalidExtF80M$(OBJ) \ s_invalidExtF80M$(OBJ) \
s_normExtF80SigM$(OBJ) \ s_normExtF80SigM$(OBJ) \
s_roundPackMToExtF80M$(OBJ) \ s_roundPackMToExtF80M$(OBJ) \
s_normRoundPackMToExtF80M$(OBJ) \ s_normRoundPackMToExtF80M$(OBJ) \
s_addExtF80M$(OBJ) \ s_addExtF80M$(OBJ) \
s_compareNonnormExtF80M$(OBJ) \ s_compareNonnormExtF80M$(OBJ) \
s_isNaNF128M$(OBJ) \ s_isNaNF128M$(OBJ) \
s_tryPropagateNaNF128M$(OBJ) \ s_tryPropagateNaNF128M$(OBJ) \
s_invalidF128M$(OBJ) \ s_invalidF128M$(OBJ) \
s_shiftNormSigF128M$(OBJ) \ s_shiftNormSigF128M$(OBJ) \
s_roundPackMToF128M$(OBJ) \ s_roundPackMToF128M$(OBJ) \
s_normRoundPackMToF128M$(OBJ) \ s_normRoundPackMToF128M$(OBJ) \
s_addF128M$(OBJ) \ s_addF128M$(OBJ) \
s_mulAddF128M$(OBJ) \ s_mulAddF128M$(OBJ) \
softfloat_state$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_extF80M$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_extF80M$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_extF80M$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_f64$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \ f16_roundToInt$(OBJ) \
f16_add$(OBJ) \ f16_add$(OBJ) \
f16_sub$(OBJ) \ f16_sub$(OBJ) \
f16_mul$(OBJ) \ f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \ f16_mulAdd$(OBJ) \
f16_div$(OBJ) \ f16_div$(OBJ) \
f16_rem$(OBJ) \ f16_rem$(OBJ) \
f16_sqrt$(OBJ) \ f16_sqrt$(OBJ) \
f16_eq$(OBJ) \ f16_eq$(OBJ) \
f16_le$(OBJ) \ f16_le$(OBJ) \
f16_lt$(OBJ) \ f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \ f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_f64$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_add$(OBJ) \ f32_add$(OBJ) \
f32_sub$(OBJ) \ f32_sub$(OBJ) \
f32_mul$(OBJ) \ f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \ f32_mulAdd$(OBJ) \
f32_div$(OBJ) \ f32_div$(OBJ) \
f32_rem$(OBJ) \ f32_rem$(OBJ) \
f32_sqrt$(OBJ) \ f32_sqrt$(OBJ) \
f32_eq$(OBJ) \ f32_eq$(OBJ) \
f32_le$(OBJ) \ f32_le$(OBJ) \
f32_lt$(OBJ) \ f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \ f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_f32$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_add$(OBJ) \ f64_add$(OBJ) \
f64_sub$(OBJ) \ f64_sub$(OBJ) \
f64_mul$(OBJ) \ f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \ f64_mulAdd$(OBJ) \
f64_div$(OBJ) \ f64_div$(OBJ) \
f64_rem$(OBJ) \ f64_rem$(OBJ) \
f64_sqrt$(OBJ) \ f64_sqrt$(OBJ) \
f64_eq$(OBJ) \ f64_eq$(OBJ) \
f64_le$(OBJ) \ f64_le$(OBJ) \
f64_lt$(OBJ) \ f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \ f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \ extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \ extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \ extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128M_to_ui32$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \ f128M_add$(OBJ) \
f128M_sub$(OBJ) \ f128M_sub$(OBJ) \
f128M_mul$(OBJ) \ f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \ f128M_div$(OBJ) \
f128M_rem$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \ f128M_le$(OBJ) \
f128M_lt$(OBJ) \ f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \ $(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h $(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL) softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(DELETE) $@
$(MAKELIB) $^ $(MAKELIB) $^
.PHONY: clean .PHONY: clean
clean: clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,52 +1,53 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1 #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__ #ifdef __GNUC_STDC_INLINE__
#define INLINE inline #define INLINE inline
#else #else
#define INLINE extern inline #define INLINE extern inline
#endif #endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define SOFTFLOAT_BUILTIN_CLZ 1 #define SOFTFLOAT_BUILTIN_CLZ 1
#include "opts-GCC.h" #include "opts-GCC.h"

View File

@ -0,0 +1,399 @@
#=============================================================================
#
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser.
#
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#=============================================================================
SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= RISCV
MARCH ?= rv64gcv_zfh_zfhmin
MABI ?= lp64d
SOFTFLOAT_OPTS ?= \
-DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
-DSOFTFLOAT_FAST_DIV64TO32
DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \
riscv64-unknown-linux-gnu-gcc -c -march=$(MARCH) -mabi=$(MABI) -Werror-implicit-function-declaration -DSOFTFLOAT_FAST_INT64 \
$(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@
OBJ = .o
LIB = .a
OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h
.PHONY: all
all: softfloat$(LIB)
OBJS_PRIMITIVES = \
s_eq128$(OBJ) \
s_le128$(OBJ) \
s_lt128$(OBJ) \
s_shortShiftLeft128$(OBJ) \
s_shortShiftRight128$(OBJ) \
s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJam64Extra$(OBJ) \
s_shortShiftRightJam128$(OBJ) \
s_shortShiftRightJam128Extra$(OBJ) \
s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \
s_shiftRightJam64Extra$(OBJ) \
s_shiftRightJam128$(OBJ) \
s_shiftRightJam128Extra$(OBJ) \
s_shiftRightJam256M$(OBJ) \
s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \
s_add128$(OBJ) \
s_add256M$(OBJ) \
s_sub128$(OBJ) \
s_sub256M$(OBJ) \
s_mul64ByShifted32To128$(OBJ) \
s_mul64To128$(OBJ) \
s_mul128By32$(OBJ) \
s_mul128To256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \
OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \
s_bf16UIToCommonNaN$(OBJ) \
s_commonNaNToBF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \
s_extF80UIToCommonNaN$(OBJ) \
s_commonNaNToExtF80UI$(OBJ) \
s_propagateNaNExtF80UI$(OBJ) \
f128M_isSignalingNaN$(OBJ) \
s_f128UIToCommonNaN$(OBJ) \
s_commonNaNToF128UI$(OBJ) \
s_propagateNaNF128UI$(OBJ) \
OBJS_OTHERS = \
s_roundToUI32$(OBJ) \
s_roundToUI64$(OBJ) \
s_roundToI32$(OBJ) \
s_roundToI64$(OBJ) \
s_normSubnormalBF16Sig$(OBJ) \
s_roundPackToBF16$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \
s_normSubnormalExtF80Sig$(OBJ) \
s_roundPackToExtF80$(OBJ) \
s_normRoundPackToExtF80$(OBJ) \
s_addMagsExtF80$(OBJ) \
s_subMagsExtF80$(OBJ) \
s_normSubnormalF128Sig$(OBJ) \
s_roundPackToF128$(OBJ) \
s_normRoundPackToF128$(OBJ) \
s_addMagsF128$(OBJ) \
s_subMagsF128$(OBJ) \
s_mulAddF128$(OBJ) \
softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \
ui32_to_extF80$(OBJ) \
ui32_to_extF80M$(OBJ) \
ui32_to_f128$(OBJ) \
ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \
ui64_to_extF80$(OBJ) \
ui64_to_extF80M$(OBJ) \
ui64_to_f128$(OBJ) \
ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \
i32_to_extF80$(OBJ) \
i32_to_extF80M$(OBJ) \
i32_to_f128$(OBJ) \
i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \
i64_to_extF80$(OBJ) \
i64_to_extF80M$(OBJ) \
i64_to_f128$(OBJ) \
i64_to_f128M$(OBJ) \
bf16_isSignalingNaN$(OBJ) \
bf16_to_f32$(OBJ) \
f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \
f16_to_extF80$(OBJ) \
f16_to_extF80M$(OBJ) \
f16_to_f128$(OBJ) \
f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \
f16_add$(OBJ) \
f16_sub$(OBJ) \
f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \
f16_div$(OBJ) \
f16_rem$(OBJ) \
f16_sqrt$(OBJ) \
f16_eq$(OBJ) \
f16_le$(OBJ) \
f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \
f32_to_bf16$(OBJ) \
f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \
f32_to_extF80$(OBJ) \
f32_to_extF80M$(OBJ) \
f32_to_f128$(OBJ) \
f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \
f32_add$(OBJ) \
f32_sub$(OBJ) \
f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \
f32_div$(OBJ) \
f32_rem$(OBJ) \
f32_sqrt$(OBJ) \
f32_eq$(OBJ) \
f32_le$(OBJ) \
f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \
f64_to_extF80$(OBJ) \
f64_to_extF80M$(OBJ) \
f64_to_f128$(OBJ) \
f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \
f64_add$(OBJ) \
f64_sub$(OBJ) \
f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \
f64_div$(OBJ) \
f64_rem$(OBJ) \
f64_sqrt$(OBJ) \
f64_eq$(OBJ) \
f64_le$(OBJ) \
f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \
extF80_to_ui32$(OBJ) \
extF80_to_ui64$(OBJ) \
extF80_to_i32$(OBJ) \
extF80_to_i64$(OBJ) \
extF80_to_ui32_r_minMag$(OBJ) \
extF80_to_ui64_r_minMag$(OBJ) \
extF80_to_i32_r_minMag$(OBJ) \
extF80_to_i64_r_minMag$(OBJ) \
extF80_to_f16$(OBJ) \
extF80_to_f32$(OBJ) \
extF80_to_f64$(OBJ) \
extF80_to_f128$(OBJ) \
extF80_roundToInt$(OBJ) \
extF80_add$(OBJ) \
extF80_sub$(OBJ) \
extF80_mul$(OBJ) \
extF80_div$(OBJ) \
extF80_rem$(OBJ) \
extF80_sqrt$(OBJ) \
extF80_eq$(OBJ) \
extF80_le$(OBJ) \
extF80_lt$(OBJ) \
extF80_eq_signaling$(OBJ) \
extF80_le_quiet$(OBJ) \
extF80_lt_quiet$(OBJ) \
extF80_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \
f128_to_ui32$(OBJ) \
f128_to_ui64$(OBJ) \
f128_to_i32$(OBJ) \
f128_to_i64$(OBJ) \
f128_to_ui32_r_minMag$(OBJ) \
f128_to_ui64_r_minMag$(OBJ) \
f128_to_i32_r_minMag$(OBJ) \
f128_to_i64_r_minMag$(OBJ) \
f128_to_f16$(OBJ) \
f128_to_f32$(OBJ) \
f128_to_extF80$(OBJ) \
f128_to_f64$(OBJ) \
f128_roundToInt$(OBJ) \
f128_add$(OBJ) \
f128_sub$(OBJ) \
f128_mul$(OBJ) \
f128_mulAdd$(OBJ) \
f128_div$(OBJ) \
f128_rem$(OBJ) \
f128_sqrt$(OBJ) \
f128_eq$(OBJ) \
f128_le$(OBJ) \
f128_lt$(OBJ) \
f128_eq_signaling$(OBJ) \
f128_le_quiet$(OBJ) \
f128_lt_quiet$(OBJ) \
f128_isSignalingNaN$(OBJ) \
f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \
f128M_to_extF80M$(OBJ) \
f128M_to_f64$(OBJ) \
f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \
f128M_sub$(OBJ) \
f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \
f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \
f128M_le$(OBJ) \
f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@
$(MAKELIB) $^
.PHONY: clean
clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -0,0 +1,54 @@
/*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/
/*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1
/*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__
#define INLINE inline
#else
#define INLINE extern inline
#endif
/*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/
#define SOFTFLOAT_BUILTIN_CLZ 1
#define SOFTFLOAT_INTRINSIC_INT128 1
#include "opts-GCC.h"

View File

@ -1,390 +1,397 @@
#============================================================================= #=============================================================================
# #
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic # This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser. # Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
SOURCE_DIR ?= ../../source SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= 8086-SSE SPECIALIZE_TYPE ?= 8086-SSE
SOFTFLOAT_OPTS ?= \ SOFTFLOAT_OPTS ?= \
-DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
-DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_DIV64TO32
DELETE = rm -f DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \ COMPILE_C = \
gcc -c -Werror-implicit-function-declaration -DSOFTFLOAT_FAST_INT64 \ gcc -c -Werror-implicit-function-declaration -DSOFTFLOAT_FAST_INT64 \
$(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@ MAKELIB = ar crs $@
OBJ = .o OBJ = .o
LIB = .a LIB = .a
OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_eq128$(OBJ) \ s_eq128$(OBJ) \
s_le128$(OBJ) \ s_le128$(OBJ) \
s_lt128$(OBJ) \ s_lt128$(OBJ) \
s_shortShiftLeft128$(OBJ) \ s_shortShiftLeft128$(OBJ) \
s_shortShiftRight128$(OBJ) \ s_shortShiftRight128$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJam64Extra$(OBJ) \ s_shortShiftRightJam64Extra$(OBJ) \
s_shortShiftRightJam128$(OBJ) \ s_shortShiftRightJam128$(OBJ) \
s_shortShiftRightJam128Extra$(OBJ) \ s_shortShiftRightJam128Extra$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJam64Extra$(OBJ) \ s_shiftRightJam64Extra$(OBJ) \
s_shiftRightJam128$(OBJ) \ s_shiftRightJam128$(OBJ) \
s_shiftRightJam128Extra$(OBJ) \ s_shiftRightJam128Extra$(OBJ) \
s_shiftRightJam256M$(OBJ) \ s_shiftRightJam256M$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_add128$(OBJ) \ s_add128$(OBJ) \
s_add256M$(OBJ) \ s_add256M$(OBJ) \
s_sub128$(OBJ) \ s_sub128$(OBJ) \
s_sub256M$(OBJ) \ s_sub256M$(OBJ) \
s_mul64ByShifted32To128$(OBJ) \ s_mul64ByShifted32To128$(OBJ) \
s_mul64To128$(OBJ) \ s_mul64To128$(OBJ) \
s_mul128By32$(OBJ) \ s_mul128By32$(OBJ) \
s_mul128To256M$(OBJ) \ s_mul128To256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_bf16UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToBF16UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_extF80UIToCommonNaN$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
s_commonNaNToExtF80UI$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_propagateNaNExtF80UI$(OBJ) \ s_extF80UIToCommonNaN$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ s_commonNaNToExtF80UI$(OBJ) \
s_f128UIToCommonNaN$(OBJ) \ s_propagateNaNExtF80UI$(OBJ) \
s_commonNaNToF128UI$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_propagateNaNF128UI$(OBJ) \ s_f128UIToCommonNaN$(OBJ) \
s_commonNaNToF128UI$(OBJ) \
OBJS_OTHERS = \ s_propagateNaNF128UI$(OBJ) \
s_roundToUI32$(OBJ) \
s_roundToUI64$(OBJ) \ OBJS_OTHERS = \
s_roundToI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundToI64$(OBJ) \ s_roundToUI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_roundToI32$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundToI64$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normSubnormalBF16Sig$(OBJ) \
s_addMagsF16$(OBJ) \ s_roundPackToBF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_mulAddF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_roundPackToF32$(OBJ) \ s_addMagsF16$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_subMagsF16$(OBJ) \
s_addMagsF32$(OBJ) \ s_mulAddF16$(OBJ) \
s_subMagsF32$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_mulAddF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_roundPackToF64$(OBJ) \ s_addMagsF32$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_subMagsF32$(OBJ) \
s_addMagsF64$(OBJ) \ s_mulAddF32$(OBJ) \
s_subMagsF64$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_mulAddF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normSubnormalExtF80Sig$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_roundPackToExtF80$(OBJ) \ s_addMagsF64$(OBJ) \
s_normRoundPackToExtF80$(OBJ) \ s_subMagsF64$(OBJ) \
s_addMagsExtF80$(OBJ) \ s_mulAddF64$(OBJ) \
s_subMagsExtF80$(OBJ) \ s_normSubnormalExtF80Sig$(OBJ) \
s_normSubnormalF128Sig$(OBJ) \ s_roundPackToExtF80$(OBJ) \
s_roundPackToF128$(OBJ) \ s_normRoundPackToExtF80$(OBJ) \
s_normRoundPackToF128$(OBJ) \ s_addMagsExtF80$(OBJ) \
s_addMagsF128$(OBJ) \ s_subMagsExtF80$(OBJ) \
s_subMagsF128$(OBJ) \ s_normSubnormalF128Sig$(OBJ) \
s_mulAddF128$(OBJ) \ s_roundPackToF128$(OBJ) \
softfloat_state$(OBJ) \ s_normRoundPackToF128$(OBJ) \
ui32_to_f16$(OBJ) \ s_addMagsF128$(OBJ) \
ui32_to_f32$(OBJ) \ s_subMagsF128$(OBJ) \
ui32_to_f64$(OBJ) \ s_mulAddF128$(OBJ) \
ui32_to_extF80$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f128$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f64$(OBJ) \
ui64_to_f16$(OBJ) \ ui32_to_extF80$(OBJ) \
ui64_to_f32$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui64_to_f64$(OBJ) \ ui32_to_f128$(OBJ) \
ui64_to_extF80$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f128$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f64$(OBJ) \
i32_to_f16$(OBJ) \ ui64_to_extF80$(OBJ) \
i32_to_f32$(OBJ) \ ui64_to_extF80M$(OBJ) \
i32_to_f64$(OBJ) \ ui64_to_f128$(OBJ) \
i32_to_extF80$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f128$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f64$(OBJ) \
i64_to_f16$(OBJ) \ i32_to_extF80$(OBJ) \
i64_to_f32$(OBJ) \ i32_to_extF80M$(OBJ) \
i64_to_f64$(OBJ) \ i32_to_f128$(OBJ) \
i64_to_extF80$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f128$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f64$(OBJ) \
f16_to_ui32$(OBJ) \ i64_to_extF80$(OBJ) \
f16_to_ui64$(OBJ) \ i64_to_extF80M$(OBJ) \
f16_to_i32$(OBJ) \ i64_to_f128$(OBJ) \
f16_to_i64$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ bf16_isSignalingNaN$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ bf16_to_f32$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_extF80$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_f128$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_roundToInt$(OBJ) \ f16_to_f32$(OBJ) \
f16_add$(OBJ) \ f16_to_f64$(OBJ) \
f16_sub$(OBJ) \ f16_to_extF80$(OBJ) \
f16_mul$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_mulAdd$(OBJ) \ f16_to_f128$(OBJ) \
f16_div$(OBJ) \ f16_to_f128M$(OBJ) \
f16_rem$(OBJ) \ f16_roundToInt$(OBJ) \
f16_sqrt$(OBJ) \ f16_add$(OBJ) \
f16_eq$(OBJ) \ f16_sub$(OBJ) \
f16_le$(OBJ) \ f16_mul$(OBJ) \
f16_lt$(OBJ) \ f16_mulAdd$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_div$(OBJ) \
f16_le_quiet$(OBJ) \ f16_rem$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_sqrt$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_eq$(OBJ) \
f32_to_ui32$(OBJ) \ f16_le$(OBJ) \
f32_to_ui64$(OBJ) \ f16_lt$(OBJ) \
f32_to_i32$(OBJ) \ f16_eq_signaling$(OBJ) \
f32_to_i64$(OBJ) \ f16_le_quiet$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f16_lt_quiet$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_extF80$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_f128$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_roundToInt$(OBJ) \ f32_to_bf16$(OBJ) \
f32_add$(OBJ) \ f32_to_f16$(OBJ) \
f32_sub$(OBJ) \ f32_to_f64$(OBJ) \
f32_mul$(OBJ) \ f32_to_extF80$(OBJ) \
f32_mulAdd$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_div$(OBJ) \ f32_to_f128$(OBJ) \
f32_rem$(OBJ) \ f32_to_f128M$(OBJ) \
f32_sqrt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_eq$(OBJ) \ f32_add$(OBJ) \
f32_le$(OBJ) \ f32_sub$(OBJ) \
f32_lt$(OBJ) \ f32_mul$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_mulAdd$(OBJ) \
f32_le_quiet$(OBJ) \ f32_div$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_rem$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_sqrt$(OBJ) \
f64_to_ui32$(OBJ) \ f32_eq$(OBJ) \
f64_to_ui64$(OBJ) \ f32_le$(OBJ) \
f64_to_i32$(OBJ) \ f32_lt$(OBJ) \
f64_to_i64$(OBJ) \ f32_eq_signaling$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f32_le_quiet$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f32_lt_quiet$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_extF80$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_f128$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_roundToInt$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_add$(OBJ) \ f64_to_f16$(OBJ) \
f64_sub$(OBJ) \ f64_to_f32$(OBJ) \
f64_mul$(OBJ) \ f64_to_extF80$(OBJ) \
f64_mulAdd$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_div$(OBJ) \ f64_to_f128$(OBJ) \
f64_rem$(OBJ) \ f64_to_f128M$(OBJ) \
f64_sqrt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_eq$(OBJ) \ f64_add$(OBJ) \
f64_le$(OBJ) \ f64_sub$(OBJ) \
f64_lt$(OBJ) \ f64_mul$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_mulAdd$(OBJ) \
f64_le_quiet$(OBJ) \ f64_div$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_rem$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_sqrt$(OBJ) \
extF80_to_ui32$(OBJ) \ f64_eq$(OBJ) \
extF80_to_ui64$(OBJ) \ f64_le$(OBJ) \
extF80_to_i32$(OBJ) \ f64_lt$(OBJ) \
extF80_to_i64$(OBJ) \ f64_eq_signaling$(OBJ) \
extF80_to_ui32_r_minMag$(OBJ) \ f64_le_quiet$(OBJ) \
extF80_to_ui64_r_minMag$(OBJ) \ f64_lt_quiet$(OBJ) \
extF80_to_i32_r_minMag$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80_to_i64_r_minMag$(OBJ) \ extF80_to_ui32$(OBJ) \
extF80_to_f16$(OBJ) \ extF80_to_ui64$(OBJ) \
extF80_to_f32$(OBJ) \ extF80_to_i32$(OBJ) \
extF80_to_f64$(OBJ) \ extF80_to_i64$(OBJ) \
extF80_to_f128$(OBJ) \ extF80_to_ui32_r_minMag$(OBJ) \
extF80_roundToInt$(OBJ) \ extF80_to_ui64_r_minMag$(OBJ) \
extF80_add$(OBJ) \ extF80_to_i32_r_minMag$(OBJ) \
extF80_sub$(OBJ) \ extF80_to_i64_r_minMag$(OBJ) \
extF80_mul$(OBJ) \ extF80_to_f16$(OBJ) \
extF80_div$(OBJ) \ extF80_to_f32$(OBJ) \
extF80_rem$(OBJ) \ extF80_to_f64$(OBJ) \
extF80_sqrt$(OBJ) \ extF80_to_f128$(OBJ) \
extF80_eq$(OBJ) \ extF80_roundToInt$(OBJ) \
extF80_le$(OBJ) \ extF80_add$(OBJ) \
extF80_lt$(OBJ) \ extF80_sub$(OBJ) \
extF80_eq_signaling$(OBJ) \ extF80_mul$(OBJ) \
extF80_le_quiet$(OBJ) \ extF80_div$(OBJ) \
extF80_lt_quiet$(OBJ) \ extF80_rem$(OBJ) \
extF80_isSignalingNaN$(OBJ) \ extF80_sqrt$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80_eq$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80_le$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80_lt$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80_eq_signaling$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80_le_quiet$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80_lt_quiet$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80_isSignalingNaN$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_add$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_div$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_le$(OBJ) \ extF80M_add$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_div$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_rem$(OBJ) \
f128_to_ui32$(OBJ) \ extF80M_sqrt$(OBJ) \
f128_to_ui64$(OBJ) \ extF80M_eq$(OBJ) \
f128_to_i32$(OBJ) \ extF80M_le$(OBJ) \
f128_to_i64$(OBJ) \ extF80M_lt$(OBJ) \
f128_to_ui32_r_minMag$(OBJ) \ extF80M_eq_signaling$(OBJ) \
f128_to_ui64_r_minMag$(OBJ) \ extF80M_le_quiet$(OBJ) \
f128_to_i32_r_minMag$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128_to_i64_r_minMag$(OBJ) \ f128_to_ui32$(OBJ) \
f128_to_f16$(OBJ) \ f128_to_ui64$(OBJ) \
f128_to_f32$(OBJ) \ f128_to_i32$(OBJ) \
f128_to_extF80$(OBJ) \ f128_to_i64$(OBJ) \
f128_to_f64$(OBJ) \ f128_to_ui32_r_minMag$(OBJ) \
f128_roundToInt$(OBJ) \ f128_to_ui64_r_minMag$(OBJ) \
f128_add$(OBJ) \ f128_to_i32_r_minMag$(OBJ) \
f128_sub$(OBJ) \ f128_to_i64_r_minMag$(OBJ) \
f128_mul$(OBJ) \ f128_to_f16$(OBJ) \
f128_mulAdd$(OBJ) \ f128_to_f32$(OBJ) \
f128_div$(OBJ) \ f128_to_extF80$(OBJ) \
f128_rem$(OBJ) \ f128_to_f64$(OBJ) \
f128_sqrt$(OBJ) \ f128_roundToInt$(OBJ) \
f128_eq$(OBJ) \ f128_add$(OBJ) \
f128_le$(OBJ) \ f128_sub$(OBJ) \
f128_lt$(OBJ) \ f128_mul$(OBJ) \
f128_eq_signaling$(OBJ) \ f128_mulAdd$(OBJ) \
f128_le_quiet$(OBJ) \ f128_div$(OBJ) \
f128_lt_quiet$(OBJ) \ f128_rem$(OBJ) \
f128_isSignalingNaN$(OBJ) \ f128_sqrt$(OBJ) \
f128M_to_ui32$(OBJ) \ f128_eq$(OBJ) \
f128M_to_ui64$(OBJ) \ f128_le$(OBJ) \
f128M_to_i32$(OBJ) \ f128_lt$(OBJ) \
f128M_to_i64$(OBJ) \ f128_eq_signaling$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128_le_quiet$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128_lt_quiet$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128_isSignalingNaN$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_add$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_sub$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_mul$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_div$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_rem$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_eq$(OBJ) \ f128M_add$(OBJ) \
f128M_le$(OBJ) \ f128M_sub$(OBJ) \
f128M_lt$(OBJ) \ f128M_mul$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_div$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) f128M_eq$(OBJ) \
f128M_le$(OBJ) \
$(OBJS_ALL): \ f128M_lt$(OBJ) \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ f128M_eq_signaling$(OBJ) \
$(SOURCE_DIR)/include/primitives.h f128M_le_quiet$(OBJ) \
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ f128M_lt_quiet$(OBJ) \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(SOURCE_DIR)/include/softfloat.h
$(OBJS_ALL): \
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h
softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(MAKELIB) $^ $(COMPILE_C) $(SOURCE_DIR)/$*.c
.PHONY: clean $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
clean: $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
$(DELETE) $(OBJS_ALL) softfloat$(LIB)
softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@
$(MAKELIB) $^
.PHONY: clean
clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1 #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__ #ifdef __GNUC_STDC_INLINE__
//#define INLINE inline //#define INLINE inline
#define INLINE static #define INLINE static
#else #else
#define INLINE extern inline #define INLINE extern inline
#endif #endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC__ #ifdef __GNUC__
#define SOFTFLOAT_BUILTIN_CLZ 1 #define SOFTFLOAT_BUILTIN_CLZ 1
#define SOFTFLOAT_INTRINSIC_INT128 1 #define SOFTFLOAT_INTRINSIC_INT128 1
#endif #endif
#include "opts-GCC.h" #include "opts-GCC.h"

View File

@ -1,325 +1,325 @@
#============================================================================= #=============================================================================
# #
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic # This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser. # Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
SOURCE_DIR ?= ../../source SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= 8086 SPECIALIZE_TYPE ?= 8086
SOFTFLOAT_OPTS ?= \ SOFTFLOAT_OPTS ?= \
-DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
-DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_DIV64TO32
DELETE = rm -f DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \ COMPILE_C = \
gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
$(C_INCLUDES) -O2 -o $@ $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@ MAKELIB = ar crs $@
OBJ = .o OBJ = .o
LIB = .a LIB = .a
OTHER_HEADERS = OTHER_HEADERS =
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_compare96M$(OBJ) \ s_compare96M$(OBJ) \
s_compare128M$(OBJ) \ s_compare128M$(OBJ) \
s_shortShiftLeft64To96M$(OBJ) \ s_shortShiftLeft64To96M$(OBJ) \
s_shortShiftLeftM$(OBJ) \ s_shortShiftLeftM$(OBJ) \
s_shiftLeftM$(OBJ) \ s_shiftLeftM$(OBJ) \
s_shortShiftRightM$(OBJ) \ s_shortShiftRightM$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJamM$(OBJ) \ s_shortShiftRightJamM$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJamM$(OBJ) \ s_shiftRightJamM$(OBJ) \
s_shiftRightM$(OBJ) \ s_shiftRightM$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_addM$(OBJ) \ s_addM$(OBJ) \
s_addCarryM$(OBJ) \ s_addCarryM$(OBJ) \
s_addComplCarryM$(OBJ) \ s_addComplCarryM$(OBJ) \
s_negXM$(OBJ) \ s_negXM$(OBJ) \
s_sub1XM$(OBJ) \ s_sub1XM$(OBJ) \
s_subM$(OBJ) \ s_subM$(OBJ) \
s_mul64To128M$(OBJ) \ s_mul64To128M$(OBJ) \
s_mul128MTo256M$(OBJ) \ s_mul128MTo256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
s_remStepMBy32$(OBJ) \ s_remStepMBy32$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80MToCommonNaN$(OBJ) \ s_extF80MToCommonNaN$(OBJ) \
s_commonNaNToExtF80M$(OBJ) \ s_commonNaNToExtF80M$(OBJ) \
s_propagateNaNExtF80M$(OBJ) \ s_propagateNaNExtF80M$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128MToCommonNaN$(OBJ) \ s_f128MToCommonNaN$(OBJ) \
s_commonNaNToF128M$(OBJ) \ s_commonNaNToF128M$(OBJ) \
s_propagateNaNF128M$(OBJ) \ s_propagateNaNF128M$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundMToUI64$(OBJ) \ s_roundMToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundMToI64$(OBJ) \ s_roundMToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_mulAddF64$(OBJ) \
s_tryPropagateNaNExtF80M$(OBJ) \ s_tryPropagateNaNExtF80M$(OBJ) \
s_invalidExtF80M$(OBJ) \ s_invalidExtF80M$(OBJ) \
s_normExtF80SigM$(OBJ) \ s_normExtF80SigM$(OBJ) \
s_roundPackMToExtF80M$(OBJ) \ s_roundPackMToExtF80M$(OBJ) \
s_normRoundPackMToExtF80M$(OBJ) \ s_normRoundPackMToExtF80M$(OBJ) \
s_addExtF80M$(OBJ) \ s_addExtF80M$(OBJ) \
s_compareNonnormExtF80M$(OBJ) \ s_compareNonnormExtF80M$(OBJ) \
s_isNaNF128M$(OBJ) \ s_isNaNF128M$(OBJ) \
s_tryPropagateNaNF128M$(OBJ) \ s_tryPropagateNaNF128M$(OBJ) \
s_invalidF128M$(OBJ) \ s_invalidF128M$(OBJ) \
s_shiftNormSigF128M$(OBJ) \ s_shiftNormSigF128M$(OBJ) \
s_roundPackMToF128M$(OBJ) \ s_roundPackMToF128M$(OBJ) \
s_normRoundPackMToF128M$(OBJ) \ s_normRoundPackMToF128M$(OBJ) \
s_addF128M$(OBJ) \ s_addF128M$(OBJ) \
s_mulAddF128M$(OBJ) \ s_mulAddF128M$(OBJ) \
softfloat_state$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_extF80M$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_extF80M$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_extF80M$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_f64$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \ f16_roundToInt$(OBJ) \
f16_add$(OBJ) \ f16_add$(OBJ) \
f16_sub$(OBJ) \ f16_sub$(OBJ) \
f16_mul$(OBJ) \ f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \ f16_mulAdd$(OBJ) \
f16_div$(OBJ) \ f16_div$(OBJ) \
f16_rem$(OBJ) \ f16_rem$(OBJ) \
f16_sqrt$(OBJ) \ f16_sqrt$(OBJ) \
f16_eq$(OBJ) \ f16_eq$(OBJ) \
f16_le$(OBJ) \ f16_le$(OBJ) \
f16_lt$(OBJ) \ f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \ f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_f64$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_add$(OBJ) \ f32_add$(OBJ) \
f32_sub$(OBJ) \ f32_sub$(OBJ) \
f32_mul$(OBJ) \ f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \ f32_mulAdd$(OBJ) \
f32_div$(OBJ) \ f32_div$(OBJ) \
f32_rem$(OBJ) \ f32_rem$(OBJ) \
f32_sqrt$(OBJ) \ f32_sqrt$(OBJ) \
f32_eq$(OBJ) \ f32_eq$(OBJ) \
f32_le$(OBJ) \ f32_le$(OBJ) \
f32_lt$(OBJ) \ f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \ f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_f32$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_add$(OBJ) \ f64_add$(OBJ) \
f64_sub$(OBJ) \ f64_sub$(OBJ) \
f64_mul$(OBJ) \ f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \ f64_mulAdd$(OBJ) \
f64_div$(OBJ) \ f64_div$(OBJ) \
f64_rem$(OBJ) \ f64_rem$(OBJ) \
f64_sqrt$(OBJ) \ f64_sqrt$(OBJ) \
f64_eq$(OBJ) \ f64_eq$(OBJ) \
f64_le$(OBJ) \ f64_le$(OBJ) \
f64_lt$(OBJ) \ f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \ f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \ extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \ extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \ extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128M_to_ui32$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \ f128M_add$(OBJ) \
f128M_sub$(OBJ) \ f128M_sub$(OBJ) \
f128M_mul$(OBJ) \ f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \ f128M_div$(OBJ) \
f128M_rem$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \ f128M_le$(OBJ) \
f128M_lt$(OBJ) \ f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \ $(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h $(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL) softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(DELETE) $@
$(MAKELIB) $^ $(MAKELIB) $^
.PHONY: clean .PHONY: clean
clean: clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,52 +1,53 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1 #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__ #ifdef __GNUC_STDC_INLINE__
#define INLINE inline #define INLINE inline
#else #else
#define INLINE extern inline #define INLINE extern inline
#endif #endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define SOFTFLOAT_BUILTIN_CLZ 1 #define SOFTFLOAT_BUILTIN_CLZ 1
#include "opts-GCC.h" #include "opts-GCC.h"

View File

@ -1,325 +1,325 @@
#============================================================================= #=============================================================================
# #
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic # This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser. # Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
SOURCE_DIR ?= ../../source SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= 8086-SSE SPECIALIZE_TYPE ?= 8086-SSE
SOFTFLOAT_OPTS ?= \ SOFTFLOAT_OPTS ?= \
-DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
-DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_DIV64TO32
DELETE = rm -f DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \ COMPILE_C = \
gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
$(C_INCLUDES) -O2 -o $@ $(C_INCLUDES) -O2 -o $@
MAKELIB = ar crs $@ MAKELIB = ar crs $@
OBJ = .o OBJ = .o
LIB = .a LIB = .a
OTHER_HEADERS = OTHER_HEADERS =
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_compare96M$(OBJ) \ s_compare96M$(OBJ) \
s_compare128M$(OBJ) \ s_compare128M$(OBJ) \
s_shortShiftLeft64To96M$(OBJ) \ s_shortShiftLeft64To96M$(OBJ) \
s_shortShiftLeftM$(OBJ) \ s_shortShiftLeftM$(OBJ) \
s_shiftLeftM$(OBJ) \ s_shiftLeftM$(OBJ) \
s_shortShiftRightM$(OBJ) \ s_shortShiftRightM$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJamM$(OBJ) \ s_shortShiftRightJamM$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJamM$(OBJ) \ s_shiftRightJamM$(OBJ) \
s_shiftRightM$(OBJ) \ s_shiftRightM$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_addM$(OBJ) \ s_addM$(OBJ) \
s_addCarryM$(OBJ) \ s_addCarryM$(OBJ) \
s_addComplCarryM$(OBJ) \ s_addComplCarryM$(OBJ) \
s_negXM$(OBJ) \ s_negXM$(OBJ) \
s_sub1XM$(OBJ) \ s_sub1XM$(OBJ) \
s_subM$(OBJ) \ s_subM$(OBJ) \
s_mul64To128M$(OBJ) \ s_mul64To128M$(OBJ) \
s_mul128MTo256M$(OBJ) \ s_mul128MTo256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
s_remStepMBy32$(OBJ) \ s_remStepMBy32$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80MToCommonNaN$(OBJ) \ s_extF80MToCommonNaN$(OBJ) \
s_commonNaNToExtF80M$(OBJ) \ s_commonNaNToExtF80M$(OBJ) \
s_propagateNaNExtF80M$(OBJ) \ s_propagateNaNExtF80M$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128MToCommonNaN$(OBJ) \ s_f128MToCommonNaN$(OBJ) \
s_commonNaNToF128M$(OBJ) \ s_commonNaNToF128M$(OBJ) \
s_propagateNaNF128M$(OBJ) \ s_propagateNaNF128M$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundMToUI64$(OBJ) \ s_roundMToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundMToI64$(OBJ) \ s_roundMToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_mulAddF64$(OBJ) \
s_tryPropagateNaNExtF80M$(OBJ) \ s_tryPropagateNaNExtF80M$(OBJ) \
s_invalidExtF80M$(OBJ) \ s_invalidExtF80M$(OBJ) \
s_normExtF80SigM$(OBJ) \ s_normExtF80SigM$(OBJ) \
s_roundPackMToExtF80M$(OBJ) \ s_roundPackMToExtF80M$(OBJ) \
s_normRoundPackMToExtF80M$(OBJ) \ s_normRoundPackMToExtF80M$(OBJ) \
s_addExtF80M$(OBJ) \ s_addExtF80M$(OBJ) \
s_compareNonnormExtF80M$(OBJ) \ s_compareNonnormExtF80M$(OBJ) \
s_isNaNF128M$(OBJ) \ s_isNaNF128M$(OBJ) \
s_tryPropagateNaNF128M$(OBJ) \ s_tryPropagateNaNF128M$(OBJ) \
s_invalidF128M$(OBJ) \ s_invalidF128M$(OBJ) \
s_shiftNormSigF128M$(OBJ) \ s_shiftNormSigF128M$(OBJ) \
s_roundPackMToF128M$(OBJ) \ s_roundPackMToF128M$(OBJ) \
s_normRoundPackMToF128M$(OBJ) \ s_normRoundPackMToF128M$(OBJ) \
s_addF128M$(OBJ) \ s_addF128M$(OBJ) \
s_mulAddF128M$(OBJ) \ s_mulAddF128M$(OBJ) \
softfloat_state$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_extF80M$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_extF80M$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_extF80M$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_f64$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \ f16_roundToInt$(OBJ) \
f16_add$(OBJ) \ f16_add$(OBJ) \
f16_sub$(OBJ) \ f16_sub$(OBJ) \
f16_mul$(OBJ) \ f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \ f16_mulAdd$(OBJ) \
f16_div$(OBJ) \ f16_div$(OBJ) \
f16_rem$(OBJ) \ f16_rem$(OBJ) \
f16_sqrt$(OBJ) \ f16_sqrt$(OBJ) \
f16_eq$(OBJ) \ f16_eq$(OBJ) \
f16_le$(OBJ) \ f16_le$(OBJ) \
f16_lt$(OBJ) \ f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \ f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_f64$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_add$(OBJ) \ f32_add$(OBJ) \
f32_sub$(OBJ) \ f32_sub$(OBJ) \
f32_mul$(OBJ) \ f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \ f32_mulAdd$(OBJ) \
f32_div$(OBJ) \ f32_div$(OBJ) \
f32_rem$(OBJ) \ f32_rem$(OBJ) \
f32_sqrt$(OBJ) \ f32_sqrt$(OBJ) \
f32_eq$(OBJ) \ f32_eq$(OBJ) \
f32_le$(OBJ) \ f32_le$(OBJ) \
f32_lt$(OBJ) \ f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \ f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_f32$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_add$(OBJ) \ f64_add$(OBJ) \
f64_sub$(OBJ) \ f64_sub$(OBJ) \
f64_mul$(OBJ) \ f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \ f64_mulAdd$(OBJ) \
f64_div$(OBJ) \ f64_div$(OBJ) \
f64_rem$(OBJ) \ f64_rem$(OBJ) \
f64_sqrt$(OBJ) \ f64_sqrt$(OBJ) \
f64_eq$(OBJ) \ f64_eq$(OBJ) \
f64_le$(OBJ) \ f64_le$(OBJ) \
f64_lt$(OBJ) \ f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \ f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \ extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \ extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \ extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128M_to_ui32$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \ f128M_add$(OBJ) \
f128M_sub$(OBJ) \ f128M_sub$(OBJ) \
f128M_mul$(OBJ) \ f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \ f128M_div$(OBJ) \
f128M_rem$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \ f128M_le$(OBJ) \
f128M_lt$(OBJ) \ f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \ $(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h $(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL) softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(DELETE) $@
$(MAKELIB) $^ $(MAKELIB) $^
.PHONY: clean .PHONY: clean
clean: clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,52 +1,53 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1 #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__ #ifdef __GNUC_STDC_INLINE__
#define INLINE inline #define INLINE inline
#else #else
#define INLINE extern inline #define INLINE extern inline
#endif #endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define SOFTFLOAT_BUILTIN_CLZ 1 #define SOFTFLOAT_BUILTIN_CLZ 1
#include "opts-GCC.h" #include "opts-GCC.h"

View File

@ -1,390 +1,390 @@
#============================================================================= #=============================================================================
# #
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic # This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
# Package, Release 3e, by John R. Hauser. # Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
SOURCE_DIR ?= ../../source SOURCE_DIR ?= ../../source
SPECIALIZE_TYPE ?= 8086-SSE SPECIALIZE_TYPE ?= 8086-SSE
SOFTFLOAT_OPTS ?= \ SOFTFLOAT_OPTS ?= \
-DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
-DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_DIV64TO32
DELETE = rm -f DELETE = rm -f
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
COMPILE_C = \ COMPILE_C = \
x86_64-w64-mingw32-gcc -c -Werror-implicit-function-declaration \ x86_64-w64-mingw32-gcc -c -Werror-implicit-function-declaration \
-DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
MAKELIB = x86_64-w64-mingw32-ar crs $@ MAKELIB = x86_64-w64-mingw32-ar crs $@
OBJ = .o OBJ = .o
LIB = .a LIB = .a
OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_eq128$(OBJ) \ s_eq128$(OBJ) \
s_le128$(OBJ) \ s_le128$(OBJ) \
s_lt128$(OBJ) \ s_lt128$(OBJ) \
s_shortShiftLeft128$(OBJ) \ s_shortShiftLeft128$(OBJ) \
s_shortShiftRight128$(OBJ) \ s_shortShiftRight128$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJam64Extra$(OBJ) \ s_shortShiftRightJam64Extra$(OBJ) \
s_shortShiftRightJam128$(OBJ) \ s_shortShiftRightJam128$(OBJ) \
s_shortShiftRightJam128Extra$(OBJ) \ s_shortShiftRightJam128Extra$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJam64Extra$(OBJ) \ s_shiftRightJam64Extra$(OBJ) \
s_shiftRightJam128$(OBJ) \ s_shiftRightJam128$(OBJ) \
s_shiftRightJam128Extra$(OBJ) \ s_shiftRightJam128Extra$(OBJ) \
s_shiftRightJam256M$(OBJ) \ s_shiftRightJam256M$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_add128$(OBJ) \ s_add128$(OBJ) \
s_add256M$(OBJ) \ s_add256M$(OBJ) \
s_sub128$(OBJ) \ s_sub128$(OBJ) \
s_sub256M$(OBJ) \ s_sub256M$(OBJ) \
s_mul64ByShifted32To128$(OBJ) \ s_mul64ByShifted32To128$(OBJ) \
s_mul64To128$(OBJ) \ s_mul64To128$(OBJ) \
s_mul128By32$(OBJ) \ s_mul128By32$(OBJ) \
s_mul128To256M$(OBJ) \ s_mul128To256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80UIToCommonNaN$(OBJ) \ s_extF80UIToCommonNaN$(OBJ) \
s_commonNaNToExtF80UI$(OBJ) \ s_commonNaNToExtF80UI$(OBJ) \
s_propagateNaNExtF80UI$(OBJ) \ s_propagateNaNExtF80UI$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128UIToCommonNaN$(OBJ) \ s_f128UIToCommonNaN$(OBJ) \
s_commonNaNToF128UI$(OBJ) \ s_commonNaNToF128UI$(OBJ) \
s_propagateNaNF128UI$(OBJ) \ s_propagateNaNF128UI$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundToUI64$(OBJ) \ s_roundToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundToI64$(OBJ) \ s_roundToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_mulAddF64$(OBJ) \
s_normSubnormalExtF80Sig$(OBJ) \ s_normSubnormalExtF80Sig$(OBJ) \
s_roundPackToExtF80$(OBJ) \ s_roundPackToExtF80$(OBJ) \
s_normRoundPackToExtF80$(OBJ) \ s_normRoundPackToExtF80$(OBJ) \
s_addMagsExtF80$(OBJ) \ s_addMagsExtF80$(OBJ) \
s_subMagsExtF80$(OBJ) \ s_subMagsExtF80$(OBJ) \
s_normSubnormalF128Sig$(OBJ) \ s_normSubnormalF128Sig$(OBJ) \
s_roundPackToF128$(OBJ) \ s_roundPackToF128$(OBJ) \
s_normRoundPackToF128$(OBJ) \ s_normRoundPackToF128$(OBJ) \
s_addMagsF128$(OBJ) \ s_addMagsF128$(OBJ) \
s_subMagsF128$(OBJ) \ s_subMagsF128$(OBJ) \
s_mulAddF128$(OBJ) \ s_mulAddF128$(OBJ) \
softfloat_state$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_extF80$(OBJ) \ ui32_to_extF80$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui32_to_f128$(OBJ) \ ui32_to_f128$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_extF80$(OBJ) \ ui64_to_extF80$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_extF80M$(OBJ) \
ui64_to_f128$(OBJ) \ ui64_to_f128$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_extF80$(OBJ) \ i32_to_extF80$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_extF80M$(OBJ) \
i32_to_f128$(OBJ) \ i32_to_f128$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_extF80$(OBJ) \ i64_to_extF80$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_extF80M$(OBJ) \
i64_to_f128$(OBJ) \ i64_to_f128$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_f64$(OBJ) \
f16_to_extF80$(OBJ) \ f16_to_extF80$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_to_f128$(OBJ) \ f16_to_f128$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \ f16_roundToInt$(OBJ) \
f16_add$(OBJ) \ f16_add$(OBJ) \
f16_sub$(OBJ) \ f16_sub$(OBJ) \
f16_mul$(OBJ) \ f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \ f16_mulAdd$(OBJ) \
f16_div$(OBJ) \ f16_div$(OBJ) \
f16_rem$(OBJ) \ f16_rem$(OBJ) \
f16_sqrt$(OBJ) \ f16_sqrt$(OBJ) \
f16_eq$(OBJ) \ f16_eq$(OBJ) \
f16_le$(OBJ) \ f16_le$(OBJ) \
f16_lt$(OBJ) \ f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \ f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_f64$(OBJ) \
f32_to_extF80$(OBJ) \ f32_to_extF80$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_to_f128$(OBJ) \ f32_to_f128$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_add$(OBJ) \ f32_add$(OBJ) \
f32_sub$(OBJ) \ f32_sub$(OBJ) \
f32_mul$(OBJ) \ f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \ f32_mulAdd$(OBJ) \
f32_div$(OBJ) \ f32_div$(OBJ) \
f32_rem$(OBJ) \ f32_rem$(OBJ) \
f32_sqrt$(OBJ) \ f32_sqrt$(OBJ) \
f32_eq$(OBJ) \ f32_eq$(OBJ) \
f32_le$(OBJ) \ f32_le$(OBJ) \
f32_lt$(OBJ) \ f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \ f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_f32$(OBJ) \
f64_to_extF80$(OBJ) \ f64_to_extF80$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_to_f128$(OBJ) \ f64_to_f128$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_add$(OBJ) \ f64_add$(OBJ) \
f64_sub$(OBJ) \ f64_sub$(OBJ) \
f64_mul$(OBJ) \ f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \ f64_mulAdd$(OBJ) \
f64_div$(OBJ) \ f64_div$(OBJ) \
f64_rem$(OBJ) \ f64_rem$(OBJ) \
f64_sqrt$(OBJ) \ f64_sqrt$(OBJ) \
f64_eq$(OBJ) \ f64_eq$(OBJ) \
f64_le$(OBJ) \ f64_le$(OBJ) \
f64_lt$(OBJ) \ f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \ f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80_to_ui32$(OBJ) \ extF80_to_ui32$(OBJ) \
extF80_to_ui64$(OBJ) \ extF80_to_ui64$(OBJ) \
extF80_to_i32$(OBJ) \ extF80_to_i32$(OBJ) \
extF80_to_i64$(OBJ) \ extF80_to_i64$(OBJ) \
extF80_to_ui32_r_minMag$(OBJ) \ extF80_to_ui32_r_minMag$(OBJ) \
extF80_to_ui64_r_minMag$(OBJ) \ extF80_to_ui64_r_minMag$(OBJ) \
extF80_to_i32_r_minMag$(OBJ) \ extF80_to_i32_r_minMag$(OBJ) \
extF80_to_i64_r_minMag$(OBJ) \ extF80_to_i64_r_minMag$(OBJ) \
extF80_to_f16$(OBJ) \ extF80_to_f16$(OBJ) \
extF80_to_f32$(OBJ) \ extF80_to_f32$(OBJ) \
extF80_to_f64$(OBJ) \ extF80_to_f64$(OBJ) \
extF80_to_f128$(OBJ) \ extF80_to_f128$(OBJ) \
extF80_roundToInt$(OBJ) \ extF80_roundToInt$(OBJ) \
extF80_add$(OBJ) \ extF80_add$(OBJ) \
extF80_sub$(OBJ) \ extF80_sub$(OBJ) \
extF80_mul$(OBJ) \ extF80_mul$(OBJ) \
extF80_div$(OBJ) \ extF80_div$(OBJ) \
extF80_rem$(OBJ) \ extF80_rem$(OBJ) \
extF80_sqrt$(OBJ) \ extF80_sqrt$(OBJ) \
extF80_eq$(OBJ) \ extF80_eq$(OBJ) \
extF80_le$(OBJ) \ extF80_le$(OBJ) \
extF80_lt$(OBJ) \ extF80_lt$(OBJ) \
extF80_eq_signaling$(OBJ) \ extF80_eq_signaling$(OBJ) \
extF80_le_quiet$(OBJ) \ extF80_le_quiet$(OBJ) \
extF80_lt_quiet$(OBJ) \ extF80_lt_quiet$(OBJ) \
extF80_isSignalingNaN$(OBJ) \ extF80_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \ extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \ extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \ extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128_to_ui32$(OBJ) \ f128_to_ui32$(OBJ) \
f128_to_ui64$(OBJ) \ f128_to_ui64$(OBJ) \
f128_to_i32$(OBJ) \ f128_to_i32$(OBJ) \
f128_to_i64$(OBJ) \ f128_to_i64$(OBJ) \
f128_to_ui32_r_minMag$(OBJ) \ f128_to_ui32_r_minMag$(OBJ) \
f128_to_ui64_r_minMag$(OBJ) \ f128_to_ui64_r_minMag$(OBJ) \
f128_to_i32_r_minMag$(OBJ) \ f128_to_i32_r_minMag$(OBJ) \
f128_to_i64_r_minMag$(OBJ) \ f128_to_i64_r_minMag$(OBJ) \
f128_to_f16$(OBJ) \ f128_to_f16$(OBJ) \
f128_to_f32$(OBJ) \ f128_to_f32$(OBJ) \
f128_to_extF80$(OBJ) \ f128_to_extF80$(OBJ) \
f128_to_f64$(OBJ) \ f128_to_f64$(OBJ) \
f128_roundToInt$(OBJ) \ f128_roundToInt$(OBJ) \
f128_add$(OBJ) \ f128_add$(OBJ) \
f128_sub$(OBJ) \ f128_sub$(OBJ) \
f128_mul$(OBJ) \ f128_mul$(OBJ) \
f128_mulAdd$(OBJ) \ f128_mulAdd$(OBJ) \
f128_div$(OBJ) \ f128_div$(OBJ) \
f128_rem$(OBJ) \ f128_rem$(OBJ) \
f128_sqrt$(OBJ) \ f128_sqrt$(OBJ) \
f128_eq$(OBJ) \ f128_eq$(OBJ) \
f128_le$(OBJ) \ f128_le$(OBJ) \
f128_lt$(OBJ) \ f128_lt$(OBJ) \
f128_eq_signaling$(OBJ) \ f128_eq_signaling$(OBJ) \
f128_le_quiet$(OBJ) \ f128_le_quiet$(OBJ) \
f128_lt_quiet$(OBJ) \ f128_lt_quiet$(OBJ) \
f128_isSignalingNaN$(OBJ) \ f128_isSignalingNaN$(OBJ) \
f128M_to_ui32$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \ f128M_add$(OBJ) \
f128M_sub$(OBJ) \ f128M_sub$(OBJ) \
f128M_mul$(OBJ) \ f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \ f128M_div$(OBJ) \
f128M_rem$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \ f128M_le$(OBJ) \
f128M_lt$(OBJ) \ f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \ $(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h $(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL) softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(DELETE) $@
$(MAKELIB) $^ $(MAKELIB) $^
.PHONY: clean .PHONY: clean
clean: clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,53 +1,54 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define LITTLEENDIAN 1 #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef __GNUC_STDC_INLINE__ #ifdef __GNUC_STDC_INLINE__
#define INLINE inline #define INLINE inline
#else #else
#define INLINE extern inline #define INLINE extern inline
#endif #endif
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define SOFTFLOAT_BUILTIN_CLZ 1 #define SOFTFLOAT_BUILTIN_CLZ 1
#define SOFTFLOAT_INTRINSIC_INT128 1 #define SOFTFLOAT_INTRINSIC_INT128 1
#include "opts-GCC.h" #include "opts-GCC.h"

View File

@ -1,391 +1,396 @@
#============================================================================= #=============================================================================
# #
# This Makefile template is part of the SoftFloat IEEE Floating-Point # This Makefile template is part of the SoftFloat IEEE Floating-Point
# Arithmetic Package, Release 3e, by John R. Hauser. # Arithmetic Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
# Edit lines marked with `==>'. See "SoftFloat-source.html". # Edit lines marked with `==>'. See "SoftFloat-source.html".
==> SOURCE_DIR ?= ../../source ==> SOURCE_DIR ?= ../../source
==> SPECIALIZE_TYPE ?= 8086 ==> SPECIALIZE_TYPE ?= 8086
==> SOFTFLOAT_OPTS ?= \ ==> SOFTFLOAT_OPTS ?= \
==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ ==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
==> -DSOFTFLOAT_FAST_DIV64TO32 ==> -DSOFTFLOAT_FAST_DIV64TO32
==> DELETE = rm -f ==> DELETE = rm -f
==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include ==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
==> COMPILE_C = \ ==> COMPILE_C = \
==> cc -c -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ ==> cc -c -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
==> MAKELIB = ar crs $@ ==> MAKELIB = ar crs $@
==> OBJ = .o ==> OBJ = .o
==> LIB = .a ==> LIB = .a
==> OTHER_HEADERS = ==> OTHER_HEADERS =
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_eq128$(OBJ) \ s_eq128$(OBJ) \
s_le128$(OBJ) \ s_le128$(OBJ) \
s_lt128$(OBJ) \ s_lt128$(OBJ) \
s_shortShiftLeft128$(OBJ) \ s_shortShiftLeft128$(OBJ) \
s_shortShiftRight128$(OBJ) \ s_shortShiftRight128$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJam64Extra$(OBJ) \ s_shortShiftRightJam64Extra$(OBJ) \
s_shortShiftRightJam128$(OBJ) \ s_shortShiftRightJam128$(OBJ) \
s_shortShiftRightJam128Extra$(OBJ) \ s_shortShiftRightJam128Extra$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJam64Extra$(OBJ) \ s_shiftRightJam64Extra$(OBJ) \
s_shiftRightJam128$(OBJ) \ s_shiftRightJam128$(OBJ) \
s_shiftRightJam128Extra$(OBJ) \ s_shiftRightJam128Extra$(OBJ) \
s_shiftRightJam256M$(OBJ) \ s_shiftRightJam256M$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_add128$(OBJ) \ s_add128$(OBJ) \
s_add256M$(OBJ) \ s_add256M$(OBJ) \
s_sub128$(OBJ) \ s_sub128$(OBJ) \
s_sub256M$(OBJ) \ s_sub256M$(OBJ) \
s_mul64ByShifted32To128$(OBJ) \ s_mul64ByShifted32To128$(OBJ) \
s_mul64To128$(OBJ) \ s_mul64To128$(OBJ) \
s_mul128By32$(OBJ) \ s_mul128By32$(OBJ) \
s_mul128To256M$(OBJ) \ s_mul128To256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80UIToCommonNaN$(OBJ) \ s_extF80UIToCommonNaN$(OBJ) \
s_commonNaNToExtF80UI$(OBJ) \ s_commonNaNToExtF80UI$(OBJ) \
s_propagateNaNExtF80UI$(OBJ) \ s_propagateNaNExtF80UI$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128UIToCommonNaN$(OBJ) \ s_f128UIToCommonNaN$(OBJ) \
s_commonNaNToF128UI$(OBJ) \ s_commonNaNToF128UI$(OBJ) \
s_propagateNaNF128UI$(OBJ) \ s_propagateNaNF128UI$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundToUI64$(OBJ) \ s_roundToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundToI64$(OBJ) \ s_roundToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalBF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToBF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_addMagsF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_subMagsF16$(OBJ) \
s_roundPackToF32$(OBJ) \ s_mulAddF16$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_addMagsF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_subMagsF32$(OBJ) \
s_roundPackToF64$(OBJ) \ s_mulAddF32$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_addMagsF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_normSubnormalExtF80Sig$(OBJ) \ s_subMagsF64$(OBJ) \
s_roundPackToExtF80$(OBJ) \ s_mulAddF64$(OBJ) \
s_normRoundPackToExtF80$(OBJ) \ s_normSubnormalExtF80Sig$(OBJ) \
s_addMagsExtF80$(OBJ) \ s_roundPackToExtF80$(OBJ) \
s_subMagsExtF80$(OBJ) \ s_normRoundPackToExtF80$(OBJ) \
s_normSubnormalF128Sig$(OBJ) \ s_addMagsExtF80$(OBJ) \
s_roundPackToF128$(OBJ) \ s_subMagsExtF80$(OBJ) \
s_normRoundPackToF128$(OBJ) \ s_normSubnormalF128Sig$(OBJ) \
s_addMagsF128$(OBJ) \ s_roundPackToF128$(OBJ) \
s_subMagsF128$(OBJ) \ s_normRoundPackToF128$(OBJ) \
s_mulAddF128$(OBJ) \ s_addMagsF128$(OBJ) \
softfloat_state$(OBJ) \ s_subMagsF128$(OBJ) \
ui32_to_f16$(OBJ) \ s_mulAddF128$(OBJ) \
ui32_to_f32$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_extF80$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_f128$(OBJ) \ ui32_to_extF80$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui64_to_f16$(OBJ) \ ui32_to_f128$(OBJ) \
ui64_to_f32$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_extF80$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_f128$(OBJ) \ ui64_to_extF80$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_extF80M$(OBJ) \
i32_to_f16$(OBJ) \ ui64_to_f128$(OBJ) \
i32_to_f32$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_extF80$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_f128$(OBJ) \ i32_to_extF80$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_extF80M$(OBJ) \
i64_to_f16$(OBJ) \ i32_to_f128$(OBJ) \
i64_to_f32$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_extF80$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_f128$(OBJ) \ i64_to_extF80$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_extF80M$(OBJ) \
f16_to_ui32$(OBJ) \ i64_to_f128$(OBJ) \
f16_to_ui64$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_i32$(OBJ) \ bf16_isSignalingNaN$(OBJ) \
f16_to_i64$(OBJ) \ bf16_to_f32$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_extF80$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f128$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f64$(OBJ) \
f16_roundToInt$(OBJ) \ f16_to_extF80$(OBJ) \
f16_add$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_sub$(OBJ) \ f16_to_f128$(OBJ) \
f16_mul$(OBJ) \ f16_to_f128M$(OBJ) \
f16_mulAdd$(OBJ) \ f16_roundToInt$(OBJ) \
f16_div$(OBJ) \ f16_add$(OBJ) \
f16_rem$(OBJ) \ f16_sub$(OBJ) \
f16_sqrt$(OBJ) \ f16_mul$(OBJ) \
f16_eq$(OBJ) \ f16_mulAdd$(OBJ) \
f16_le$(OBJ) \ f16_div$(OBJ) \
f16_lt$(OBJ) \ f16_rem$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_sqrt$(OBJ) \
f16_le_quiet$(OBJ) \ f16_eq$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_le$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_lt$(OBJ) \
f32_to_ui32$(OBJ) \ f16_eq_signaling$(OBJ) \
f32_to_ui64$(OBJ) \ f16_le_quiet$(OBJ) \
f32_to_i32$(OBJ) \ f16_lt_quiet$(OBJ) \
f32_to_i64$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_extF80$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f128$(OBJ) \ f32_to_bf16$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f16$(OBJ) \
f32_roundToInt$(OBJ) \ f32_to_f64$(OBJ) \
f32_add$(OBJ) \ f32_to_extF80$(OBJ) \
f32_sub$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_mul$(OBJ) \ f32_to_f128$(OBJ) \
f32_mulAdd$(OBJ) \ f32_to_f128M$(OBJ) \
f32_div$(OBJ) \ f32_roundToInt$(OBJ) \
f32_rem$(OBJ) \ f32_add$(OBJ) \
f32_sqrt$(OBJ) \ f32_sub$(OBJ) \
f32_eq$(OBJ) \ f32_mul$(OBJ) \
f32_le$(OBJ) \ f32_mulAdd$(OBJ) \
f32_lt$(OBJ) \ f32_div$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_rem$(OBJ) \
f32_le_quiet$(OBJ) \ f32_sqrt$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_eq$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_le$(OBJ) \
f64_to_ui32$(OBJ) \ f32_lt$(OBJ) \
f64_to_ui64$(OBJ) \ f32_eq_signaling$(OBJ) \
f64_to_i32$(OBJ) \ f32_le_quiet$(OBJ) \
f64_to_i64$(OBJ) \ f32_lt_quiet$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_extF80$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_f128$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f16$(OBJ) \
f64_roundToInt$(OBJ) \ f64_to_f32$(OBJ) \
f64_add$(OBJ) \ f64_to_extF80$(OBJ) \
f64_sub$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_mul$(OBJ) \ f64_to_f128$(OBJ) \
f64_mulAdd$(OBJ) \ f64_to_f128M$(OBJ) \
f64_div$(OBJ) \ f64_roundToInt$(OBJ) \
f64_rem$(OBJ) \ f64_add$(OBJ) \
f64_sqrt$(OBJ) \ f64_sub$(OBJ) \
f64_eq$(OBJ) \ f64_mul$(OBJ) \
f64_le$(OBJ) \ f64_mulAdd$(OBJ) \
f64_lt$(OBJ) \ f64_div$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_rem$(OBJ) \
f64_le_quiet$(OBJ) \ f64_sqrt$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_eq$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_le$(OBJ) \
extF80_to_ui32$(OBJ) \ f64_lt$(OBJ) \
extF80_to_ui64$(OBJ) \ f64_eq_signaling$(OBJ) \
extF80_to_i32$(OBJ) \ f64_le_quiet$(OBJ) \
extF80_to_i64$(OBJ) \ f64_lt_quiet$(OBJ) \
extF80_to_ui32_r_minMag$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80_to_ui64_r_minMag$(OBJ) \ extF80_to_ui32$(OBJ) \
extF80_to_i32_r_minMag$(OBJ) \ extF80_to_ui64$(OBJ) \
extF80_to_i64_r_minMag$(OBJ) \ extF80_to_i32$(OBJ) \
extF80_to_f16$(OBJ) \ extF80_to_i64$(OBJ) \
extF80_to_f32$(OBJ) \ extF80_to_ui32_r_minMag$(OBJ) \
extF80_to_f64$(OBJ) \ extF80_to_ui64_r_minMag$(OBJ) \
extF80_to_f128$(OBJ) \ extF80_to_i32_r_minMag$(OBJ) \
extF80_roundToInt$(OBJ) \ extF80_to_i64_r_minMag$(OBJ) \
extF80_add$(OBJ) \ extF80_to_f16$(OBJ) \
extF80_sub$(OBJ) \ extF80_to_f32$(OBJ) \
extF80_mul$(OBJ) \ extF80_to_f64$(OBJ) \
extF80_div$(OBJ) \ extF80_to_f128$(OBJ) \
extF80_rem$(OBJ) \ extF80_roundToInt$(OBJ) \
extF80_sqrt$(OBJ) \ extF80_add$(OBJ) \
extF80_eq$(OBJ) \ extF80_sub$(OBJ) \
extF80_le$(OBJ) \ extF80_mul$(OBJ) \
extF80_lt$(OBJ) \ extF80_div$(OBJ) \
extF80_eq_signaling$(OBJ) \ extF80_rem$(OBJ) \
extF80_le_quiet$(OBJ) \ extF80_sqrt$(OBJ) \
extF80_lt_quiet$(OBJ) \ extF80_eq$(OBJ) \
extF80_isSignalingNaN$(OBJ) \ extF80_le$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80_lt$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80_eq_signaling$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80_le_quiet$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80_lt_quiet$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80_isSignalingNaN$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_add$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_div$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_add$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_le$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_div$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_eq$(OBJ) \
f128_to_ui32$(OBJ) \ extF80M_le$(OBJ) \
f128_to_ui64$(OBJ) \ extF80M_lt$(OBJ) \
f128_to_i32$(OBJ) \ extF80M_eq_signaling$(OBJ) \
f128_to_i64$(OBJ) \ extF80M_le_quiet$(OBJ) \
f128_to_ui32_r_minMag$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128_to_ui64_r_minMag$(OBJ) \ f128_to_ui32$(OBJ) \
f128_to_i32_r_minMag$(OBJ) \ f128_to_ui64$(OBJ) \
f128_to_i64_r_minMag$(OBJ) \ f128_to_i32$(OBJ) \
f128_to_f16$(OBJ) \ f128_to_i64$(OBJ) \
f128_to_f32$(OBJ) \ f128_to_ui32_r_minMag$(OBJ) \
f128_to_extF80$(OBJ) \ f128_to_ui64_r_minMag$(OBJ) \
f128_to_f64$(OBJ) \ f128_to_i32_r_minMag$(OBJ) \
f128_roundToInt$(OBJ) \ f128_to_i64_r_minMag$(OBJ) \
f128_add$(OBJ) \ f128_to_f16$(OBJ) \
f128_sub$(OBJ) \ f128_to_f32$(OBJ) \
f128_mul$(OBJ) \ f128_to_extF80$(OBJ) \
f128_mulAdd$(OBJ) \ f128_to_f64$(OBJ) \
f128_div$(OBJ) \ f128_roundToInt$(OBJ) \
f128_rem$(OBJ) \ f128_add$(OBJ) \
f128_sqrt$(OBJ) \ f128_sub$(OBJ) \
f128_eq$(OBJ) \ f128_mul$(OBJ) \
f128_le$(OBJ) \ f128_mulAdd$(OBJ) \
f128_lt$(OBJ) \ f128_div$(OBJ) \
f128_eq_signaling$(OBJ) \ f128_rem$(OBJ) \
f128_le_quiet$(OBJ) \ f128_sqrt$(OBJ) \
f128_lt_quiet$(OBJ) \ f128_eq$(OBJ) \
f128_isSignalingNaN$(OBJ) \ f128_le$(OBJ) \
f128M_to_ui32$(OBJ) \ f128_lt$(OBJ) \
f128M_to_ui64$(OBJ) \ f128_eq_signaling$(OBJ) \
f128M_to_i32$(OBJ) \ f128_le_quiet$(OBJ) \
f128M_to_i64$(OBJ) \ f128_lt_quiet$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128_isSignalingNaN$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_add$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_sub$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_mul$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_div$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_rem$(OBJ) \ f128M_add$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sub$(OBJ) \
f128M_eq$(OBJ) \ f128M_mul$(OBJ) \
f128M_le$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_lt$(OBJ) \ f128M_div$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_rem$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \
$(OBJS_ALL): \ f128M_le_quiet$(OBJ) \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ f128M_lt_quiet$(OBJ) \
$(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(OBJS_ALL): \
$(SOURCE_DIR)/include/softfloat.h $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(SOURCE_DIR)/include/softfloat.h
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
softfloat$(LIB): $(OBJS_ALL) $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(DELETE) $@
$(MAKELIB) $^ $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
.PHONY: clean
clean: softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $@
$(MAKELIB) $^
.PHONY: clean
clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,49 +1,50 @@
/*============================================================================ /*============================================================================
This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
// Edit lines marked with `==>'. See "SoftFloat-source.html". // Edit lines marked with `==>'. See "SoftFloat-source.html".
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
== > #define LITTLEENDIAN 1 ==> #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
== > #define INLINE inline ==> #define INLINE inline
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
== > #define THREAD_LOCAL _Thread_local ==> #define THREAD_LOCAL _Thread_local

View File

@ -1,325 +1,325 @@
#============================================================================= #=============================================================================
# #
# This Makefile template is part of the SoftFloat IEEE Floating-Point # This Makefile template is part of the SoftFloat IEEE Floating-Point
# Arithmetic Package, Release 3e, by John R. Hauser. # Arithmetic Package, Release 3e, by John R. Hauser.
# #
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the # Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
# University of California. All rights reserved. # University of California. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #
# 1. Redistributions of source code must retain the above copyright notice, # 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions, and the following disclaimer. # this list of conditions, and the following disclaimer.
# #
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the # notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution. # documentation and/or other materials provided with the distribution.
# #
# 3. Neither the name of the University nor the names of its contributors # 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software # may be used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY # DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
#============================================================================= #=============================================================================
# Edit lines marked with `==>'. See "SoftFloat-source.html". # Edit lines marked with `==>'. See "SoftFloat-source.html".
==> SOURCE_DIR ?= ../../source ==> SOURCE_DIR ?= ../../source
==> SPECIALIZE_TYPE ?= 8086 ==> SPECIALIZE_TYPE ?= 8086
==> SOFTFLOAT_OPTS ?= \ ==> SOFTFLOAT_OPTS ?= \
==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ ==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
==> -DSOFTFLOAT_FAST_DIV64TO32 ==> -DSOFTFLOAT_FAST_DIV64TO32
==> DELETE = rm -f ==> DELETE = rm -f
==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include ==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
==> COMPILE_C = cc -c $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ ==> COMPILE_C = cc -c $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
==> MAKELIB = ar crs $@ ==> MAKELIB = ar crs $@
==> OBJ = .o ==> OBJ = .o
==> LIB = .a ==> LIB = .a
==> OTHER_HEADERS = ==> OTHER_HEADERS =
.PHONY: all .PHONY: all
all: softfloat$(LIB) all: softfloat$(LIB)
OBJS_PRIMITIVES = \ OBJS_PRIMITIVES = \
s_compare96M$(OBJ) \ s_compare96M$(OBJ) \
s_compare128M$(OBJ) \ s_compare128M$(OBJ) \
s_shortShiftLeft64To96M$(OBJ) \ s_shortShiftLeft64To96M$(OBJ) \
s_shortShiftLeftM$(OBJ) \ s_shortShiftLeftM$(OBJ) \
s_shiftLeftM$(OBJ) \ s_shiftLeftM$(OBJ) \
s_shortShiftRightM$(OBJ) \ s_shortShiftRightM$(OBJ) \
s_shortShiftRightJam64$(OBJ) \ s_shortShiftRightJam64$(OBJ) \
s_shortShiftRightJamM$(OBJ) \ s_shortShiftRightJamM$(OBJ) \
s_shiftRightJam32$(OBJ) \ s_shiftRightJam32$(OBJ) \
s_shiftRightJam64$(OBJ) \ s_shiftRightJam64$(OBJ) \
s_shiftRightJamM$(OBJ) \ s_shiftRightJamM$(OBJ) \
s_shiftRightM$(OBJ) \ s_shiftRightM$(OBJ) \
s_countLeadingZeros8$(OBJ) \ s_countLeadingZeros8$(OBJ) \
s_countLeadingZeros16$(OBJ) \ s_countLeadingZeros16$(OBJ) \
s_countLeadingZeros32$(OBJ) \ s_countLeadingZeros32$(OBJ) \
s_countLeadingZeros64$(OBJ) \ s_countLeadingZeros64$(OBJ) \
s_addM$(OBJ) \ s_addM$(OBJ) \
s_addCarryM$(OBJ) \ s_addCarryM$(OBJ) \
s_addComplCarryM$(OBJ) \ s_addComplCarryM$(OBJ) \
s_negXM$(OBJ) \ s_negXM$(OBJ) \
s_sub1XM$(OBJ) \ s_sub1XM$(OBJ) \
s_subM$(OBJ) \ s_subM$(OBJ) \
s_mul64To128M$(OBJ) \ s_mul64To128M$(OBJ) \
s_mul128MTo256M$(OBJ) \ s_mul128MTo256M$(OBJ) \
s_approxRecip_1Ks$(OBJ) \ s_approxRecip_1Ks$(OBJ) \
s_approxRecip32_1$(OBJ) \ s_approxRecip32_1$(OBJ) \
s_approxRecipSqrt_1Ks$(OBJ) \ s_approxRecipSqrt_1Ks$(OBJ) \
s_approxRecipSqrt32_1$(OBJ) \ s_approxRecipSqrt32_1$(OBJ) \
s_remStepMBy32$(OBJ) \ s_remStepMBy32$(OBJ) \
OBJS_SPECIALIZE = \ OBJS_SPECIALIZE = \
softfloat_raiseFlags$(OBJ) \ softfloat_raiseFlags$(OBJ) \
s_f16UIToCommonNaN$(OBJ) \ s_f16UIToCommonNaN$(OBJ) \
s_commonNaNToF16UI$(OBJ) \ s_commonNaNToF16UI$(OBJ) \
s_propagateNaNF16UI$(OBJ) \ s_propagateNaNF16UI$(OBJ) \
s_f32UIToCommonNaN$(OBJ) \ s_f32UIToCommonNaN$(OBJ) \
s_commonNaNToF32UI$(OBJ) \ s_commonNaNToF32UI$(OBJ) \
s_propagateNaNF32UI$(OBJ) \ s_propagateNaNF32UI$(OBJ) \
s_f64UIToCommonNaN$(OBJ) \ s_f64UIToCommonNaN$(OBJ) \
s_commonNaNToF64UI$(OBJ) \ s_commonNaNToF64UI$(OBJ) \
s_propagateNaNF64UI$(OBJ) \ s_propagateNaNF64UI$(OBJ) \
extF80M_isSignalingNaN$(OBJ) \ extF80M_isSignalingNaN$(OBJ) \
s_extF80MToCommonNaN$(OBJ) \ s_extF80MToCommonNaN$(OBJ) \
s_commonNaNToExtF80M$(OBJ) \ s_commonNaNToExtF80M$(OBJ) \
s_propagateNaNExtF80M$(OBJ) \ s_propagateNaNExtF80M$(OBJ) \
f128M_isSignalingNaN$(OBJ) \ f128M_isSignalingNaN$(OBJ) \
s_f128MToCommonNaN$(OBJ) \ s_f128MToCommonNaN$(OBJ) \
s_commonNaNToF128M$(OBJ) \ s_commonNaNToF128M$(OBJ) \
s_propagateNaNF128M$(OBJ) \ s_propagateNaNF128M$(OBJ) \
OBJS_OTHERS = \ OBJS_OTHERS = \
s_roundToUI32$(OBJ) \ s_roundToUI32$(OBJ) \
s_roundMToUI64$(OBJ) \ s_roundMToUI64$(OBJ) \
s_roundToI32$(OBJ) \ s_roundToI32$(OBJ) \
s_roundMToI64$(OBJ) \ s_roundMToI64$(OBJ) \
s_normSubnormalF16Sig$(OBJ) \ s_normSubnormalF16Sig$(OBJ) \
s_roundPackToF16$(OBJ) \ s_roundPackToF16$(OBJ) \
s_normRoundPackToF16$(OBJ) \ s_normRoundPackToF16$(OBJ) \
s_addMagsF16$(OBJ) \ s_addMagsF16$(OBJ) \
s_subMagsF16$(OBJ) \ s_subMagsF16$(OBJ) \
s_mulAddF16$(OBJ) \ s_mulAddF16$(OBJ) \
s_normSubnormalF32Sig$(OBJ) \ s_normSubnormalF32Sig$(OBJ) \
s_roundPackToF32$(OBJ) \ s_roundPackToF32$(OBJ) \
s_normRoundPackToF32$(OBJ) \ s_normRoundPackToF32$(OBJ) \
s_addMagsF32$(OBJ) \ s_addMagsF32$(OBJ) \
s_subMagsF32$(OBJ) \ s_subMagsF32$(OBJ) \
s_mulAddF32$(OBJ) \ s_mulAddF32$(OBJ) \
s_normSubnormalF64Sig$(OBJ) \ s_normSubnormalF64Sig$(OBJ) \
s_roundPackToF64$(OBJ) \ s_roundPackToF64$(OBJ) \
s_normRoundPackToF64$(OBJ) \ s_normRoundPackToF64$(OBJ) \
s_addMagsF64$(OBJ) \ s_addMagsF64$(OBJ) \
s_subMagsF64$(OBJ) \ s_subMagsF64$(OBJ) \
s_mulAddF64$(OBJ) \ s_mulAddF64$(OBJ) \
s_tryPropagateNaNExtF80M$(OBJ) \ s_tryPropagateNaNExtF80M$(OBJ) \
s_invalidExtF80M$(OBJ) \ s_invalidExtF80M$(OBJ) \
s_normExtF80SigM$(OBJ) \ s_normExtF80SigM$(OBJ) \
s_roundPackMToExtF80M$(OBJ) \ s_roundPackMToExtF80M$(OBJ) \
s_normRoundPackMToExtF80M$(OBJ) \ s_normRoundPackMToExtF80M$(OBJ) \
s_addExtF80M$(OBJ) \ s_addExtF80M$(OBJ) \
s_compareNonnormExtF80M$(OBJ) \ s_compareNonnormExtF80M$(OBJ) \
s_isNaNF128M$(OBJ) \ s_isNaNF128M$(OBJ) \
s_tryPropagateNaNF128M$(OBJ) \ s_tryPropagateNaNF128M$(OBJ) \
s_invalidF128M$(OBJ) \ s_invalidF128M$(OBJ) \
s_shiftNormSigF128M$(OBJ) \ s_shiftNormSigF128M$(OBJ) \
s_roundPackMToF128M$(OBJ) \ s_roundPackMToF128M$(OBJ) \
s_normRoundPackMToF128M$(OBJ) \ s_normRoundPackMToF128M$(OBJ) \
s_addF128M$(OBJ) \ s_addF128M$(OBJ) \
s_mulAddF128M$(OBJ) \ s_mulAddF128M$(OBJ) \
softfloat_state$(OBJ) \ softfloat_state$(OBJ) \
ui32_to_f16$(OBJ) \ ui32_to_f16$(OBJ) \
ui32_to_f32$(OBJ) \ ui32_to_f32$(OBJ) \
ui32_to_f64$(OBJ) \ ui32_to_f64$(OBJ) \
ui32_to_extF80M$(OBJ) \ ui32_to_extF80M$(OBJ) \
ui32_to_f128M$(OBJ) \ ui32_to_f128M$(OBJ) \
ui64_to_f16$(OBJ) \ ui64_to_f16$(OBJ) \
ui64_to_f32$(OBJ) \ ui64_to_f32$(OBJ) \
ui64_to_f64$(OBJ) \ ui64_to_f64$(OBJ) \
ui64_to_extF80M$(OBJ) \ ui64_to_extF80M$(OBJ) \
ui64_to_f128M$(OBJ) \ ui64_to_f128M$(OBJ) \
i32_to_f16$(OBJ) \ i32_to_f16$(OBJ) \
i32_to_f32$(OBJ) \ i32_to_f32$(OBJ) \
i32_to_f64$(OBJ) \ i32_to_f64$(OBJ) \
i32_to_extF80M$(OBJ) \ i32_to_extF80M$(OBJ) \
i32_to_f128M$(OBJ) \ i32_to_f128M$(OBJ) \
i64_to_f16$(OBJ) \ i64_to_f16$(OBJ) \
i64_to_f32$(OBJ) \ i64_to_f32$(OBJ) \
i64_to_f64$(OBJ) \ i64_to_f64$(OBJ) \
i64_to_extF80M$(OBJ) \ i64_to_extF80M$(OBJ) \
i64_to_f128M$(OBJ) \ i64_to_f128M$(OBJ) \
f16_to_ui32$(OBJ) \ f16_to_ui32$(OBJ) \
f16_to_ui64$(OBJ) \ f16_to_ui64$(OBJ) \
f16_to_i32$(OBJ) \ f16_to_i32$(OBJ) \
f16_to_i64$(OBJ) \ f16_to_i64$(OBJ) \
f16_to_ui32_r_minMag$(OBJ) \ f16_to_ui32_r_minMag$(OBJ) \
f16_to_ui64_r_minMag$(OBJ) \ f16_to_ui64_r_minMag$(OBJ) \
f16_to_i32_r_minMag$(OBJ) \ f16_to_i32_r_minMag$(OBJ) \
f16_to_i64_r_minMag$(OBJ) \ f16_to_i64_r_minMag$(OBJ) \
f16_to_f32$(OBJ) \ f16_to_f32$(OBJ) \
f16_to_f64$(OBJ) \ f16_to_f64$(OBJ) \
f16_to_extF80M$(OBJ) \ f16_to_extF80M$(OBJ) \
f16_to_f128M$(OBJ) \ f16_to_f128M$(OBJ) \
f16_roundToInt$(OBJ) \ f16_roundToInt$(OBJ) \
f16_add$(OBJ) \ f16_add$(OBJ) \
f16_sub$(OBJ) \ f16_sub$(OBJ) \
f16_mul$(OBJ) \ f16_mul$(OBJ) \
f16_mulAdd$(OBJ) \ f16_mulAdd$(OBJ) \
f16_div$(OBJ) \ f16_div$(OBJ) \
f16_rem$(OBJ) \ f16_rem$(OBJ) \
f16_sqrt$(OBJ) \ f16_sqrt$(OBJ) \
f16_eq$(OBJ) \ f16_eq$(OBJ) \
f16_le$(OBJ) \ f16_le$(OBJ) \
f16_lt$(OBJ) \ f16_lt$(OBJ) \
f16_eq_signaling$(OBJ) \ f16_eq_signaling$(OBJ) \
f16_le_quiet$(OBJ) \ f16_le_quiet$(OBJ) \
f16_lt_quiet$(OBJ) \ f16_lt_quiet$(OBJ) \
f16_isSignalingNaN$(OBJ) \ f16_isSignalingNaN$(OBJ) \
f32_to_ui32$(OBJ) \ f32_to_ui32$(OBJ) \
f32_to_ui64$(OBJ) \ f32_to_ui64$(OBJ) \
f32_to_i32$(OBJ) \ f32_to_i32$(OBJ) \
f32_to_i64$(OBJ) \ f32_to_i64$(OBJ) \
f32_to_ui32_r_minMag$(OBJ) \ f32_to_ui32_r_minMag$(OBJ) \
f32_to_ui64_r_minMag$(OBJ) \ f32_to_ui64_r_minMag$(OBJ) \
f32_to_i32_r_minMag$(OBJ) \ f32_to_i32_r_minMag$(OBJ) \
f32_to_i64_r_minMag$(OBJ) \ f32_to_i64_r_minMag$(OBJ) \
f32_to_f16$(OBJ) \ f32_to_f16$(OBJ) \
f32_to_f64$(OBJ) \ f32_to_f64$(OBJ) \
f32_to_extF80M$(OBJ) \ f32_to_extF80M$(OBJ) \
f32_to_f128M$(OBJ) \ f32_to_f128M$(OBJ) \
f32_roundToInt$(OBJ) \ f32_roundToInt$(OBJ) \
f32_add$(OBJ) \ f32_add$(OBJ) \
f32_sub$(OBJ) \ f32_sub$(OBJ) \
f32_mul$(OBJ) \ f32_mul$(OBJ) \
f32_mulAdd$(OBJ) \ f32_mulAdd$(OBJ) \
f32_div$(OBJ) \ f32_div$(OBJ) \
f32_rem$(OBJ) \ f32_rem$(OBJ) \
f32_sqrt$(OBJ) \ f32_sqrt$(OBJ) \
f32_eq$(OBJ) \ f32_eq$(OBJ) \
f32_le$(OBJ) \ f32_le$(OBJ) \
f32_lt$(OBJ) \ f32_lt$(OBJ) \
f32_eq_signaling$(OBJ) \ f32_eq_signaling$(OBJ) \
f32_le_quiet$(OBJ) \ f32_le_quiet$(OBJ) \
f32_lt_quiet$(OBJ) \ f32_lt_quiet$(OBJ) \
f32_isSignalingNaN$(OBJ) \ f32_isSignalingNaN$(OBJ) \
f64_to_ui32$(OBJ) \ f64_to_ui32$(OBJ) \
f64_to_ui64$(OBJ) \ f64_to_ui64$(OBJ) \
f64_to_i32$(OBJ) \ f64_to_i32$(OBJ) \
f64_to_i64$(OBJ) \ f64_to_i64$(OBJ) \
f64_to_ui32_r_minMag$(OBJ) \ f64_to_ui32_r_minMag$(OBJ) \
f64_to_ui64_r_minMag$(OBJ) \ f64_to_ui64_r_minMag$(OBJ) \
f64_to_i32_r_minMag$(OBJ) \ f64_to_i32_r_minMag$(OBJ) \
f64_to_i64_r_minMag$(OBJ) \ f64_to_i64_r_minMag$(OBJ) \
f64_to_f16$(OBJ) \ f64_to_f16$(OBJ) \
f64_to_f32$(OBJ) \ f64_to_f32$(OBJ) \
f64_to_extF80M$(OBJ) \ f64_to_extF80M$(OBJ) \
f64_to_f128M$(OBJ) \ f64_to_f128M$(OBJ) \
f64_roundToInt$(OBJ) \ f64_roundToInt$(OBJ) \
f64_add$(OBJ) \ f64_add$(OBJ) \
f64_sub$(OBJ) \ f64_sub$(OBJ) \
f64_mul$(OBJ) \ f64_mul$(OBJ) \
f64_mulAdd$(OBJ) \ f64_mulAdd$(OBJ) \
f64_div$(OBJ) \ f64_div$(OBJ) \
f64_rem$(OBJ) \ f64_rem$(OBJ) \
f64_sqrt$(OBJ) \ f64_sqrt$(OBJ) \
f64_eq$(OBJ) \ f64_eq$(OBJ) \
f64_le$(OBJ) \ f64_le$(OBJ) \
f64_lt$(OBJ) \ f64_lt$(OBJ) \
f64_eq_signaling$(OBJ) \ f64_eq_signaling$(OBJ) \
f64_le_quiet$(OBJ) \ f64_le_quiet$(OBJ) \
f64_lt_quiet$(OBJ) \ f64_lt_quiet$(OBJ) \
f64_isSignalingNaN$(OBJ) \ f64_isSignalingNaN$(OBJ) \
extF80M_to_ui32$(OBJ) \ extF80M_to_ui32$(OBJ) \
extF80M_to_ui64$(OBJ) \ extF80M_to_ui64$(OBJ) \
extF80M_to_i32$(OBJ) \ extF80M_to_i32$(OBJ) \
extF80M_to_i64$(OBJ) \ extF80M_to_i64$(OBJ) \
extF80M_to_ui32_r_minMag$(OBJ) \ extF80M_to_ui32_r_minMag$(OBJ) \
extF80M_to_ui64_r_minMag$(OBJ) \ extF80M_to_ui64_r_minMag$(OBJ) \
extF80M_to_i32_r_minMag$(OBJ) \ extF80M_to_i32_r_minMag$(OBJ) \
extF80M_to_i64_r_minMag$(OBJ) \ extF80M_to_i64_r_minMag$(OBJ) \
extF80M_to_f16$(OBJ) \ extF80M_to_f16$(OBJ) \
extF80M_to_f32$(OBJ) \ extF80M_to_f32$(OBJ) \
extF80M_to_f64$(OBJ) \ extF80M_to_f64$(OBJ) \
extF80M_to_f128M$(OBJ) \ extF80M_to_f128M$(OBJ) \
extF80M_roundToInt$(OBJ) \ extF80M_roundToInt$(OBJ) \
extF80M_add$(OBJ) \ extF80M_add$(OBJ) \
extF80M_sub$(OBJ) \ extF80M_sub$(OBJ) \
extF80M_mul$(OBJ) \ extF80M_mul$(OBJ) \
extF80M_div$(OBJ) \ extF80M_div$(OBJ) \
extF80M_rem$(OBJ) \ extF80M_rem$(OBJ) \
extF80M_sqrt$(OBJ) \ extF80M_sqrt$(OBJ) \
extF80M_eq$(OBJ) \ extF80M_eq$(OBJ) \
extF80M_le$(OBJ) \ extF80M_le$(OBJ) \
extF80M_lt$(OBJ) \ extF80M_lt$(OBJ) \
extF80M_eq_signaling$(OBJ) \ extF80M_eq_signaling$(OBJ) \
extF80M_le_quiet$(OBJ) \ extF80M_le_quiet$(OBJ) \
extF80M_lt_quiet$(OBJ) \ extF80M_lt_quiet$(OBJ) \
f128M_to_ui32$(OBJ) \ f128M_to_ui32$(OBJ) \
f128M_to_ui64$(OBJ) \ f128M_to_ui64$(OBJ) \
f128M_to_i32$(OBJ) \ f128M_to_i32$(OBJ) \
f128M_to_i64$(OBJ) \ f128M_to_i64$(OBJ) \
f128M_to_ui32_r_minMag$(OBJ) \ f128M_to_ui32_r_minMag$(OBJ) \
f128M_to_ui64_r_minMag$(OBJ) \ f128M_to_ui64_r_minMag$(OBJ) \
f128M_to_i32_r_minMag$(OBJ) \ f128M_to_i32_r_minMag$(OBJ) \
f128M_to_i64_r_minMag$(OBJ) \ f128M_to_i64_r_minMag$(OBJ) \
f128M_to_f16$(OBJ) \ f128M_to_f16$(OBJ) \
f128M_to_f32$(OBJ) \ f128M_to_f32$(OBJ) \
f128M_to_f64$(OBJ) \ f128M_to_f64$(OBJ) \
f128M_to_extF80M$(OBJ) \ f128M_to_extF80M$(OBJ) \
f128M_roundToInt$(OBJ) \ f128M_roundToInt$(OBJ) \
f128M_add$(OBJ) \ f128M_add$(OBJ) \
f128M_sub$(OBJ) \ f128M_sub$(OBJ) \
f128M_mul$(OBJ) \ f128M_mul$(OBJ) \
f128M_mulAdd$(OBJ) \ f128M_mulAdd$(OBJ) \
f128M_div$(OBJ) \ f128M_div$(OBJ) \
f128M_rem$(OBJ) \ f128M_rem$(OBJ) \
f128M_sqrt$(OBJ) \ f128M_sqrt$(OBJ) \
f128M_eq$(OBJ) \ f128M_eq$(OBJ) \
f128M_le$(OBJ) \ f128M_le$(OBJ) \
f128M_lt$(OBJ) \ f128M_lt$(OBJ) \
f128M_eq_signaling$(OBJ) \ f128M_eq_signaling$(OBJ) \
f128M_le_quiet$(OBJ) \ f128M_le_quiet$(OBJ) \
f128M_lt_quiet$(OBJ) \ f128M_lt_quiet$(OBJ) \
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
$(OBJS_ALL): \ $(OBJS_ALL): \
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
$(SOURCE_DIR)/include/primitives.h $(SOURCE_DIR)/include/primitives.h
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ $(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
$(SOURCE_DIR)/include/softfloat.h $(SOURCE_DIR)/include/softfloat.h
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$*.c
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
softfloat$(LIB): $(OBJS_ALL) softfloat$(LIB): $(OBJS_ALL)
$(DELETE) $@ $(DELETE) $@
$(MAKELIB) $^ $(MAKELIB) $^
.PHONY: clean .PHONY: clean
clean: clean:
$(DELETE) $(OBJS_ALL) softfloat$(LIB) $(DELETE) $(OBJS_ALL) softfloat$(LIB)

View File

@ -1,49 +1,50 @@
/*============================================================================ /*============================================================================
This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
// Edit lines marked with `==>'. See "SoftFloat-source.html". // Edit lines marked with `==>'. See "SoftFloat-source.html".
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
== > #define LITTLEENDIAN 1 ==> #define LITTLEENDIAN 1
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
== > #define INLINE inline ==> #define INLINE inline
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
== > #define THREAD_LOCAL _Thread_local ==> #define THREAD_LOCAL _Thread_local

View File

@ -1,258 +1,258 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>Berkeley SoftFloat History</TITLE> <TITLE>Berkeley SoftFloat History</TITLE>
</HEAD> </HEAD>
<BODY> <BODY>
<H1>History of Berkeley SoftFloat, to Release 3e</H1> <H1>History of Berkeley SoftFloat, to Release 3e</H1>
<P> <P>
John R. Hauser<BR> John R. Hauser<BR>
2018 January 20<BR> 2018 January 20<BR>
</P> </P>
<H3>Release 3e (2018 January)</H3> <H3>Release 3e (2018 January)</H3>
<UL> <UL>
<LI> <LI>
Changed the default numeric code for optional rounding mode <CODE>odd</CODE> Changed the default numeric code for optional rounding mode <CODE>odd</CODE>
(round to odd, also known as <EM>jamming</EM>) from 5 to 6. (round to odd, also known as <EM>jamming</EM>) from 5 to 6.
<LI> <LI>
Modified the behavior of rounding mode <CODE>odd</CODE> when rounding to an Modified the behavior of rounding mode <CODE>odd</CODE> when rounding to an
integer value (either conversion to an integer format or a integer value (either conversion to an integer format or a
&lsquo;<CODE>roundToInt</CODE>&rsquo; function). &lsquo;<CODE>roundToInt</CODE>&rsquo; function).
Previously, for those cases only, rounding mode <CODE>odd</CODE> acted the same Previously, for those cases only, rounding mode <CODE>odd</CODE> acted the same
as rounding to minimum magnitude. as rounding to minimum magnitude.
Now all operations are rounded consistently. Now all operations are rounded consistently.
<LI> <LI>
Fixed some errors in the specialization code modeling Intel x86 floating-point, Fixed some errors in the specialization code modeling Intel x86 floating-point,
specifically the integers returned on invalid operations and the propagation of specifically the integers returned on invalid operations and the propagation of
NaN payloads in a few rare cases. NaN payloads in a few rare cases.
<LI> <LI>
Added specialization code modeling ARM floating-point, conforming to VFPv2 or Added specialization code modeling ARM floating-point, conforming to VFPv2 or
later. later.
<LI> <LI>
Added an example target for ARM processors. Added an example target for ARM processors.
<LI> <LI>
Fixed a minor bug whereby function <CODE>f16_to_ui64</CODE> might return a Fixed a minor bug whereby function <CODE>f16_to_ui64</CODE> might return a
different integer than expected in the case that the floating-point operand is different integer than expected in the case that the floating-point operand is
negative. negative.
<LI> <LI>
Added example target-specific optimization for GCC, employing GCC instrinsics Added example target-specific optimization for GCC, employing GCC instrinsics
and support for <NOBR>128-bit</NOBR> integer arithmetic. and support for <NOBR>128-bit</NOBR> integer arithmetic.
<LI> <LI>
Made other minor improvements. Made other minor improvements.
</UL> </UL>
<H3>Release 3d (2017 August)</H3> <H3>Release 3d (2017 August)</H3>
<UL> <UL>
<LI> <LI>
Fixed bugs in the square root functions for <NOBR>64-bit</NOBR> Fixed bugs in the square root functions for <NOBR>64-bit</NOBR>
double-precision, <NOBR>80-bit</NOBR> double-extended-precision, and double-precision, <NOBR>80-bit</NOBR> double-extended-precision, and
<NOBR>128-bit</NOBR> quadruple-precision. <NOBR>128-bit</NOBR> quadruple-precision.
For <NOBR>64-bit</NOBR> double-precision (<CODE>f64_sqrt</CODE>), the result For <NOBR>64-bit</NOBR> double-precision (<CODE>f64_sqrt</CODE>), the result
could sometimes be off by <NOBR>1 unit</NOBR> in the last place could sometimes be off by <NOBR>1 unit</NOBR> in the last place
(<NOBR>1 ulp</NOBR>) from what it should be. (<NOBR>1 ulp</NOBR>) from what it should be.
For the larger formats, the square root could be wrong in a large portion of For the larger formats, the square root could be wrong in a large portion of
the less-significant bits. the less-significant bits.
(A bug in <CODE>f128_sqrt</CODE> was first reported by Alexei Sibidanov.) (A bug in <CODE>f128_sqrt</CODE> was first reported by Alexei Sibidanov.)
</UL> </UL>
<H3>Release 3c (2017 February)</H3> <H3>Release 3c (2017 February)</H3>
<UL> <UL>
<LI> <LI>
Added optional rounding mode <CODE>odd</CODE> (round to odd, also known as Added optional rounding mode <CODE>odd</CODE> (round to odd, also known as
<EM>jamming</EM>). <EM>jamming</EM>).
<LI> <LI>
Corrected the documentation concerning non-canonical representations in Corrected the documentation concerning non-canonical representations in
<NOBR>80-bit</NOBR> double-extended-precision. <NOBR>80-bit</NOBR> double-extended-precision.
</UL> </UL>
<H3>Release 3b (2016 July)</H3> <H3>Release 3b (2016 July)</H3>
<UL> <UL>
<LI> <LI>
Implemented the common <NOBR>16-bit</NOBR> &ldquo;half-precision&rdquo; Implemented the common <NOBR>16-bit</NOBR> &ldquo;half-precision&rdquo;
floating-point format (<CODE>float16_t</CODE>). floating-point format (<CODE>float16_t</CODE>).
<LI> <LI>
Made the integer values returned on invalid conversions to integer formats Made the integer values returned on invalid conversions to integer formats
be determined by the port-specific specialization instead of being the same for be determined by the port-specific specialization instead of being the same for
all ports. all ports.
<LI> <LI>
Added preprocessor macro <CODE>THREAD_LOCAL</CODE> to allow the floating-point Added preprocessor macro <CODE>THREAD_LOCAL</CODE> to allow the floating-point
state (modes and exception flags) to be made per-thread. state (modes and exception flags) to be made per-thread.
<LI> <LI>
Modified the provided Makefiles to allow some options to be overridden from the Modified the provided Makefiles to allow some options to be overridden from the
<CODE>make</CODE> command. <CODE>make</CODE> command.
<LI> <LI>
Made other minor improvements. Made other minor improvements.
</UL> </UL>
<H3>Release 3a (2015 October)</H3> <H3>Release 3a (2015 October)</H3>
<UL> <UL>
<LI> <LI>
Replaced the license text supplied by the University of California, Berkeley. Replaced the license text supplied by the University of California, Berkeley.
</UL> </UL>
<H3>Release 3 (2015 February)</H3> <H3>Release 3 (2015 February)</H3>
<UL> <UL>
<LI> <LI>
Complete rewrite, funded by the University of California, Berkeley, and Complete rewrite, funded by the University of California, Berkeley, and
consequently having a different use license than earlier releases. consequently having a different use license than earlier releases.
Major changes included renaming most types and functions, upgrading some Major changes included renaming most types and functions, upgrading some
algorithms, restructuring the source files, and making SoftFloat into a true algorithms, restructuring the source files, and making SoftFloat into a true
library. library.
<LI> <LI>
Added functions to convert between floating-point and unsigned integers, both Added functions to convert between floating-point and unsigned integers, both
<NOBR>32-bit</NOBR> and <NOBR>64-bit</NOBR> (<CODE>uint32_t</CODE> and <NOBR>32-bit</NOBR> and <NOBR>64-bit</NOBR> (<CODE>uint32_t</CODE> and
<CODE>uint64_t</CODE>). <CODE>uint64_t</CODE>).
<LI> <LI>
Added functions for fused multiply-add, for all supported floating-point Added functions for fused multiply-add, for all supported floating-point
formats except <NOBR>80-bit</NOBR> double-extended-precision. formats except <NOBR>80-bit</NOBR> double-extended-precision.
<LI> <LI>
Added support for a fifth rounding mode, <CODE>near_maxMag</CODE> (round to Added support for a fifth rounding mode, <CODE>near_maxMag</CODE> (round to
nearest, with ties to maximum magnitude, away from zero). nearest, with ties to maximum magnitude, away from zero).
<LI> <LI>
Dropped the <CODE>timesoftfloat</CODE> program (now part of the Berkeley Dropped the <CODE>timesoftfloat</CODE> program (now part of the Berkeley
TestFloat package). TestFloat package).
</UL> </UL>
<H3>Release 2c (2015 January)</H3> <H3>Release 2c (2015 January)</H3>
<UL> <UL>
<LI> <LI>
Fixed mistakes affecting some <NOBR>64-bit</NOBR> processors. Fixed mistakes affecting some <NOBR>64-bit</NOBR> processors.
<LI> <LI>
Further improved the documentation and the wording for the legal restrictions Further improved the documentation and the wording for the legal restrictions
on using SoftFloat releases <NOBR>through 2c</NOBR> (not applicable to on using SoftFloat releases <NOBR>through 2c</NOBR> (not applicable to
<NOBR>Release 3</NOBR> or later). <NOBR>Release 3</NOBR> or later).
</UL> </UL>
<H3>Release 2b (2002 May)</H3> <H3>Release 2b (2002 May)</H3>
<UL> <UL>
<LI> <LI>
Made minor updates to the documentation, including improved wording for the Made minor updates to the documentation, including improved wording for the
legal restrictions on using SoftFloat. legal restrictions on using SoftFloat.
</UL> </UL>
<H3>Release 2a (1998 December)</H3> <H3>Release 2a (1998 December)</H3>
<UL> <UL>
<LI> <LI>
Added functions to convert between <NOBR>64-bit</NOBR> integers Added functions to convert between <NOBR>64-bit</NOBR> integers
(<CODE>int64</CODE>) and all supported floating-point formats. (<CODE>int64</CODE>) and all supported floating-point formats.
<LI> <LI>
Fixed a bug in all <NOBR>64-bit</NOBR>-version square root functions except Fixed a bug in all <NOBR>64-bit</NOBR>-version square root functions except
<CODE>float32_sqrt</CODE> that caused the result sometimes to be off by <CODE>float32_sqrt</CODE> that caused the result sometimes to be off by
<NOBR>1 unit</NOBR> in the last place (<NOBR>1 ulp</NOBR>) from what it should <NOBR>1 unit</NOBR> in the last place (<NOBR>1 ulp</NOBR>) from what it should
be. be.
(Bug discovered by Paul Donahue.) (Bug discovered by Paul Donahue.)
<LI> <LI>
Improved the Makefiles. Improved the Makefiles.
</UL> </UL>
<H3>Release 2 (1997 June)</H3> <H3>Release 2 (1997 June)</H3>
<UL> <UL>
<LI> <LI>
Created the <NOBR>64-bit</NOBR> (<CODE>bits64</CODE>) version, adding the Created the <NOBR>64-bit</NOBR> (<CODE>bits64</CODE>) version, adding the
<CODE>floatx80</CODE> and <CODE>float128</CODE> formats. <CODE>floatx80</CODE> and <CODE>float128</CODE> formats.
<LI> <LI>
Changed the source directory structure, splitting the sources into a Changed the source directory structure, splitting the sources into a
<CODE>bits32</CODE> and a <CODE>bits64</CODE> version. <CODE>bits32</CODE> and a <CODE>bits64</CODE> version.
Renamed <CODE>environment.h</CODE> to <CODE>milieu.h</CODE> to avoid confusion Renamed <CODE>environment.h</CODE> to <CODE>milieu.h</CODE> to avoid confusion
with environment variables. with environment variables.
<LI> <LI>
Fixed a small error that caused <CODE>float64_round_to_int</CODE> often to Fixed a small error that caused <CODE>float64_round_to_int</CODE> often to
round the wrong way in nearest/even mode when the operand was between round the wrong way in nearest/even mode when the operand was between
2<SUP>20</SUP> and 2<SUP>21</SUP> and halfway between two integers. 2<SUP>20</SUP> and 2<SUP>21</SUP> and halfway between two integers.
</UL> </UL>
<H3>Release 1a (1996 July)</H3> <H3>Release 1a (1996 July)</H3>
<UL> <UL>
<LI> <LI>
Corrected a mistake that caused borderline underflow cases not to raise the Corrected a mistake that caused borderline underflow cases not to raise the
underflow flag when they should have. underflow flag when they should have.
(Problem reported by Doug Priest.) (Problem reported by Doug Priest.)
<LI> <LI>
Added the <CODE>float_detect_tininess</CODE> variable to control whether Added the <CODE>float_detect_tininess</CODE> variable to control whether
tininess is detected before or after rounding. tininess is detected before or after rounding.
</UL> </UL>
<H3>Release 1 (1996 July)</H3> <H3>Release 1 (1996 July)</H3>
<UL> <UL>
<LI> <LI>
Original release, based on work done for the International Computer Science Original release, based on work done for the International Computer Science
Institute (ICSI) in Berkeley, California. Institute (ICSI) in Berkeley, California.
</UL> </UL>
</BODY> </BODY>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,57 +1,57 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) bool extF80M_isSignalingNaN( const extFloat80_t *aPtr )
{ {
const struct extFloat80M *aSPtr; const struct extFloat80M *aSPtr;
uint64_t uiA0; uint64_t uiA0;
aSPtr = (const struct extFloat80M *) aPtr; aSPtr = (const struct extFloat80M *) aPtr;
if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false;
uiA0 = aSPtr->signif; uiA0 = aSPtr->signif;
return return
! (uiA0 & UINT64_C( 0x4000000000000000 )) ! (uiA0 & UINT64_C( 0x4000000000000000 ))
&& (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF));
} }

View File

@ -1,60 +1,60 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
bool f128M_isSignalingNaN( const float128_t *aPtr ) bool f128M_isSignalingNaN( const float128_t *aPtr )
{ {
const uint32_t *aWPtr; const uint32_t *aWPtr;
uint32_t uiA96; uint32_t uiA96;
aWPtr = (const uint32_t *) aPtr; aWPtr = (const uint32_t *) aPtr;
uiA96 = aWPtr[indexWordHi( 4 )]; uiA96 = aWPtr[indexWordHi( 4 )];
if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false;
return return
((uiA96 & 0x00007FFF) != 0) ((uiA96 & 0x00007FFF) != 0)
|| ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )]
| aWPtr[indexWord( 4, 0 )]) | aWPtr[indexWord( 4, 0 )])
!= 0); != 0);
} }

View File

@ -0,0 +1,59 @@
/*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/
#include <stdint.h>
#include "platform.h"
#include "specialize.h"
#include "softfloat.h"
/*----------------------------------------------------------------------------
| Assuming `uiA' has the bit pattern of a BF16 NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised.
*----------------------------------------------------------------------------*/
void softfloat_bf16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr )
{
if ( softfloat_isSigNaNBF16UI( uiA ) ) {
softfloat_raiseFlags( softfloat_flag_invalid );
}
zPtr->sign = uiA>>15;
zPtr->v64 = (uint_fast64_t) uiA<<56;
zPtr->v0 = 0;
}

View File

@ -0,0 +1,51 @@
/*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/
#include <stdint.h>
#include "platform.h"
#include "specialize.h"
/*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a BF16 NaN, and
| returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/
uint_fast16_t softfloat_commonNaNToBF16UI( const struct commonNaN *aPtr )
{
return (uint_fast16_t) aPtr->sign<<15 | 0x7FC0 | aPtr->v64>>56;
}

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into an 80-bit extended | Converts the common NaN pointed to by `aPtr' into an 80-bit extended
| floating-point NaN, and stores this NaN at the location pointed to by | floating-point NaN, and stores this NaN at the location pointed to by
| `zSPtr'. | `zSPtr'.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_commonNaNToExtF80M( softfloat_commonNaNToExtF80M(
const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) const struct commonNaN *aPtr, struct extFloat80M *zSPtr )
{ {
zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF ); zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF );
zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1;
} }

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into an 80-bit extended | Converts the common NaN pointed to by `aPtr' into an 80-bit extended
| floating-point NaN, and returns the bit pattern of this value as an unsigned | floating-point NaN, and returns the bit pattern of this value as an unsigned
| integer. | integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr )
{ {
struct uint128 uiZ; struct uint128 uiZ;
uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF; uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF;
uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1;
return uiZ; return uiZ;
} }

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point
| NaN, and stores this NaN at the location pointed to by `zWPtr'. Argument | NaN, and stores this NaN at the location pointed to by `zWPtr'. Argument
| `zWPtr' points to an array of four 32-bit elements that concatenate in the | `zWPtr' points to an array of four 32-bit elements that concatenate in the
| platform's normal endian order to form a 128-bit floating-point value. | platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr )
{ {
softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr ); softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr );
zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000; zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000;
} }

View File

@ -1,55 +1,55 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr )
{ {
struct uint128 uiZ; struct uint128 uiZ;
uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 ); uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 );
uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 ); uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 );
return uiZ; return uiZ;
} }

View File

@ -1,51 +1,51 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 16-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 16-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ) uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr )
{ {
return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54; return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54;
} }

View File

@ -1,51 +1,51 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 32-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 32-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ) uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr )
{ {
return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41; return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41;
} }

View File

@ -1,53 +1,53 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 64-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 64-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ) uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr )
{ {
return return
(uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 ) (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 )
| aPtr->v64>>12; | aPtr->v64>>12;
} }

View File

@ -1,62 +1,62 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the 80-bit extended floating-point value pointed to by `aSPtr' is | Assuming the 80-bit extended floating-point value pointed to by `aSPtr' is
| a NaN, converts this NaN to the common NaN form, and stores the resulting | a NaN, converts this NaN to the common NaN form, and stores the resulting
| common NaN at the location pointed to by `zPtr'. If the NaN is a signaling | common NaN at the location pointed to by `zPtr'. If the NaN is a signaling
| NaN, the invalid exception is raised. | NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_extF80MToCommonNaN( softfloat_extF80MToCommonNaN(
const struct extFloat80M *aSPtr, struct commonNaN *zPtr ) const struct extFloat80M *aSPtr, struct commonNaN *zPtr )
{ {
if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) { if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = signExtF80UI64( aSPtr->signExp ); zPtr->sign = signExtF80UI64( aSPtr->signExp );
zPtr->v64 = aSPtr->signif<<1; zPtr->v64 = aSPtr->signif<<1;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,62 +1,62 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' | Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0'
| has the bit pattern of an 80-bit extended floating-point NaN, converts | has the bit pattern of an 80-bit extended floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_extF80UIToCommonNaN( softfloat_extF80UIToCommonNaN(
uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) { if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA64>>15; zPtr->sign = uiA64>>15;
zPtr->v64 = uiA0<<1; zPtr->v64 = uiA0<<1;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,62 +1,62 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the 128-bit floating-point value pointed to by `aWPtr' is a NaN, | Assuming the 128-bit floating-point value pointed to by `aWPtr' is a NaN,
| converts this NaN to the common NaN form, and stores the resulting common | converts this NaN to the common NaN form, and stores the resulting common
| NaN at the location pointed to by `zPtr'. If the NaN is a signaling NaN, | NaN at the location pointed to by `zPtr'. If the NaN is a signaling NaN,
| the invalid exception is raised. Argument `aWPtr' points to an array of | the invalid exception is raised. Argument `aWPtr' points to an array of
| four 32-bit elements that concatenate in the platform's normal endian order | four 32-bit elements that concatenate in the platform's normal endian order
| to form a 128-bit floating-point value. | to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ) softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr )
{ {
if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) { if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = aWPtr[indexWordHi( 4 )]>>31; zPtr->sign = aWPtr[indexWordHi( 4 )]>>31;
softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 ); softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 );
} }

View File

@ -1,65 +1,65 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' | Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0'
| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to | has the bit pattern of a 128-bit floating-point NaN, converts this NaN to
| the common NaN form, and stores the resulting common NaN at the location | the common NaN form, and stores the resulting common NaN at the location
| pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid exception | pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid exception
| is raised. | is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_f128UIToCommonNaN( softfloat_f128UIToCommonNaN(
uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr )
{ {
struct uint128 NaNSig; struct uint128 NaNSig;
if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) { if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 ); NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 );
zPtr->sign = uiA64>>63; zPtr->sign = uiA64>>63;
zPtr->v64 = NaNSig.v64; zPtr->v64 = NaNSig.v64;
zPtr->v0 = NaNSig.v0; zPtr->v0 = NaNSig.v0;
} }

View File

@ -1,59 +1,59 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming `uiA' has the bit pattern of a 16-bit floating-point NaN, converts | Assuming `uiA' has the bit pattern of a 16-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ) void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNF16UI( uiA ) ) { if ( softfloat_isSigNaNF16UI( uiA ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA>>15; zPtr->sign = uiA>>15;
zPtr->v64 = (uint_fast64_t) uiA<<54; zPtr->v64 = (uint_fast64_t) uiA<<54;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,59 +1,59 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming `uiA' has the bit pattern of a 32-bit floating-point NaN, converts | Assuming `uiA' has the bit pattern of a 32-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ) void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNF32UI( uiA ) ) { if ( softfloat_isSigNaNF32UI( uiA ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA>>31; zPtr->sign = uiA>>31;
zPtr->v64 = (uint_fast64_t) uiA<<41; zPtr->v64 = (uint_fast64_t) uiA<<41;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,59 +1,59 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming `uiA' has the bit pattern of a 64-bit floating-point NaN, converts | Assuming `uiA' has the bit pattern of a 64-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ) void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNF64UI( uiA ) ) { if ( softfloat_isSigNaNF64UI( uiA ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA>>63; zPtr->sign = uiA>>63;
zPtr->v64 = uiA<<12; zPtr->v64 = uiA<<12;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,107 +1,107 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming at least one of the two 80-bit extended floating-point values | Assuming at least one of the two 80-bit extended floating-point values
| pointed to by `aSPtr' and `bSPtr' is a NaN, stores the combined NaN result | pointed to by `aSPtr' and `bSPtr' is a NaN, stores the combined NaN result
| at the location pointed to by `zSPtr'. If either original floating-point | at the location pointed to by `zSPtr'. If either original floating-point
| value is a signaling NaN, the invalid exception is raised. | value is a signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_propagateNaNExtF80M( softfloat_propagateNaNExtF80M(
const struct extFloat80M *aSPtr, const struct extFloat80M *aSPtr,
const struct extFloat80M *bSPtr, const struct extFloat80M *bSPtr,
struct extFloat80M *zSPtr struct extFloat80M *zSPtr
) )
{ {
bool isSigNaNA; bool isSigNaNA;
const struct extFloat80M *sPtr; const struct extFloat80M *sPtr;
bool isSigNaNB; bool isSigNaNB;
uint_fast16_t uiB64; uint_fast16_t uiB64;
uint64_t uiB0; uint64_t uiB0;
uint_fast16_t uiA64; uint_fast16_t uiA64;
uint64_t uiA0; uint64_t uiA0;
uint_fast16_t uiMagA64, uiMagB64; uint_fast16_t uiMagA64, uiMagB64;
isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ); isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr );
sPtr = aSPtr; sPtr = aSPtr;
if ( ! bSPtr ) { if ( ! bSPtr ) {
if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid );
goto copy; goto copy;
} }
isSigNaNB = extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr ); isSigNaNB = extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr );
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
uiB64 = bSPtr->signExp; uiB64 = bSPtr->signExp;
if ( isSigNaNB ) goto returnLargerUIMag; if ( isSigNaNB ) goto returnLargerUIMag;
uiB0 = bSPtr->signif; uiB0 = bSPtr->signif;
if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto copyB; if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto copyB;
goto copy; goto copy;
} else { } else {
uiA64 = aSPtr->signExp; uiA64 = aSPtr->signExp;
uiA0 = aSPtr->signif; uiA0 = aSPtr->signif;
if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto copy; if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto copy;
goto copyB; goto copyB;
} }
} }
uiB64 = bSPtr->signExp; uiB64 = bSPtr->signExp;
returnLargerUIMag: returnLargerUIMag:
uiA64 = aSPtr->signExp; uiA64 = aSPtr->signExp;
uiMagA64 = uiA64 & 0x7FFF; uiMagA64 = uiA64 & 0x7FFF;
uiMagB64 = uiB64 & 0x7FFF; uiMagB64 = uiB64 & 0x7FFF;
if ( uiMagA64 < uiMagB64 ) goto copyB; if ( uiMagA64 < uiMagB64 ) goto copyB;
if ( uiMagB64 < uiMagA64 ) goto copy; if ( uiMagB64 < uiMagA64 ) goto copy;
uiA0 = aSPtr->signif; uiA0 = aSPtr->signif;
uiB0 = bSPtr->signif; uiB0 = bSPtr->signif;
if ( uiA0 < uiB0 ) goto copyB; if ( uiA0 < uiB0 ) goto copyB;
if ( uiB0 < uiA0 ) goto copy; if ( uiB0 < uiA0 ) goto copy;
if ( uiA64 < uiB64 ) goto copy; if ( uiA64 < uiB64 ) goto copy;
copyB: copyB:
sPtr = bSPtr; sPtr = bSPtr;
copy: copy:
zSPtr->signExp = sPtr->signExp; zSPtr->signExp = sPtr->signExp;
zSPtr->signif = sPtr->signif | UINT64_C( 0xC000000000000000 ); zSPtr->signif = sPtr->signif | UINT64_C( 0xC000000000000000 );
} }

View File

@ -1,106 +1,106 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and | Interpreting the unsigned integer formed from concatenating 'uiA64' and
| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting | 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| 80-bit extended floating-point value, and assuming at least on of these | 80-bit extended floating-point value, and assuming at least on of these
| floating-point values is a NaN, returns the bit pattern of the combined NaN | floating-point values is a NaN, returns the bit pattern of the combined NaN
| result. If either original floating-point value is a signaling NaN, the | result. If either original floating-point value is a signaling NaN, the
| invalid exception is raised. | invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 struct uint128
softfloat_propagateNaNExtF80UI( softfloat_propagateNaNExtF80UI(
uint_fast16_t uiA64, uint_fast16_t uiA64,
uint_fast64_t uiA0, uint_fast64_t uiA0,
uint_fast16_t uiB64, uint_fast16_t uiB64,
uint_fast64_t uiB0 uint_fast64_t uiB0
) )
{ {
bool isSigNaNA, isSigNaNB; bool isSigNaNA, isSigNaNB;
uint_fast64_t uiNonsigA0, uiNonsigB0; uint_fast64_t uiNonsigA0, uiNonsigB0;
uint_fast16_t uiMagA64, uiMagB64; uint_fast16_t uiMagA64, uiMagB64;
struct uint128 uiZ; struct uint128 uiZ;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 ); isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 );
isSigNaNB = softfloat_isSigNaNExtF80UI( uiB64, uiB0 ); isSigNaNB = softfloat_isSigNaNExtF80UI( uiB64, uiB0 );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
| Make NaNs non-signaling. | Make NaNs non-signaling.
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
uiNonsigA0 = uiA0 | UINT64_C( 0xC000000000000000 ); uiNonsigA0 = uiA0 | UINT64_C( 0xC000000000000000 );
uiNonsigB0 = uiB0 | UINT64_C( 0xC000000000000000 ); uiNonsigB0 = uiB0 | UINT64_C( 0xC000000000000000 );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
if ( isSigNaNB ) goto returnLargerMag; if ( isSigNaNB ) goto returnLargerMag;
if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto returnB; if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto returnB;
goto returnA; goto returnA;
} else { } else {
if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto returnA; if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto returnA;
goto returnB; goto returnB;
} }
} }
returnLargerMag: returnLargerMag:
uiMagA64 = uiA64 & 0x7FFF; uiMagA64 = uiA64 & 0x7FFF;
uiMagB64 = uiB64 & 0x7FFF; uiMagB64 = uiB64 & 0x7FFF;
if ( uiMagA64 < uiMagB64 ) goto returnB; if ( uiMagA64 < uiMagB64 ) goto returnB;
if ( uiMagB64 < uiMagA64 ) goto returnA; if ( uiMagB64 < uiMagA64 ) goto returnA;
if ( uiA0 < uiB0 ) goto returnB; if ( uiA0 < uiB0 ) goto returnB;
if ( uiB0 < uiA0 ) goto returnA; if ( uiB0 < uiA0 ) goto returnA;
if ( uiA64 < uiB64 ) goto returnA; if ( uiA64 < uiB64 ) goto returnA;
returnB: returnB:
uiZ.v64 = uiB64; uiZ.v64 = uiB64;
uiZ.v0 = uiNonsigB0; uiZ.v0 = uiNonsigB0;
return uiZ; return uiZ;
returnA: returnA:
uiZ.v64 = uiA64; uiZ.v64 = uiA64;
uiZ.v0 = uiNonsigA0; uiZ.v0 = uiNonsigA0;
return uiZ; return uiZ;
} }

View File

@ -1,76 +1,76 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming at least one of the two 128-bit floating-point values pointed to by | Assuming at least one of the two 128-bit floating-point values pointed to by
| `aWPtr' and `bWPtr' is a NaN, stores the combined NaN result at the location | `aWPtr' and `bWPtr' is a NaN, stores the combined NaN result at the location
| pointed to by `zWPtr'. If either original floating-point value is a | pointed to by `zWPtr'. If either original floating-point value is a
| signaling NaN, the invalid exception is raised. Each of `aWPtr', `bWPtr', | signaling NaN, the invalid exception is raised. Each of `aWPtr', `bWPtr',
| and `zWPtr' points to an array of four 32-bit elements that concatenate in | and `zWPtr' points to an array of four 32-bit elements that concatenate in
| the platform's normal endian order to form a 128-bit floating-point value. | the platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_propagateNaNF128M( softfloat_propagateNaNF128M(
const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr )
{ {
bool isSigNaNA; bool isSigNaNA;
const uint32_t *ptr; const uint32_t *ptr;
ptr = aWPtr; ptr = aWPtr;
isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr );
if ( if (
isSigNaNA isSigNaNA
|| (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr ))
) { ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) goto copy; if ( isSigNaNA ) goto copy;
} }
if ( ! softfloat_isNaNF128M( aWPtr ) ) ptr = bWPtr; if ( ! softfloat_isNaNF128M( aWPtr ) ) ptr = bWPtr;
copy: copy:
zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000; zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000;
zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )]; zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )];
zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )]; zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )];
zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )]; zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )];
} }

View File

@ -1,81 +1,81 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating `uiA64' and | Interpreting the unsigned integer formed from concatenating `uiA64' and
| `uiA0' as a 128-bit floating-point value, and likewise interpreting the | `uiA0' as a 128-bit floating-point value, and likewise interpreting the
| unsigned integer formed from concatenating `uiB64' and `uiB0' as another | unsigned integer formed from concatenating `uiB64' and `uiB0' as another
| 128-bit floating-point value, and assuming at least on of these floating- | 128-bit floating-point value, and assuming at least on of these floating-
| point values is a NaN, returns the bit pattern of the combined NaN result. | point values is a NaN, returns the bit pattern of the combined NaN result.
| If either original floating-point value is a signaling NaN, the invalid | If either original floating-point value is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 struct uint128
softfloat_propagateNaNF128UI( softfloat_propagateNaNF128UI(
uint_fast64_t uiA64, uint_fast64_t uiA64,
uint_fast64_t uiA0, uint_fast64_t uiA0,
uint_fast64_t uiB64, uint_fast64_t uiB64,
uint_fast64_t uiB0 uint_fast64_t uiB0
) )
{ {
bool isSigNaNA; bool isSigNaNA;
struct uint128 uiZ; struct uint128 uiZ;
isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 );
if ( isSigNaNA || softfloat_isSigNaNF128UI( uiB64, uiB0 ) ) { if ( isSigNaNA || softfloat_isSigNaNF128UI( uiB64, uiB0 ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) goto returnNonsigA; if ( isSigNaNA ) goto returnNonsigA;
} }
if ( isNaNF128UI( uiA64, uiA0 ) ) { if ( isNaNF128UI( uiA64, uiA0 ) ) {
returnNonsigA: returnNonsigA:
uiZ.v64 = uiA64; uiZ.v64 = uiA64;
uiZ.v0 = uiA0; uiZ.v0 = uiA0;
} else { } else {
uiZ.v64 = uiB64; uiZ.v64 = uiB64;
uiZ.v0 = uiB0; uiZ.v0 = uiB0;
} }
uiZ.v64 |= UINT64_C( 0x0000800000000000 ); uiZ.v64 |= UINT64_C( 0x0000800000000000 );
return uiZ; return uiZ;
} }

View File

@ -1,63 +1,63 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting `uiA' and `uiB' as the bit patterns of two 16-bit floating- | Interpreting `uiA' and `uiB' as the bit patterns of two 16-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either `uiA' or `uiB' has the pattern of a | the combined NaN result. If either `uiA' or `uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t uint_fast16_t
softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ) softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB )
{ {
bool isSigNaNA; bool isSigNaNA;
isSigNaNA = softfloat_isSigNaNF16UI( uiA ); isSigNaNA = softfloat_isSigNaNF16UI( uiA );
if ( isSigNaNA || softfloat_isSigNaNF16UI( uiB ) ) { if ( isSigNaNA || softfloat_isSigNaNF16UI( uiB ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) return uiA | 0x0200; if ( isSigNaNA ) return uiA | 0x0200;
} }
return (isNaNF16UI( uiA ) ? uiA : uiB) | 0x0200; return (isNaNF16UI( uiA ) ? uiA : uiB) | 0x0200;
} }

View File

@ -1,63 +1,63 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting `uiA' and `uiB' as the bit patterns of two 32-bit floating- | Interpreting `uiA' and `uiB' as the bit patterns of two 32-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either `uiA' or `uiB' has the pattern of a | the combined NaN result. If either `uiA' or `uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast32_t uint_fast32_t
softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ) softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB )
{ {
bool isSigNaNA; bool isSigNaNA;
isSigNaNA = softfloat_isSigNaNF32UI( uiA ); isSigNaNA = softfloat_isSigNaNF32UI( uiA );
if ( isSigNaNA || softfloat_isSigNaNF32UI( uiB ) ) { if ( isSigNaNA || softfloat_isSigNaNF32UI( uiB ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) return uiA | 0x00400000; if ( isSigNaNA ) return uiA | 0x00400000;
} }
return (isNaNF32UI( uiA ) ? uiA : uiB) | 0x00400000; return (isNaNF32UI( uiA ) ? uiA : uiB) | 0x00400000;
} }

View File

@ -1,63 +1,63 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting `uiA' and `uiB' as the bit patterns of two 64-bit floating- | Interpreting `uiA' and `uiB' as the bit patterns of two 64-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either `uiA' or `uiB' has the pattern of a | the combined NaN result. If either `uiA' or `uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast64_t uint_fast64_t
softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ) softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB )
{ {
bool isSigNaNA; bool isSigNaNA;
isSigNaNA = softfloat_isSigNaNF64UI( uiA ); isSigNaNA = softfloat_isSigNaNF64UI( uiA );
if ( isSigNaNA || softfloat_isSigNaNF64UI( uiB ) ) { if ( isSigNaNA || softfloat_isSigNaNF64UI( uiB ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) return uiA | UINT64_C( 0x0008000000000000 ); if ( isSigNaNA ) return uiA | UINT64_C( 0x0008000000000000 );
} }
return (isNaNF64UI( uiA ) ? uiA : uiB) | UINT64_C( 0x0008000000000000 ); return (isNaNF64UI( uiA ) ? uiA : uiB) | UINT64_C( 0x0008000000000000 );
} }

View File

@ -1,52 +1,52 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include "platform.h" #include "platform.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Raises the exceptions specified by `flags'. Floating-point traps can be | Raises the exceptions specified by `flags'. Floating-point traps can be
| defined here if desired. It is currently not possible for such a trap | defined here if desired. It is currently not possible for such a trap
| to substitute a result value. If traps are not implemented, this routine | to substitute a result value. If traps are not implemented, this routine
| should be simply `softfloat_exceptionFlags |= flags;'. | should be simply `softfloat_exceptionFlags |= flags;'.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_raiseFlags( uint_fast8_t flags ) void softfloat_raiseFlags( uint_fast8_t flags )
{ {
softfloat_exceptionFlags |= flags; softfloat_exceptionFlags |= flags;
} }

View File

@ -1,346 +1,397 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#ifndef specialize_h #ifndef specialize_h
#define specialize_h 1 #define specialize_h 1
#include "primitiveTypes.h" #include <stdbool.h>
#include "softfloat.h" #include <stdint.h>
#include <stdbool.h> #include "primitiveTypes.h"
#include <stdint.h> #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Default value for 'softfloat_detectTininess'. | Default value for 'softfloat_detectTininess'.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define init_detectTininess softfloat_tininess_afterRounding #define init_detectTininess softfloat_tininess_afterRounding
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The values to return on conversions to 32-bit integer formats that raise an | The values to return on conversions to 32-bit integer formats that raise an
| invalid exception. | invalid exception.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define ui32_fromPosOverflow 0xFFFFFFFF #define ui32_fromPosOverflow 0xFFFFFFFF
#define ui32_fromNegOverflow 0xFFFFFFFF #define ui32_fromNegOverflow 0xFFFFFFFF
#define ui32_fromNaN 0xFFFFFFFF #define ui32_fromNaN 0xFFFFFFFF
#define i32_fromPosOverflow (-0x7FFFFFFF - 1) #define i32_fromPosOverflow (-0x7FFFFFFF - 1)
#define i32_fromNegOverflow (-0x7FFFFFFF - 1) #define i32_fromNegOverflow (-0x7FFFFFFF - 1)
#define i32_fromNaN (-0x7FFFFFFF - 1) #define i32_fromNaN (-0x7FFFFFFF - 1)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The values to return on conversions to 64-bit integer formats that raise an | The values to return on conversions to 64-bit integer formats that raise an
| invalid exception. | invalid exception.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define ui64_fromPosOverflow UINT64_C(0xFFFFFFFFFFFFFFFF) #define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF )
#define ui64_fromNegOverflow UINT64_C(0xFFFFFFFFFFFFFFFF) #define ui64_fromNegOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF )
#define ui64_fromNaN UINT64_C(0xFFFFFFFFFFFFFFFF) #define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF )
#define i64_fromPosOverflow (-INT64_C(0x7FFFFFFFFFFFFFFF) - 1) #define i64_fromPosOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
#define i64_fromNegOverflow (-INT64_C(0x7FFFFFFFFFFFFFFF) - 1) #define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
#define i64_fromNaN (-INT64_C(0x7FFFFFFFFFFFFFFF) - 1) #define i64_fromNaN (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| "Common NaN" structure, used to transfer NaN representations from one format | "Common NaN" structure, used to transfer NaN representations from one format
| to another. | to another.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct commonNaN { struct commonNaN {
bool sign; bool sign;
#ifdef LITTLEENDIAN #ifdef LITTLEENDIAN
uint64_t v0, v64; uint64_t v0, v64;
#else #else
uint64_t v64, v0; uint64_t v64, v0;
#endif #endif
}; };
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The bit pattern for a default generated 16-bit floating-point NaN. | The bit pattern for a default generated 16-bit floating-point NaN.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define defaultNaNF16UI 0xFE00 #define defaultNaNF16UI 0xFE00
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a | Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a
| 16-bit floating-point signaling NaN. | 16-bit floating-point signaling NaN.
| Note: This macro evaluates its argument more than once. | Note: This macro evaluates its argument more than once.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNF16UI(uiA) ((((uiA)&0x7E00) == 0x7C00) && ((uiA)&0x01FF)) #define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF))
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts | Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f16UIToCommonNaN(uint_fast16_t uiA, struct commonNaN* zPtr); void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr );
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point | Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t softfloat_commonNaNToF16UI(const struct commonNaN* aPtr); uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr );
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- | Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t softfloat_propagateNaNF16UI(uint_fast16_t uiA, uint_fast16_t uiB); uint_fast16_t
softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB );
/*----------------------------------------------------------------------------
| The bit pattern for a default generated 32-bit floating-point NaN. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a
#define defaultNaNF32UI 0xFFC00000 | 16-bit brain floating-point (BF16) signaling NaN.
| Note: This macro evaluates its argument more than once.
/*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/
| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a #define softfloat_isSigNaNBF16UI( uiA ) ((((uiA) & 0x7FC0) == 0x7F80) && ((uiA) & 0x003F))
| 32-bit floating-point signaling NaN.
| Note: This macro evaluates its argument more than once. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | Assuming 'uiA' has the bit pattern of a 16-bit BF16 floating-point NaN, converts
#define softfloat_isSigNaNF32UI(uiA) ((((uiA)&0x7FC00000) == 0x7F800000) && ((uiA)&0x003FFFFF)) | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
/*---------------------------------------------------------------------------- | exception is raised.
| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts *----------------------------------------------------------------------------*/
| this NaN to the common NaN form, and stores the resulting common NaN at the void softfloat_bf16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr );
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point
void softfloat_f32UIToCommonNaN(uint_fast32_t uiA, struct commonNaN* zPtr); | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------- uint_fast16_t softfloat_commonNaNToBF16UI( const struct commonNaN *aPtr );
| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | The bit pattern for a default generated 32-bit floating-point NaN.
uint_fast32_t softfloat_commonNaNToF32UI(const struct commonNaN* aPtr); *----------------------------------------------------------------------------*/
#define defaultNaNF32UI 0xFFC00000
/*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- /*----------------------------------------------------------------------------
| point values, at least one of which is a NaN, returns the bit pattern of | Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | 32-bit floating-point signaling NaN.
| signaling NaN, the invalid exception is raised. | Note: This macro evaluates its argument more than once.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast32_t softfloat_propagateNaNF32UI(uint_fast32_t uiA, uint_fast32_t uiB); #define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF))
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The bit pattern for a default generated 64-bit floating-point NaN. | Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts
*----------------------------------------------------------------------------*/ | this NaN to the common NaN form, and stores the resulting common NaN at the
#define defaultNaNF64UI UINT64_C(0xFFF8000000000000) | location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised.
/*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/
| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr );
| 64-bit floating-point signaling NaN.
| Note: This macro evaluates its argument more than once. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point
#define softfloat_isSigNaNF64UI(uiA) \ | NaN, and returns the bit pattern of this value as an unsigned integer.
((((uiA)&UINT64_C(0x7FF8000000000000)) == UINT64_C(0x7FF0000000000000)) && ((uiA)&UINT64_C(0x0007FFFFFFFFFFFF))) *----------------------------------------------------------------------------*/
uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr );
/*----------------------------------------------------------------------------
| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts /*----------------------------------------------------------------------------
| this NaN to the common NaN form, and stores the resulting common NaN at the | Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating-
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid | point values, at least one of which is a NaN, returns the bit pattern of
| exception is raised. | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
*----------------------------------------------------------------------------*/ | signaling NaN, the invalid exception is raised.
void softfloat_f64UIToCommonNaN(uint_fast64_t uiA, struct commonNaN* zPtr); *----------------------------------------------------------------------------*/
uint_fast32_t
/*---------------------------------------------------------------------------- softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB );
| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | The bit pattern for a default generated 64-bit floating-point NaN.
uint_fast64_t softfloat_commonNaNToF64UI(const struct commonNaN* aPtr); *----------------------------------------------------------------------------*/
#define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 )
/*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- /*----------------------------------------------------------------------------
| point values, at least one of which is a NaN, returns the bit pattern of | Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | 64-bit floating-point signaling NaN.
| signaling NaN, the invalid exception is raised. | Note: This macro evaluates its argument more than once.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast64_t softfloat_propagateNaNF64UI(uint_fast64_t uiA, uint_fast64_t uiB); #define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF )))
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The bit pattern for a default generated 80-bit extended floating-point NaN. | Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts
*----------------------------------------------------------------------------*/ | this NaN to the common NaN form, and stores the resulting common NaN at the
#define defaultNaNExtF80UI64 0xFFFF | location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
#define defaultNaNExtF80UI0 UINT64_C(0xC000000000000000) | exception is raised.
*----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------- void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr );
| Returns true when the 80-bit unsigned integer formed from concatenating
| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended /*----------------------------------------------------------------------------
| floating-point signaling NaN. | Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point
| Note: This macro evaluates its arguments more than once. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNExtF80UI(uiA64, uiA0) \ uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr );
((((uiA64)&0x7FFF) == 0x7FFF) && !((uiA0)&UINT64_C(0x4000000000000000)) && ((uiA0)&UINT64_C(0x3FFFFFFFFFFFFFFF)))
/*----------------------------------------------------------------------------
#ifdef SOFTFLOAT_FAST_INT64 | Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of
/*---------------------------------------------------------------------------- | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is | signaling NaN, the invalid exception is raised.
| defined. *----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/ uint_fast64_t
softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB );
/*----------------------------------------------------------------------------
| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' /*----------------------------------------------------------------------------
| has the bit pattern of an 80-bit extended floating-point NaN, converts | The bit pattern for a default generated 80-bit extended floating-point NaN.
| this NaN to the common NaN form, and stores the resulting common NaN at the *----------------------------------------------------------------------------*/
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid #define defaultNaNExtF80UI64 0xFFFF
| exception is raised. #define defaultNaNExtF80UI0 UINT64_C( 0xC000000000000000 )
*----------------------------------------------------------------------------*/
void softfloat_extF80UIToCommonNaN(uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN* zPtr); /*----------------------------------------------------------------------------
| Returns true when the 80-bit unsigned integer formed from concatenating
/*---------------------------------------------------------------------------- | 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended | floating-point signaling NaN.
| floating-point NaN, and returns the bit pattern of this value as an unsigned | Note: This macro evaluates its arguments more than once.
| integer. *----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/ #define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF )))
struct uint128 softfloat_commonNaNToExtF80UI(const struct commonNaN* aPtr);
#ifdef SOFTFLOAT_FAST_INT64
/*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and /*----------------------------------------------------------------------------
| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting | The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is
| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | defined.
| 80-bit extended floating-point value, and assuming at least on of these *----------------------------------------------------------------------------*/
| floating-point values is a NaN, returns the bit pattern of the combined NaN
| result. If either original floating-point value is a signaling NaN, the /*----------------------------------------------------------------------------
| invalid exception is raised. | Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0'
*----------------------------------------------------------------------------*/ | has the bit pattern of an 80-bit extended floating-point NaN, converts
struct uint128 softfloat_propagateNaNExtF80UI(uint_fast16_t uiA64, uint_fast64_t uiA0, uint_fast16_t uiB64, uint_fast64_t uiB0); | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
/*---------------------------------------------------------------------------- | exception is raised.
| The bit pattern for a default generated 128-bit floating-point NaN. *----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/ void
#define defaultNaNF128UI64 UINT64_C(0xFFFF800000000000) softfloat_extF80UIToCommonNaN(
#define defaultNaNF128UI0 UINT64_C(0) uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Returns true when the 128-bit unsigned integer formed from concatenating | Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating- | floating-point NaN, and returns the bit pattern of this value as an unsigned
| point signaling NaN. | integer.
| Note: This macro evaluates its arguments more than once. *----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/ struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr );
#define softfloat_isSigNaNF128UI(uiA64, uiA0) \
((((uiA64)&UINT64_C(0x7FFF800000000000)) == UINT64_C(0x7FFF000000000000)) && ((uiA0) || ((uiA64)&UINT64_C(0x00007FFFFFFFFFFF)))) /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and
/*---------------------------------------------------------------------------- | 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' | the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to | 80-bit extended floating-point value, and assuming at least on of these
| the common NaN form, and stores the resulting common NaN at the location | floating-point values is a NaN, returns the bit pattern of the combined NaN
| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception | result. If either original floating-point value is a signaling NaN, the
| is raised. | invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f128UIToCommonNaN(uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN* zPtr); struct uint128
softfloat_propagateNaNExtF80UI(
/*---------------------------------------------------------------------------- uint_fast16_t uiA64,
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point uint_fast64_t uiA0,
| NaN, and returns the bit pattern of this value as an unsigned integer. uint_fast16_t uiB64,
*----------------------------------------------------------------------------*/ uint_fast64_t uiB0
struct uint128 softfloat_commonNaNToF128UI(const struct commonNaN*); );
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and | The bit pattern for a default generated 128-bit floating-point NaN.
| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the *----------------------------------------------------------------------------*/
| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another #define defaultNaNF128UI64 UINT64_C( 0xFFFF800000000000 )
| 128-bit floating-point value, and assuming at least on of these floating- #define defaultNaNF128UI0 UINT64_C( 0 )
| point values is a NaN, returns the bit pattern of the combined NaN result.
| If either original floating-point value is a signaling NaN, the invalid /*----------------------------------------------------------------------------
| exception is raised. | Returns true when the 128-bit unsigned integer formed from concatenating
*----------------------------------------------------------------------------*/ | 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating-
struct uint128 softfloat_propagateNaNF128UI(uint_fast64_t uiA64, uint_fast64_t uiA0, uint_fast64_t uiB64, uint_fast64_t uiB0); | point signaling NaN.
| Note: This macro evaluates its arguments more than once.
#else *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF ))))
/*----------------------------------------------------------------------------
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not /*----------------------------------------------------------------------------
| defined. | Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0'
*----------------------------------------------------------------------------*/ | has the bit pattern of a 128-bit floating-point NaN, converts this NaN to
| the common NaN form, and stores the resulting common NaN at the location
/*---------------------------------------------------------------------------- | pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception
| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is | is raised.
| a NaN, converts this NaN to the common NaN form, and stores the resulting *----------------------------------------------------------------------------*/
| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling void
| NaN, the invalid exception is raised. softfloat_f128UIToCommonNaN(
*----------------------------------------------------------------------------*/ uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
void softfloat_extF80MToCommonNaN(const struct extFloat80M* aSPtr, struct commonNaN* zPtr);
/*----------------------------------------------------------------------------
/*---------------------------------------------------------------------------- | Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended | NaN, and returns the bit pattern of this value as an unsigned integer.
| floating-point NaN, and stores this NaN at the location pointed to by *----------------------------------------------------------------------------*/
| 'zSPtr'. struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * );
*----------------------------------------------------------------------------*/
void softfloat_commonNaNToExtF80M(const struct commonNaN* aPtr, struct extFloat80M* zSPtr); /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and
/*---------------------------------------------------------------------------- | 'uiA0' as a 128-bit floating-point value, and likewise interpreting the
| Assuming at least one of the two 80-bit extended floating-point values | unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result | 128-bit floating-point value, and assuming at least on of these floating-
| at the location pointed to by 'zSPtr'. If either original floating-point | point values is a NaN, returns the bit pattern of the combined NaN result.
| value is a signaling NaN, the invalid exception is raised. | If either original floating-point value is a signaling NaN, the invalid
*----------------------------------------------------------------------------*/ | exception is raised.
void softfloat_propagateNaNExtF80M(const struct extFloat80M* aSPtr, const struct extFloat80M* bSPtr, struct extFloat80M* zSPtr); *----------------------------------------------------------------------------*/
struct uint128
/*---------------------------------------------------------------------------- softfloat_propagateNaNF128UI(
| The bit pattern for a default generated 128-bit floating-point NaN. uint_fast64_t uiA64,
*----------------------------------------------------------------------------*/ uint_fast64_t uiA0,
#define defaultNaNF128UI96 0xFFFF8000 uint_fast64_t uiB64,
#define defaultNaNF128UI64 0 uint_fast64_t uiB0
#define defaultNaNF128UI32 0 );
#define defaultNaNF128UI0 0
#else
/*----------------------------------------------------------------------------
| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, /*----------------------------------------------------------------------------
| converts this NaN to the common NaN form, and stores the resulting common | The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not
| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN, | defined.
| the invalid exception is raised. Argument 'aWPtr' points to an array of *----------------------------------------------------------------------------*/
| four 32-bit elements that concatenate in the platform's normal endian order
| to form a 128-bit floating-point value. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is
void softfloat_f128MToCommonNaN(const uint32_t* aWPtr, struct commonNaN* zPtr); | a NaN, converts this NaN to the common NaN form, and stores the resulting
| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling
/*---------------------------------------------------------------------------- | NaN, the invalid exception is raised.
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point *----------------------------------------------------------------------------*/
| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument void
| 'zWPtr' points to an array of four 32-bit elements that concatenate in the softfloat_extF80MToCommonNaN(
| platform's normal endian order to form a 128-bit floating-point value. const struct extFloat80M *aSPtr, struct commonNaN *zPtr );
*----------------------------------------------------------------------------*/
void softfloat_commonNaNToF128M(const struct commonNaN* aPtr, uint32_t* zWPtr); /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
/*---------------------------------------------------------------------------- | floating-point NaN, and stores this NaN at the location pointed to by
| Assuming at least one of the two 128-bit floating-point values pointed to by | 'zSPtr'.
| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location *----------------------------------------------------------------------------*/
| pointed to by 'zWPtr'. If either original floating-point value is a void
| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', softfloat_commonNaNToExtF80M(
| and 'zWPtr' points to an array of four 32-bit elements that concatenate in const struct commonNaN *aPtr, struct extFloat80M *zSPtr );
| the platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------
void softfloat_propagateNaNF128M(const uint32_t* aWPtr, const uint32_t* bWPtr, uint32_t* zWPtr); | Assuming at least one of the two 80-bit extended floating-point values
| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result
#endif | at the location pointed to by 'zSPtr'. If either original floating-point
| value is a signaling NaN, the invalid exception is raised.
#endif *----------------------------------------------------------------------------*/
void
softfloat_propagateNaNExtF80M(
const struct extFloat80M *aSPtr,
const struct extFloat80M *bSPtr,
struct extFloat80M *zSPtr
);
/*----------------------------------------------------------------------------
| The bit pattern for a default generated 128-bit floating-point NaN.
*----------------------------------------------------------------------------*/
#define defaultNaNF128UI96 0xFFFF8000
#define defaultNaNF128UI64 0
#define defaultNaNF128UI32 0
#define defaultNaNF128UI0 0
/*----------------------------------------------------------------------------
| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN,
| converts this NaN to the common NaN form, and stores the resulting common
| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN,
| the invalid exception is raised. Argument 'aWPtr' points to an array of
| four 32-bit elements that concatenate in the platform's normal endian order
| to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/
void
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr );
/*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument
| 'zWPtr' points to an array of four 32-bit elements that concatenate in the
| platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/
void
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr );
/*----------------------------------------------------------------------------
| Assuming at least one of the two 128-bit floating-point values pointed to by
| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location
| pointed to by 'zWPtr'. If either original floating-point value is a
| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr',
| and 'zWPtr' points to an array of four 32-bit elements that concatenate in
| the platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/
void
softfloat_propagateNaNF128M(
const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr );
#endif
#endif

View File

@ -1,57 +1,57 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) bool extF80M_isSignalingNaN( const extFloat80_t *aPtr )
{ {
const struct extFloat80M *aSPtr; const struct extFloat80M *aSPtr;
uint64_t uiA0; uint64_t uiA0;
aSPtr = (const struct extFloat80M *) aPtr; aSPtr = (const struct extFloat80M *) aPtr;
if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false;
uiA0 = aSPtr->signif; uiA0 = aSPtr->signif;
return return
! (uiA0 & UINT64_C( 0x4000000000000000 )) ! (uiA0 & UINT64_C( 0x4000000000000000 ))
&& (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF));
} }

View File

@ -1,60 +1,60 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
bool f128M_isSignalingNaN( const float128_t *aPtr ) bool f128M_isSignalingNaN( const float128_t *aPtr )
{ {
const uint32_t *aWPtr; const uint32_t *aWPtr;
uint32_t uiA96; uint32_t uiA96;
aWPtr = (const uint32_t *) aPtr; aWPtr = (const uint32_t *) aPtr;
uiA96 = aWPtr[indexWordHi( 4 )]; uiA96 = aWPtr[indexWordHi( 4 )];
if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false;
return return
((uiA96 & 0x00007FFF) != 0) ((uiA96 & 0x00007FFF) != 0)
|| ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )]
| aWPtr[indexWord( 4, 0 )]) | aWPtr[indexWord( 4, 0 )])
!= 0); != 0);
} }

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into an 80-bit extended | Converts the common NaN pointed to by `aPtr' into an 80-bit extended
| floating-point NaN, and stores this NaN at the location pointed to by | floating-point NaN, and stores this NaN at the location pointed to by
| `zSPtr'. | `zSPtr'.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_commonNaNToExtF80M( softfloat_commonNaNToExtF80M(
const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) const struct commonNaN *aPtr, struct extFloat80M *zSPtr )
{ {
zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF ); zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF );
zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1;
} }

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into an 80-bit extended | Converts the common NaN pointed to by `aPtr' into an 80-bit extended
| floating-point NaN, and returns the bit pattern of this value as an unsigned | floating-point NaN, and returns the bit pattern of this value as an unsigned
| integer. | integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr )
{ {
struct uint128 uiZ; struct uint128 uiZ;
uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF; uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF;
uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1;
return uiZ; return uiZ;
} }

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point
| NaN, and stores this NaN at the location pointed to by `zWPtr'. Argument | NaN, and stores this NaN at the location pointed to by `zWPtr'. Argument
| `zWPtr' points to an array of four 32-bit elements that concatenate in the | `zWPtr' points to an array of four 32-bit elements that concatenate in the
| platform's normal endian order to form a 128-bit floating-point value. | platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr )
{ {
softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr ); softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr );
zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000; zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000;
} }

View File

@ -1,55 +1,55 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr )
{ {
struct uint128 uiZ; struct uint128 uiZ;
uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 ); uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 );
uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 ); uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 );
return uiZ; return uiZ;
} }

View File

@ -1,51 +1,51 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 16-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 16-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ) uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr )
{ {
return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54; return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54;
} }

View File

@ -1,51 +1,51 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 32-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 32-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ) uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr )
{ {
return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41; return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41;
} }

View File

@ -1,53 +1,53 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by `aPtr' into a 64-bit floating-point | Converts the common NaN pointed to by `aPtr' into a 64-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ) uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr )
{ {
return return
(uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 ) (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 )
| aPtr->v64>>12; | aPtr->v64>>12;
} }

View File

@ -1,62 +1,62 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the 80-bit extended floating-point value pointed to by `aSPtr' is | Assuming the 80-bit extended floating-point value pointed to by `aSPtr' is
| a NaN, converts this NaN to the common NaN form, and stores the resulting | a NaN, converts this NaN to the common NaN form, and stores the resulting
| common NaN at the location pointed to by `zPtr'. If the NaN is a signaling | common NaN at the location pointed to by `zPtr'. If the NaN is a signaling
| NaN, the invalid exception is raised. | NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_extF80MToCommonNaN( softfloat_extF80MToCommonNaN(
const struct extFloat80M *aSPtr, struct commonNaN *zPtr ) const struct extFloat80M *aSPtr, struct commonNaN *zPtr )
{ {
if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) { if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = signExtF80UI64( aSPtr->signExp ); zPtr->sign = signExtF80UI64( aSPtr->signExp );
zPtr->v64 = aSPtr->signif<<1; zPtr->v64 = aSPtr->signif<<1;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,62 +1,62 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' | Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0'
| has the bit pattern of an 80-bit extended floating-point NaN, converts | has the bit pattern of an 80-bit extended floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_extF80UIToCommonNaN( softfloat_extF80UIToCommonNaN(
uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) { if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA64>>15; zPtr->sign = uiA64>>15;
zPtr->v64 = uiA0<<1; zPtr->v64 = uiA0<<1;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,62 +1,62 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the 128-bit floating-point value pointed to by `aWPtr' is a NaN, | Assuming the 128-bit floating-point value pointed to by `aWPtr' is a NaN,
| converts this NaN to the common NaN form, and stores the resulting common | converts this NaN to the common NaN form, and stores the resulting common
| NaN at the location pointed to by `zPtr'. If the NaN is a signaling NaN, | NaN at the location pointed to by `zPtr'. If the NaN is a signaling NaN,
| the invalid exception is raised. Argument `aWPtr' points to an array of | the invalid exception is raised. Argument `aWPtr' points to an array of
| four 32-bit elements that concatenate in the platform's normal endian order | four 32-bit elements that concatenate in the platform's normal endian order
| to form a 128-bit floating-point value. | to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ) softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr )
{ {
if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) { if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = aWPtr[indexWordHi( 4 )]>>31; zPtr->sign = aWPtr[indexWordHi( 4 )]>>31;
softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 ); softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 );
} }

View File

@ -1,65 +1,65 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' | Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0'
| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to | has the bit pattern of a 128-bit floating-point NaN, converts this NaN to
| the common NaN form, and stores the resulting common NaN at the location | the common NaN form, and stores the resulting common NaN at the location
| pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid exception | pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid exception
| is raised. | is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_f128UIToCommonNaN( softfloat_f128UIToCommonNaN(
uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr )
{ {
struct uint128 NaNSig; struct uint128 NaNSig;
if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) { if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 ); NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 );
zPtr->sign = uiA64>>63; zPtr->sign = uiA64>>63;
zPtr->v64 = NaNSig.v64; zPtr->v64 = NaNSig.v64;
zPtr->v0 = NaNSig.v0; zPtr->v0 = NaNSig.v0;
} }

View File

@ -1,59 +1,59 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming `uiA' has the bit pattern of a 16-bit floating-point NaN, converts | Assuming `uiA' has the bit pattern of a 16-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ) void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNF16UI( uiA ) ) { if ( softfloat_isSigNaNF16UI( uiA ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA>>15; zPtr->sign = uiA>>15;
zPtr->v64 = (uint_fast64_t) uiA<<54; zPtr->v64 = (uint_fast64_t) uiA<<54;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,59 +1,59 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming `uiA' has the bit pattern of a 32-bit floating-point NaN, converts | Assuming `uiA' has the bit pattern of a 32-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ) void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNF32UI( uiA ) ) { if ( softfloat_isSigNaNF32UI( uiA ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA>>31; zPtr->sign = uiA>>31;
zPtr->v64 = (uint_fast64_t) uiA<<41; zPtr->v64 = (uint_fast64_t) uiA<<41;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,59 +1,59 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming `uiA' has the bit pattern of a 64-bit floating-point NaN, converts | Assuming `uiA' has the bit pattern of a 64-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ) void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr )
{ {
if ( softfloat_isSigNaNF64UI( uiA ) ) { if ( softfloat_isSigNaNF64UI( uiA ) ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zPtr->sign = uiA>>63; zPtr->sign = uiA>>63;
zPtr->v64 = uiA<<12; zPtr->v64 = uiA<<12;
zPtr->v0 = 0; zPtr->v0 = 0;
} }

View File

@ -1,107 +1,107 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming at least one of the two 80-bit extended floating-point values | Assuming at least one of the two 80-bit extended floating-point values
| pointed to by `aSPtr' and `bSPtr' is a NaN, stores the combined NaN result | pointed to by `aSPtr' and `bSPtr' is a NaN, stores the combined NaN result
| at the location pointed to by `zSPtr'. If either original floating-point | at the location pointed to by `zSPtr'. If either original floating-point
| value is a signaling NaN, the invalid exception is raised. | value is a signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_propagateNaNExtF80M( softfloat_propagateNaNExtF80M(
const struct extFloat80M *aSPtr, const struct extFloat80M *aSPtr,
const struct extFloat80M *bSPtr, const struct extFloat80M *bSPtr,
struct extFloat80M *zSPtr struct extFloat80M *zSPtr
) )
{ {
bool isSigNaNA; bool isSigNaNA;
const struct extFloat80M *sPtr; const struct extFloat80M *sPtr;
bool isSigNaNB; bool isSigNaNB;
uint_fast16_t uiB64; uint_fast16_t uiB64;
uint64_t uiB0; uint64_t uiB0;
uint_fast16_t uiA64; uint_fast16_t uiA64;
uint64_t uiA0; uint64_t uiA0;
uint_fast16_t uiMagA64, uiMagB64; uint_fast16_t uiMagA64, uiMagB64;
isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ); isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr );
sPtr = aSPtr; sPtr = aSPtr;
if ( ! bSPtr ) { if ( ! bSPtr ) {
if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid );
goto copy; goto copy;
} }
isSigNaNB = extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr ); isSigNaNB = extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr );
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
uiB64 = bSPtr->signExp; uiB64 = bSPtr->signExp;
if ( isSigNaNB ) goto returnLargerUIMag; if ( isSigNaNB ) goto returnLargerUIMag;
uiB0 = bSPtr->signif; uiB0 = bSPtr->signif;
if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto copyB; if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto copyB;
goto copy; goto copy;
} else { } else {
uiA64 = aSPtr->signExp; uiA64 = aSPtr->signExp;
uiA0 = aSPtr->signif; uiA0 = aSPtr->signif;
if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto copy; if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto copy;
goto copyB; goto copyB;
} }
} }
uiB64 = bSPtr->signExp; uiB64 = bSPtr->signExp;
returnLargerUIMag: returnLargerUIMag:
uiA64 = aSPtr->signExp; uiA64 = aSPtr->signExp;
uiMagA64 = uiA64 & 0x7FFF; uiMagA64 = uiA64 & 0x7FFF;
uiMagB64 = uiB64 & 0x7FFF; uiMagB64 = uiB64 & 0x7FFF;
if ( uiMagA64 < uiMagB64 ) goto copyB; if ( uiMagA64 < uiMagB64 ) goto copyB;
if ( uiMagB64 < uiMagA64 ) goto copy; if ( uiMagB64 < uiMagA64 ) goto copy;
uiA0 = aSPtr->signif; uiA0 = aSPtr->signif;
uiB0 = bSPtr->signif; uiB0 = bSPtr->signif;
if ( uiA0 < uiB0 ) goto copyB; if ( uiA0 < uiB0 ) goto copyB;
if ( uiB0 < uiA0 ) goto copy; if ( uiB0 < uiA0 ) goto copy;
if ( uiA64 < uiB64 ) goto copy; if ( uiA64 < uiB64 ) goto copy;
copyB: copyB:
sPtr = bSPtr; sPtr = bSPtr;
copy: copy:
zSPtr->signExp = sPtr->signExp; zSPtr->signExp = sPtr->signExp;
zSPtr->signif = sPtr->signif | UINT64_C( 0xC000000000000000 ); zSPtr->signif = sPtr->signif | UINT64_C( 0xC000000000000000 );
} }

View File

@ -1,106 +1,106 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and | Interpreting the unsigned integer formed from concatenating 'uiA64' and
| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting | 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| 80-bit extended floating-point value, and assuming at least on of these | 80-bit extended floating-point value, and assuming at least on of these
| floating-point values is a NaN, returns the bit pattern of the combined NaN | floating-point values is a NaN, returns the bit pattern of the combined NaN
| result. If either original floating-point value is a signaling NaN, the | result. If either original floating-point value is a signaling NaN, the
| invalid exception is raised. | invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 struct uint128
softfloat_propagateNaNExtF80UI( softfloat_propagateNaNExtF80UI(
uint_fast16_t uiA64, uint_fast16_t uiA64,
uint_fast64_t uiA0, uint_fast64_t uiA0,
uint_fast16_t uiB64, uint_fast16_t uiB64,
uint_fast64_t uiB0 uint_fast64_t uiB0
) )
{ {
bool isSigNaNA, isSigNaNB; bool isSigNaNA, isSigNaNB;
uint_fast64_t uiNonsigA0, uiNonsigB0; uint_fast64_t uiNonsigA0, uiNonsigB0;
uint_fast16_t uiMagA64, uiMagB64; uint_fast16_t uiMagA64, uiMagB64;
struct uint128 uiZ; struct uint128 uiZ;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 ); isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 );
isSigNaNB = softfloat_isSigNaNExtF80UI( uiB64, uiB0 ); isSigNaNB = softfloat_isSigNaNExtF80UI( uiB64, uiB0 );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
| Make NaNs non-signaling. | Make NaNs non-signaling.
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
uiNonsigA0 = uiA0 | UINT64_C( 0xC000000000000000 ); uiNonsigA0 = uiA0 | UINT64_C( 0xC000000000000000 );
uiNonsigB0 = uiB0 | UINT64_C( 0xC000000000000000 ); uiNonsigB0 = uiB0 | UINT64_C( 0xC000000000000000 );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
if ( isSigNaNB ) goto returnLargerMag; if ( isSigNaNB ) goto returnLargerMag;
if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto returnB; if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto returnB;
goto returnA; goto returnA;
} else { } else {
if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto returnA; if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto returnA;
goto returnB; goto returnB;
} }
} }
returnLargerMag: returnLargerMag:
uiMagA64 = uiA64 & 0x7FFF; uiMagA64 = uiA64 & 0x7FFF;
uiMagB64 = uiB64 & 0x7FFF; uiMagB64 = uiB64 & 0x7FFF;
if ( uiMagA64 < uiMagB64 ) goto returnB; if ( uiMagA64 < uiMagB64 ) goto returnB;
if ( uiMagB64 < uiMagA64 ) goto returnA; if ( uiMagB64 < uiMagA64 ) goto returnA;
if ( uiA0 < uiB0 ) goto returnB; if ( uiA0 < uiB0 ) goto returnB;
if ( uiB0 < uiA0 ) goto returnA; if ( uiB0 < uiA0 ) goto returnA;
if ( uiA64 < uiB64 ) goto returnA; if ( uiA64 < uiB64 ) goto returnA;
returnB: returnB:
uiZ.v64 = uiB64; uiZ.v64 = uiB64;
uiZ.v0 = uiNonsigB0; uiZ.v0 = uiNonsigB0;
return uiZ; return uiZ;
returnA: returnA:
uiZ.v64 = uiA64; uiZ.v64 = uiA64;
uiZ.v0 = uiNonsigA0; uiZ.v0 = uiNonsigA0;
return uiZ; return uiZ;
} }

View File

@ -1,108 +1,108 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming at least one of the two 128-bit floating-point values pointed to by | Assuming at least one of the two 128-bit floating-point values pointed to by
| `aWPtr' and `bWPtr' is a NaN, stores the combined NaN result at the location | `aWPtr' and `bWPtr' is a NaN, stores the combined NaN result at the location
| pointed to by `zWPtr'. If either original floating-point value is a | pointed to by `zWPtr'. If either original floating-point value is a
| signaling NaN, the invalid exception is raised. Each of `aWPtr', `bWPtr', | signaling NaN, the invalid exception is raised. Each of `aWPtr', `bWPtr',
| and `zWPtr' points to an array of four 32-bit elements that concatenate in | and `zWPtr' points to an array of four 32-bit elements that concatenate in
| the platform's normal endian order to form a 128-bit floating-point value. | the platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_propagateNaNF128M( softfloat_propagateNaNF128M(
const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr )
{ {
bool isSigNaNA; bool isSigNaNA;
const uint32_t *ptr; const uint32_t *ptr;
bool isSigNaNB; bool isSigNaNB;
uint32_t uiA96, uiB96, wordMagA, wordMagB; uint32_t uiA96, uiB96, wordMagA, wordMagB;
isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr );
ptr = aWPtr; ptr = aWPtr;
if ( ! bWPtr ) { if ( ! bWPtr ) {
if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid );
goto copy; goto copy;
} }
isSigNaNB = f128M_isSignalingNaN( (const float128_t *) bWPtr ); isSigNaNB = f128M_isSignalingNaN( (const float128_t *) bWPtr );
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
if ( isSigNaNB ) goto returnLargerUIMag; if ( isSigNaNB ) goto returnLargerUIMag;
if ( softfloat_isNaNF128M( bWPtr ) ) goto copyB; if ( softfloat_isNaNF128M( bWPtr ) ) goto copyB;
goto copy; goto copy;
} else { } else {
if ( softfloat_isNaNF128M( aWPtr ) ) goto copy; if ( softfloat_isNaNF128M( aWPtr ) ) goto copy;
goto copyB; goto copyB;
} }
} }
returnLargerUIMag: returnLargerUIMag:
uiA96 = aWPtr[indexWordHi( 4 )]; uiA96 = aWPtr[indexWordHi( 4 )];
uiB96 = bWPtr[indexWordHi( 4 )]; uiB96 = bWPtr[indexWordHi( 4 )];
wordMagA = uiA96 & 0x7FFFFFFF; wordMagA = uiA96 & 0x7FFFFFFF;
wordMagB = uiB96 & 0x7FFFFFFF; wordMagB = uiB96 & 0x7FFFFFFF;
if ( wordMagA < wordMagB ) goto copyB; if ( wordMagA < wordMagB ) goto copyB;
if ( wordMagB < wordMagA ) goto copy; if ( wordMagB < wordMagA ) goto copy;
wordMagA = aWPtr[indexWord( 4, 2 )]; wordMagA = aWPtr[indexWord( 4, 2 )];
wordMagB = bWPtr[indexWord( 4, 2 )]; wordMagB = bWPtr[indexWord( 4, 2 )];
if ( wordMagA < wordMagB ) goto copyB; if ( wordMagA < wordMagB ) goto copyB;
if ( wordMagB < wordMagA ) goto copy; if ( wordMagB < wordMagA ) goto copy;
wordMagA = aWPtr[indexWord( 4, 1 )]; wordMagA = aWPtr[indexWord( 4, 1 )];
wordMagB = bWPtr[indexWord( 4, 1 )]; wordMagB = bWPtr[indexWord( 4, 1 )];
if ( wordMagA < wordMagB ) goto copyB; if ( wordMagA < wordMagB ) goto copyB;
if ( wordMagB < wordMagA ) goto copy; if ( wordMagB < wordMagA ) goto copy;
wordMagA = aWPtr[indexWord( 4, 0 )]; wordMagA = aWPtr[indexWord( 4, 0 )];
wordMagB = bWPtr[indexWord( 4, 0 )]; wordMagB = bWPtr[indexWord( 4, 0 )];
if ( wordMagA < wordMagB ) goto copyB; if ( wordMagA < wordMagB ) goto copyB;
if ( wordMagB < wordMagA ) goto copy; if ( wordMagB < wordMagA ) goto copy;
if ( uiA96 < uiB96 ) goto copy; if ( uiA96 < uiB96 ) goto copy;
copyB: copyB:
ptr = bWPtr; ptr = bWPtr;
copy: copy:
zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000; zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000;
zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )]; zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )];
zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )]; zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )];
zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )]; zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )];
} }

View File

@ -1,105 +1,105 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and | Interpreting the unsigned integer formed from concatenating 'uiA64' and
| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the | 'uiA0' as a 128-bit floating-point value, and likewise interpreting the
| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| 128-bit floating-point value, and assuming at least on of these floating- | 128-bit floating-point value, and assuming at least on of these floating-
| point values is a NaN, returns the bit pattern of the combined NaN result. | point values is a NaN, returns the bit pattern of the combined NaN result.
| If either original floating-point value is a signaling NaN, the invalid | If either original floating-point value is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 struct uint128
softfloat_propagateNaNF128UI( softfloat_propagateNaNF128UI(
uint_fast64_t uiA64, uint_fast64_t uiA64,
uint_fast64_t uiA0, uint_fast64_t uiA0,
uint_fast64_t uiB64, uint_fast64_t uiB64,
uint_fast64_t uiB0 uint_fast64_t uiB0
) )
{ {
bool isSigNaNA, isSigNaNB; bool isSigNaNA, isSigNaNB;
uint_fast64_t uiNonsigA64, uiNonsigB64, uiMagA64, uiMagB64; uint_fast64_t uiNonsigA64, uiNonsigB64, uiMagA64, uiMagB64;
struct uint128 uiZ; struct uint128 uiZ;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 );
isSigNaNB = softfloat_isSigNaNF128UI( uiB64, uiB0 ); isSigNaNB = softfloat_isSigNaNF128UI( uiB64, uiB0 );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
| Make NaNs non-signaling. | Make NaNs non-signaling.
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
uiNonsigA64 = uiA64 | UINT64_C( 0x0000800000000000 ); uiNonsigA64 = uiA64 | UINT64_C( 0x0000800000000000 );
uiNonsigB64 = uiB64 | UINT64_C( 0x0000800000000000 ); uiNonsigB64 = uiB64 | UINT64_C( 0x0000800000000000 );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
if ( isSigNaNB ) goto returnLargerMag; if ( isSigNaNB ) goto returnLargerMag;
if ( isNaNF128UI( uiB64, uiB0 ) ) goto returnB; if ( isNaNF128UI( uiB64, uiB0 ) ) goto returnB;
goto returnA; goto returnA;
} else { } else {
if ( isNaNF128UI( uiA64, uiA0 ) ) goto returnA; if ( isNaNF128UI( uiA64, uiA0 ) ) goto returnA;
goto returnB; goto returnB;
} }
} }
returnLargerMag: returnLargerMag:
uiMagA64 = uiA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); uiMagA64 = uiA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF );
uiMagB64 = uiB64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); uiMagB64 = uiB64 & UINT64_C( 0x7FFFFFFFFFFFFFFF );
if ( uiMagA64 < uiMagB64 ) goto returnB; if ( uiMagA64 < uiMagB64 ) goto returnB;
if ( uiMagB64 < uiMagA64 ) goto returnA; if ( uiMagB64 < uiMagA64 ) goto returnA;
if ( uiA0 < uiB0 ) goto returnB; if ( uiA0 < uiB0 ) goto returnB;
if ( uiB0 < uiA0 ) goto returnA; if ( uiB0 < uiA0 ) goto returnA;
if ( uiNonsigA64 < uiNonsigB64 ) goto returnA; if ( uiNonsigA64 < uiNonsigB64 ) goto returnA;
returnB: returnB:
uiZ.v64 = uiNonsigB64; uiZ.v64 = uiNonsigB64;
uiZ.v0 = uiB0; uiZ.v0 = uiB0;
return uiZ; return uiZ;
returnA: returnA:
uiZ.v64 = uiNonsigA64; uiZ.v64 = uiNonsigA64;
uiZ.v0 = uiA0; uiZ.v0 = uiA0;
return uiZ; return uiZ;
} }

View File

@ -1,84 +1,84 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- | Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t uint_fast16_t
softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ) softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB )
{ {
bool isSigNaNA, isSigNaNB; bool isSigNaNA, isSigNaNB;
uint_fast16_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; uint_fast16_t uiNonsigA, uiNonsigB, uiMagA, uiMagB;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
isSigNaNA = softfloat_isSigNaNF16UI( uiA ); isSigNaNA = softfloat_isSigNaNF16UI( uiA );
isSigNaNB = softfloat_isSigNaNF16UI( uiB ); isSigNaNB = softfloat_isSigNaNF16UI( uiB );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
| Make NaNs non-signaling. | Make NaNs non-signaling.
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
uiNonsigA = uiA | 0x0200; uiNonsigA = uiA | 0x0200;
uiNonsigB = uiB | 0x0200; uiNonsigB = uiB | 0x0200;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
if ( isSigNaNB ) goto returnLargerMag; if ( isSigNaNB ) goto returnLargerMag;
return isNaNF16UI( uiB ) ? uiNonsigB : uiNonsigA; return isNaNF16UI( uiB ) ? uiNonsigB : uiNonsigA;
} else { } else {
return isNaNF16UI( uiA ) ? uiNonsigA : uiNonsigB; return isNaNF16UI( uiA ) ? uiNonsigA : uiNonsigB;
} }
} }
returnLargerMag: returnLargerMag:
uiMagA = uiA & 0x7FFF; uiMagA = uiA & 0x7FFF;
uiMagB = uiB & 0x7FFF; uiMagB = uiB & 0x7FFF;
if ( uiMagA < uiMagB ) return uiNonsigB; if ( uiMagA < uiMagB ) return uiNonsigB;
if ( uiMagB < uiMagA ) return uiNonsigA; if ( uiMagB < uiMagA ) return uiNonsigA;
return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB;
} }

View File

@ -1,84 +1,84 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- | Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast32_t uint_fast32_t
softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ) softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB )
{ {
bool isSigNaNA, isSigNaNB; bool isSigNaNA, isSigNaNB;
uint_fast32_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; uint_fast32_t uiNonsigA, uiNonsigB, uiMagA, uiMagB;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
isSigNaNA = softfloat_isSigNaNF32UI( uiA ); isSigNaNA = softfloat_isSigNaNF32UI( uiA );
isSigNaNB = softfloat_isSigNaNF32UI( uiB ); isSigNaNB = softfloat_isSigNaNF32UI( uiB );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
| Make NaNs non-signaling. | Make NaNs non-signaling.
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
uiNonsigA = uiA | 0x00400000; uiNonsigA = uiA | 0x00400000;
uiNonsigB = uiB | 0x00400000; uiNonsigB = uiB | 0x00400000;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
if ( isSigNaNB ) goto returnLargerMag; if ( isSigNaNB ) goto returnLargerMag;
return isNaNF32UI( uiB ) ? uiNonsigB : uiNonsigA; return isNaNF32UI( uiB ) ? uiNonsigB : uiNonsigA;
} else { } else {
return isNaNF32UI( uiA ) ? uiNonsigA : uiNonsigB; return isNaNF32UI( uiA ) ? uiNonsigA : uiNonsigB;
} }
} }
returnLargerMag: returnLargerMag:
uiMagA = uiA & 0x7FFFFFFF; uiMagA = uiA & 0x7FFFFFFF;
uiMagB = uiB & 0x7FFFFFFF; uiMagB = uiB & 0x7FFFFFFF;
if ( uiMagA < uiMagB ) return uiNonsigB; if ( uiMagA < uiMagB ) return uiNonsigB;
if ( uiMagB < uiMagA ) return uiNonsigA; if ( uiMagB < uiMagA ) return uiNonsigA;
return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB;
} }

View File

@ -1,84 +1,84 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "internals.h" #include "internals.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- | Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast64_t uint_fast64_t
softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ) softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB )
{ {
bool isSigNaNA, isSigNaNB; bool isSigNaNA, isSigNaNB;
uint_fast64_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; uint_fast64_t uiNonsigA, uiNonsigB, uiMagA, uiMagB;
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
isSigNaNA = softfloat_isSigNaNF64UI( uiA ); isSigNaNA = softfloat_isSigNaNF64UI( uiA );
isSigNaNB = softfloat_isSigNaNF64UI( uiB ); isSigNaNB = softfloat_isSigNaNF64UI( uiB );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
| Make NaNs non-signaling. | Make NaNs non-signaling.
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
uiNonsigA = uiA | UINT64_C( 0x0008000000000000 ); uiNonsigA = uiA | UINT64_C( 0x0008000000000000 );
uiNonsigB = uiB | UINT64_C( 0x0008000000000000 ); uiNonsigB = uiB | UINT64_C( 0x0008000000000000 );
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
*------------------------------------------------------------------------*/ *------------------------------------------------------------------------*/
if ( isSigNaNA | isSigNaNB ) { if ( isSigNaNA | isSigNaNB ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
if ( isSigNaNA ) { if ( isSigNaNA ) {
if ( isSigNaNB ) goto returnLargerMag; if ( isSigNaNB ) goto returnLargerMag;
return isNaNF64UI( uiB ) ? uiNonsigB : uiNonsigA; return isNaNF64UI( uiB ) ? uiNonsigB : uiNonsigA;
} else { } else {
return isNaNF64UI( uiA ) ? uiNonsigA : uiNonsigB; return isNaNF64UI( uiA ) ? uiNonsigA : uiNonsigB;
} }
} }
returnLargerMag: returnLargerMag:
uiMagA = uiA & UINT64_C( 0x7FFFFFFFFFFFFFFF ); uiMagA = uiA & UINT64_C( 0x7FFFFFFFFFFFFFFF );
uiMagB = uiB & UINT64_C( 0x7FFFFFFFFFFFFFFF ); uiMagB = uiB & UINT64_C( 0x7FFFFFFFFFFFFFFF );
if ( uiMagA < uiMagB ) return uiNonsigB; if ( uiMagA < uiMagB ) return uiNonsigB;
if ( uiMagB < uiMagA ) return uiNonsigA; if ( uiMagB < uiMagA ) return uiNonsigA;
return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB;
} }

View File

@ -1,52 +1,52 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include "platform.h" #include "platform.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Raises the exceptions specified by `flags'. Floating-point traps can be | Raises the exceptions specified by `flags'. Floating-point traps can be
| defined here if desired. It is currently not possible for such a trap | defined here if desired. It is currently not possible for such a trap
| to substitute a result value. If traps are not implemented, this routine | to substitute a result value. If traps are not implemented, this routine
| should be simply `softfloat_exceptionFlags |= flags;'. | should be simply `softfloat_exceptionFlags |= flags;'.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_raiseFlags( uint_fast8_t flags ) void softfloat_raiseFlags( uint_fast8_t flags )
{ {
softfloat_exceptionFlags |= flags; softfloat_exceptionFlags |= flags;
} }

View File

@ -1,346 +1,376 @@
/*============================================================================ /*============================================================================
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the
University of California. All rights reserved. University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#ifndef specialize_h #ifndef specialize_h
#define specialize_h 1 #define specialize_h 1
#include "primitiveTypes.h" #include <stdbool.h>
#include "softfloat.h" #include <stdint.h>
#include <stdbool.h> #include "primitiveTypes.h"
#include <stdint.h> #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Default value for 'softfloat_detectTininess'. | Default value for 'softfloat_detectTininess'.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define init_detectTininess softfloat_tininess_afterRounding #define init_detectTininess softfloat_tininess_afterRounding
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The values to return on conversions to 32-bit integer formats that raise an | The values to return on conversions to 32-bit integer formats that raise an
| invalid exception. | invalid exception.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define ui32_fromPosOverflow 0xFFFFFFFF #define ui32_fromPosOverflow 0xFFFFFFFF
#define ui32_fromNegOverflow 0xFFFFFFFF #define ui32_fromNegOverflow 0xFFFFFFFF
#define ui32_fromNaN 0xFFFFFFFF #define ui32_fromNaN 0xFFFFFFFF
#define i32_fromPosOverflow (-0x7FFFFFFF - 1) #define i32_fromPosOverflow (-0x7FFFFFFF - 1)
#define i32_fromNegOverflow (-0x7FFFFFFF - 1) #define i32_fromNegOverflow (-0x7FFFFFFF - 1)
#define i32_fromNaN (-0x7FFFFFFF - 1) #define i32_fromNaN (-0x7FFFFFFF - 1)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The values to return on conversions to 64-bit integer formats that raise an | The values to return on conversions to 64-bit integer formats that raise an
| invalid exception. | invalid exception.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define ui64_fromPosOverflow UINT64_C(0xFFFFFFFFFFFFFFFF) #define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF )
#define ui64_fromNegOverflow UINT64_C(0xFFFFFFFFFFFFFFFF) #define ui64_fromNegOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF )
#define ui64_fromNaN UINT64_C(0xFFFFFFFFFFFFFFFF) #define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF )
#define i64_fromPosOverflow (-INT64_C(0x7FFFFFFFFFFFFFFF) - 1) #define i64_fromPosOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
#define i64_fromNegOverflow (-INT64_C(0x7FFFFFFFFFFFFFFF) - 1) #define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
#define i64_fromNaN (-INT64_C(0x7FFFFFFFFFFFFFFF) - 1) #define i64_fromNaN (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| "Common NaN" structure, used to transfer NaN representations from one format | "Common NaN" structure, used to transfer NaN representations from one format
| to another. | to another.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct commonNaN { struct commonNaN {
bool sign; bool sign;
#ifdef LITTLEENDIAN #ifdef LITTLEENDIAN
uint64_t v0, v64; uint64_t v0, v64;
#else #else
uint64_t v64, v0; uint64_t v64, v0;
#endif #endif
}; };
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| The bit pattern for a default generated 16-bit floating-point NaN. | The bit pattern for a default generated 16-bit floating-point NaN.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define defaultNaNF16UI 0xFE00 #define defaultNaNF16UI 0xFE00
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a | Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a
| 16-bit floating-point signaling NaN. | 16-bit floating-point signaling NaN.
| Note: This macro evaluates its argument more than once. | Note: This macro evaluates its argument more than once.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNF16UI(uiA) ((((uiA)&0x7E00) == 0x7C00) && ((uiA)&0x01FF)) #define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF))
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts | Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts
| this NaN to the common NaN form, and stores the resulting common NaN at the | this NaN to the common NaN form, and stores the resulting common NaN at the
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid | location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
| exception is raised. | exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void softfloat_f16UIToCommonNaN(uint_fast16_t uiA, struct commonNaN* zPtr); void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr );
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point | Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t softfloat_commonNaNToF16UI(const struct commonNaN* aPtr); uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr );
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- | Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating-
| point values, at least one of which is a NaN, returns the bit pattern of | point values, at least one of which is a NaN, returns the bit pattern of
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
| signaling NaN, the invalid exception is raised. | signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
uint_fast16_t softfloat_propagateNaNF16UI(uint_fast16_t uiA, uint_fast16_t uiB); uint_fast16_t
softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB );
/*----------------------------------------------------------------------------
| The bit pattern for a default generated 32-bit floating-point NaN. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | The bit pattern for a default generated 32-bit floating-point NaN.
#define defaultNaNF32UI 0xFFC00000 *----------------------------------------------------------------------------*/
#define defaultNaNF32UI 0xFFC00000
/*----------------------------------------------------------------------------
| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a /*----------------------------------------------------------------------------
| 32-bit floating-point signaling NaN. | Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a
| Note: This macro evaluates its argument more than once. | 32-bit floating-point signaling NaN.
*----------------------------------------------------------------------------*/ | Note: This macro evaluates its argument more than once.
#define softfloat_isSigNaNF32UI(uiA) ((((uiA)&0x7FC00000) == 0x7F800000) && ((uiA)&0x003FFFFF)) *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF))
/*----------------------------------------------------------------------------
| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts /*----------------------------------------------------------------------------
| this NaN to the common NaN form, and stores the resulting common NaN at the | Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid | this NaN to the common NaN form, and stores the resulting common NaN at the
| exception is raised. | location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
*----------------------------------------------------------------------------*/ | exception is raised.
void softfloat_f32UIToCommonNaN(uint_fast32_t uiA, struct commonNaN* zPtr); *----------------------------------------------------------------------------*/
void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr );
/*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point /*----------------------------------------------------------------------------
| NaN, and returns the bit pattern of this value as an unsigned integer. | Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point
*----------------------------------------------------------------------------*/ | NaN, and returns the bit pattern of this value as an unsigned integer.
uint_fast32_t softfloat_commonNaNToF32UI(const struct commonNaN* aPtr); *----------------------------------------------------------------------------*/
uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr );
/*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- /*----------------------------------------------------------------------------
| point values, at least one of which is a NaN, returns the bit pattern of | Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating-
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | point values, at least one of which is a NaN, returns the bit pattern of
| signaling NaN, the invalid exception is raised. | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
*----------------------------------------------------------------------------*/ | signaling NaN, the invalid exception is raised.
uint_fast32_t softfloat_propagateNaNF32UI(uint_fast32_t uiA, uint_fast32_t uiB); *----------------------------------------------------------------------------*/
uint_fast32_t
/*---------------------------------------------------------------------------- softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB );
| The bit pattern for a default generated 64-bit floating-point NaN.
*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------
#define defaultNaNF64UI UINT64_C(0xFFF8000000000000) | The bit pattern for a default generated 64-bit floating-point NaN.
*----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------- #define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 )
| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a
| 64-bit floating-point signaling NaN. /*----------------------------------------------------------------------------
| Note: This macro evaluates its argument more than once. | Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a
*----------------------------------------------------------------------------*/ | 64-bit floating-point signaling NaN.
#define softfloat_isSigNaNF64UI(uiA) \ | Note: This macro evaluates its argument more than once.
((((uiA)&UINT64_C(0x7FF8000000000000)) == UINT64_C(0x7FF0000000000000)) && ((uiA)&UINT64_C(0x0007FFFFFFFFFFFF))) *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF )))
/*----------------------------------------------------------------------------
| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts /*----------------------------------------------------------------------------
| this NaN to the common NaN form, and stores the resulting common NaN at the | Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid | this NaN to the common NaN form, and stores the resulting common NaN at the
| exception is raised. | location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
*----------------------------------------------------------------------------*/ | exception is raised.
void softfloat_f64UIToCommonNaN(uint_fast64_t uiA, struct commonNaN* zPtr); *----------------------------------------------------------------------------*/
void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr );
/*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point /*----------------------------------------------------------------------------
| NaN, and returns the bit pattern of this value as an unsigned integer. | Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point
*----------------------------------------------------------------------------*/ | NaN, and returns the bit pattern of this value as an unsigned integer.
uint_fast64_t softfloat_commonNaNToF64UI(const struct commonNaN* aPtr); *----------------------------------------------------------------------------*/
uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr );
/*----------------------------------------------------------------------------
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- /*----------------------------------------------------------------------------
| point values, at least one of which is a NaN, returns the bit pattern of | Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating-
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a | point values, at least one of which is a NaN, returns the bit pattern of
| signaling NaN, the invalid exception is raised. | the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
*----------------------------------------------------------------------------*/ | signaling NaN, the invalid exception is raised.
uint_fast64_t softfloat_propagateNaNF64UI(uint_fast64_t uiA, uint_fast64_t uiB); *----------------------------------------------------------------------------*/
uint_fast64_t
/*---------------------------------------------------------------------------- softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB );
| The bit pattern for a default generated 80-bit extended floating-point NaN.
*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------
#define defaultNaNExtF80UI64 0xFFFF | The bit pattern for a default generated 80-bit extended floating-point NaN.
#define defaultNaNExtF80UI0 UINT64_C(0xC000000000000000) *----------------------------------------------------------------------------*/
#define defaultNaNExtF80UI64 0xFFFF
/*---------------------------------------------------------------------------- #define defaultNaNExtF80UI0 UINT64_C( 0xC000000000000000 )
| Returns true when the 80-bit unsigned integer formed from concatenating
| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended /*----------------------------------------------------------------------------
| floating-point signaling NaN. | Returns true when the 80-bit unsigned integer formed from concatenating
| Note: This macro evaluates its arguments more than once. | 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended
*----------------------------------------------------------------------------*/ | floating-point signaling NaN.
#define softfloat_isSigNaNExtF80UI(uiA64, uiA0) \ | Note: This macro evaluates its arguments more than once.
((((uiA64)&0x7FFF) == 0x7FFF) && !((uiA0)&UINT64_C(0x4000000000000000)) && ((uiA0)&UINT64_C(0x3FFFFFFFFFFFFFFF))) *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF )))
#ifdef SOFTFLOAT_FAST_INT64
#ifdef SOFTFLOAT_FAST_INT64
/*----------------------------------------------------------------------------
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is /*----------------------------------------------------------------------------
| defined. | The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is
*----------------------------------------------------------------------------*/ | defined.
*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' /*----------------------------------------------------------------------------
| has the bit pattern of an 80-bit extended floating-point NaN, converts | Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0'
| this NaN to the common NaN form, and stores the resulting common NaN at the | has the bit pattern of an 80-bit extended floating-point NaN, converts
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid | this NaN to the common NaN form, and stores the resulting common NaN at the
| exception is raised. | location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
*----------------------------------------------------------------------------*/ | exception is raised.
void softfloat_extF80UIToCommonNaN(uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN* zPtr); *----------------------------------------------------------------------------*/
void
/*---------------------------------------------------------------------------- softfloat_extF80UIToCommonNaN(
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
| floating-point NaN, and returns the bit pattern of this value as an unsigned
| integer. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
struct uint128 softfloat_commonNaNToExtF80UI(const struct commonNaN* aPtr); | floating-point NaN, and returns the bit pattern of this value as an unsigned
| integer.
/*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/
| Interpreting the unsigned integer formed from concatenating 'uiA64' and struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr );
| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another /*----------------------------------------------------------------------------
| 80-bit extended floating-point value, and assuming at least on of these | Interpreting the unsigned integer formed from concatenating 'uiA64' and
| floating-point values is a NaN, returns the bit pattern of the combined NaN | 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
| result. If either original floating-point value is a signaling NaN, the | the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| invalid exception is raised. | 80-bit extended floating-point value, and assuming at least on of these
*----------------------------------------------------------------------------*/ | floating-point values is a NaN, returns the bit pattern of the combined NaN
struct uint128 softfloat_propagateNaNExtF80UI(uint_fast16_t uiA64, uint_fast64_t uiA0, uint_fast16_t uiB64, uint_fast64_t uiB0); | result. If either original floating-point value is a signaling NaN, the
| invalid exception is raised.
/*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/
| The bit pattern for a default generated 128-bit floating-point NaN. struct uint128
*----------------------------------------------------------------------------*/ softfloat_propagateNaNExtF80UI(
#define defaultNaNF128UI64 UINT64_C(0xFFFF800000000000) uint_fast16_t uiA64,
#define defaultNaNF128UI0 UINT64_C(0) uint_fast64_t uiA0,
uint_fast16_t uiB64,
/*---------------------------------------------------------------------------- uint_fast64_t uiB0
| Returns true when the 128-bit unsigned integer formed from concatenating );
| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating-
| point signaling NaN. /*----------------------------------------------------------------------------
| Note: This macro evaluates its arguments more than once. | The bit pattern for a default generated 128-bit floating-point NaN.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#define softfloat_isSigNaNF128UI(uiA64, uiA0) \ #define defaultNaNF128UI64 UINT64_C( 0xFFFF800000000000 )
((((uiA64)&UINT64_C(0x7FFF800000000000)) == UINT64_C(0x7FFF000000000000)) && ((uiA0) || ((uiA64)&UINT64_C(0x00007FFFFFFFFFFF)))) #define defaultNaNF128UI0 UINT64_C( 0 )
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' | Returns true when the 128-bit unsigned integer formed from concatenating
| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to | 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating-
| the common NaN form, and stores the resulting common NaN at the location | point signaling NaN.
| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception | Note: This macro evaluates its arguments more than once.
| is raised. *----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/ #define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF ))))
void softfloat_f128UIToCommonNaN(uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN* zPtr);
/*----------------------------------------------------------------------------
/*---------------------------------------------------------------------------- | Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0'
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point | has the bit pattern of a 128-bit floating-point NaN, converts this NaN to
| NaN, and returns the bit pattern of this value as an unsigned integer. | the common NaN form, and stores the resulting common NaN at the location
*----------------------------------------------------------------------------*/ | pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception
struct uint128 softfloat_commonNaNToF128UI(const struct commonNaN*); | is raised.
*----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------- void
| Interpreting the unsigned integer formed from concatenating 'uiA64' and softfloat_f128UIToCommonNaN(
| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| 128-bit floating-point value, and assuming at least on of these floating- /*----------------------------------------------------------------------------
| point values is a NaN, returns the bit pattern of the combined NaN result. | Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
| If either original floating-point value is a signaling NaN, the invalid | NaN, and returns the bit pattern of this value as an unsigned integer.
| exception is raised. *----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/ struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * );
struct uint128 softfloat_propagateNaNF128UI(uint_fast64_t uiA64, uint_fast64_t uiA0, uint_fast64_t uiB64, uint_fast64_t uiB0);
/*----------------------------------------------------------------------------
#else | Interpreting the unsigned integer formed from concatenating 'uiA64' and
| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the
/*---------------------------------------------------------------------------- | unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not | 128-bit floating-point value, and assuming at least on of these floating-
| defined. | point values is a NaN, returns the bit pattern of the combined NaN result.
*----------------------------------------------------------------------------*/ | If either original floating-point value is a signaling NaN, the invalid
| exception is raised.
/*---------------------------------------------------------------------------- *----------------------------------------------------------------------------*/
| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is struct uint128
| a NaN, converts this NaN to the common NaN form, and stores the resulting softfloat_propagateNaNF128UI(
| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling uint_fast64_t uiA64,
| NaN, the invalid exception is raised. uint_fast64_t uiA0,
*----------------------------------------------------------------------------*/ uint_fast64_t uiB64,
void softfloat_extF80MToCommonNaN(const struct extFloat80M* aSPtr, struct commonNaN* zPtr); uint_fast64_t uiB0
);
/*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended #else
| floating-point NaN, and stores this NaN at the location pointed to by
| 'zSPtr'. /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ | The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not
void softfloat_commonNaNToExtF80M(const struct commonNaN* aPtr, struct extFloat80M* zSPtr); | defined.
*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
| Assuming at least one of the two 80-bit extended floating-point values /*----------------------------------------------------------------------------
| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result | Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is
| at the location pointed to by 'zSPtr'. If either original floating-point | a NaN, converts this NaN to the common NaN form, and stores the resulting
| value is a signaling NaN, the invalid exception is raised. | common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling
*----------------------------------------------------------------------------*/ | NaN, the invalid exception is raised.
void softfloat_propagateNaNExtF80M(const struct extFloat80M* aSPtr, const struct extFloat80M* bSPtr, struct extFloat80M* zSPtr); *----------------------------------------------------------------------------*/
void
/*---------------------------------------------------------------------------- softfloat_extF80MToCommonNaN(
| The bit pattern for a default generated 128-bit floating-point NaN. const struct extFloat80M *aSPtr, struct commonNaN *zPtr );
*----------------------------------------------------------------------------*/
#define defaultNaNF128UI96 0xFFFF8000 /*----------------------------------------------------------------------------
#define defaultNaNF128UI64 0 | Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
#define defaultNaNF128UI32 0 | floating-point NaN, and stores this NaN at the location pointed to by
#define defaultNaNF128UI0 0 | 'zSPtr'.
*----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------- void
| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, softfloat_commonNaNToExtF80M(
| converts this NaN to the common NaN form, and stores the resulting common const struct commonNaN *aPtr, struct extFloat80M *zSPtr );
| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN,
| the invalid exception is raised. Argument 'aWPtr' points to an array of /*----------------------------------------------------------------------------
| four 32-bit elements that concatenate in the platform's normal endian order | Assuming at least one of the two 80-bit extended floating-point values
| to form a 128-bit floating-point value. | pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result
*----------------------------------------------------------------------------*/ | at the location pointed to by 'zSPtr'. If either original floating-point
void softfloat_f128MToCommonNaN(const uint32_t* aWPtr, struct commonNaN* zPtr); | value is a signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------- void
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point softfloat_propagateNaNExtF80M(
| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument const struct extFloat80M *aSPtr,
| 'zWPtr' points to an array of four 32-bit elements that concatenate in the const struct extFloat80M *bSPtr,
| platform's normal endian order to form a 128-bit floating-point value. struct extFloat80M *zSPtr
*----------------------------------------------------------------------------*/ );
void softfloat_commonNaNToF128M(const struct commonNaN* aPtr, uint32_t* zWPtr);
/*----------------------------------------------------------------------------
/*---------------------------------------------------------------------------- | The bit pattern for a default generated 128-bit floating-point NaN.
| Assuming at least one of the two 128-bit floating-point values pointed to by *----------------------------------------------------------------------------*/
| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location #define defaultNaNF128UI96 0xFFFF8000
| pointed to by 'zWPtr'. If either original floating-point value is a #define defaultNaNF128UI64 0
| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', #define defaultNaNF128UI32 0
| and 'zWPtr' points to an array of four 32-bit elements that concatenate in #define defaultNaNF128UI0 0
| the platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------
void softfloat_propagateNaNF128M(const uint32_t* aWPtr, const uint32_t* bWPtr, uint32_t* zWPtr); | Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN,
| converts this NaN to the common NaN form, and stores the resulting common
#endif | NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN,
| the invalid exception is raised. Argument 'aWPtr' points to an array of
#endif | four 32-bit elements that concatenate in the platform's normal endian order
| to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/
void
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr );
/*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument
| 'zWPtr' points to an array of four 32-bit elements that concatenate in the
| platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/
void
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr );
/*----------------------------------------------------------------------------
| Assuming at least one of the two 128-bit floating-point values pointed to by
| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location
| pointed to by 'zWPtr'. If either original floating-point value is a
| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr',
| and 'zWPtr' points to an array of four 32-bit elements that concatenate in
| the platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/
void
softfloat_propagateNaNF128M(
const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr );
#endif
#endif

View File

@ -1,57 +1,57 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) bool extF80M_isSignalingNaN( const extFloat80_t *aPtr )
{ {
const struct extFloat80M *aSPtr; const struct extFloat80M *aSPtr;
uint64_t uiA0; uint64_t uiA0;
aSPtr = (const struct extFloat80M *) aPtr; aSPtr = (const struct extFloat80M *) aPtr;
if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false;
uiA0 = aSPtr->signif; uiA0 = aSPtr->signif;
return return
! (uiA0 & UINT64_C( 0x4000000000000000 )) ! (uiA0 & UINT64_C( 0x4000000000000000 ))
&& (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF));
} }

View File

@ -1,60 +1,60 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitives.h" #include "primitives.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
bool f128M_isSignalingNaN( const float128_t *aPtr ) bool f128M_isSignalingNaN( const float128_t *aPtr )
{ {
const uint32_t *aWPtr; const uint32_t *aWPtr;
uint32_t uiA96; uint32_t uiA96;
aWPtr = (const uint32_t *) aPtr; aWPtr = (const uint32_t *) aPtr;
uiA96 = aWPtr[indexWordHi( 4 )]; uiA96 = aWPtr[indexWordHi( 4 )];
if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false;
return return
((uiA96 & 0x00007FFF) != 0) ((uiA96 & 0x00007FFF) != 0)
|| ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )]
| aWPtr[indexWord( 4, 0 )]) | aWPtr[indexWord( 4, 0 )])
!= 0); != 0);
} }

View File

@ -1,57 +1,57 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include "platform.h" #include "platform.h"
#include "softfloat_types.h" #include "softfloat_types.h"
#define softfloat_commonNaNToExtF80M softfloat_commonNaNToExtF80M #define softfloat_commonNaNToExtF80M softfloat_commonNaNToExtF80M
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended | Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
| floating-point NaN, and stores this NaN at the location pointed to by | floating-point NaN, and stores this NaN at the location pointed to by
| 'zSPtr'. | 'zSPtr'.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_commonNaNToExtF80M( softfloat_commonNaNToExtF80M(
const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) const struct commonNaN *aPtr, struct extFloat80M *zSPtr )
{ {
zSPtr->signExp = defaultNaNExtF80UI64; zSPtr->signExp = defaultNaNExtF80UI64;
zSPtr->signif = defaultNaNExtF80UI0; zSPtr->signif = defaultNaNExtF80UI0;
} }

View File

@ -1,57 +1,57 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include "platform.h" #include "platform.h"
#include "primitiveTypes.h" #include "primitiveTypes.h"
#define softfloat_commonNaNToExtF80UI softfloat_commonNaNToExtF80UI #define softfloat_commonNaNToExtF80UI softfloat_commonNaNToExtF80UI
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended | Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
| floating-point NaN, and returns the bit pattern of this value as an unsigned | floating-point NaN, and returns the bit pattern of this value as an unsigned
| integer. | integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr )
{ {
struct uint128 uiZ; struct uint128 uiZ;
uiZ.v64 = defaultNaNExtF80UI64; uiZ.v64 = defaultNaNExtF80UI64;
uiZ.v0 = defaultNaNExtF80UI0; uiZ.v0 = defaultNaNExtF80UI0;
return uiZ; return uiZ;
} }

View File

@ -1,60 +1,60 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitiveTypes.h" #include "primitiveTypes.h"
#define softfloat_commonNaNToF128M softfloat_commonNaNToF128M #define softfloat_commonNaNToF128M softfloat_commonNaNToF128M
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point | Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument | NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument
| 'zWPtr' points to an array of four 32-bit elements that concatenate in the | 'zWPtr' points to an array of four 32-bit elements that concatenate in the
| platform's normal endian order to form a 128-bit floating-point value. | platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr )
{ {
zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96;
zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64;
zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32;
zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0;
} }

View File

@ -1,56 +1,56 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include "platform.h" #include "platform.h"
#include "primitiveTypes.h" #include "primitiveTypes.h"
#define softfloat_commonNaNToF128UI softfloat_commonNaNToF128UI #define softfloat_commonNaNToF128UI softfloat_commonNaNToF128UI
#include "specialize.h" #include "specialize.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point | Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
| NaN, and returns the bit pattern of this value as an unsigned integer. | NaN, and returns the bit pattern of this value as an unsigned integer.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr )
{ {
struct uint128 uiZ; struct uint128 uiZ;
uiZ.v64 = defaultNaNF128UI64; uiZ.v64 = defaultNaNF128UI64;
uiZ.v0 = defaultNaNF128UI0; uiZ.v0 = defaultNaNF128UI0;
return uiZ; return uiZ;
} }

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| This file intentionally contains no code. | This file intentionally contains no code.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View File

@ -1,74 +1,74 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitiveTypes.h" #include "primitiveTypes.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming at least one of the two 80-bit extended floating-point values | Assuming at least one of the two 80-bit extended floating-point values
| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result | pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result
| at the location pointed to by 'zSPtr'. If either original floating-point | at the location pointed to by 'zSPtr'. If either original floating-point
| value is a signaling NaN, the invalid exception is raised. | value is a signaling NaN, the invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_propagateNaNExtF80M( softfloat_propagateNaNExtF80M(
const struct extFloat80M *aSPtr, const struct extFloat80M *aSPtr,
const struct extFloat80M *bSPtr, const struct extFloat80M *bSPtr,
struct extFloat80M *zSPtr struct extFloat80M *zSPtr
) )
{ {
uint_fast16_t ui64; uint_fast16_t ui64;
uint_fast64_t ui0; uint_fast64_t ui0;
ui64 = aSPtr->signExp; ui64 = aSPtr->signExp;
ui0 = aSPtr->signif; ui0 = aSPtr->signif;
if ( if (
softfloat_isSigNaNExtF80UI( ui64, ui0 ) softfloat_isSigNaNExtF80UI( ui64, ui0 )
|| (bSPtr || (bSPtr
&& (ui64 = bSPtr->signExp, && (ui64 = bSPtr->signExp,
ui0 = bSPtr->signif, ui0 = bSPtr->signif,
softfloat_isSigNaNExtF80UI( ui64, ui0 ))) softfloat_isSigNaNExtF80UI( ui64, ui0 )))
) { ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zSPtr->signExp = defaultNaNExtF80UI64; zSPtr->signExp = defaultNaNExtF80UI64;
zSPtr->signif = defaultNaNExtF80UI0; zSPtr->signif = defaultNaNExtF80UI0;
} }

View File

@ -1,73 +1,73 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitiveTypes.h" #include "primitiveTypes.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Interpreting the unsigned integer formed from concatenating 'uiA64' and | Interpreting the unsigned integer formed from concatenating 'uiA64' and
| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting | 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another | the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
| 80-bit extended floating-point value, and assuming at least on of these | 80-bit extended floating-point value, and assuming at least on of these
| floating-point values is a NaN, returns the bit pattern of the combined NaN | floating-point values is a NaN, returns the bit pattern of the combined NaN
| result. If either original floating-point value is a signaling NaN, the | result. If either original floating-point value is a signaling NaN, the
| invalid exception is raised. | invalid exception is raised.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
struct uint128 struct uint128
softfloat_propagateNaNExtF80UI( softfloat_propagateNaNExtF80UI(
uint_fast16_t uiA64, uint_fast16_t uiA64,
uint_fast64_t uiA0, uint_fast64_t uiA0,
uint_fast16_t uiB64, uint_fast16_t uiB64,
uint_fast64_t uiB0 uint_fast64_t uiB0
) )
{ {
struct uint128 uiZ; struct uint128 uiZ;
if ( if (
softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) softfloat_isSigNaNExtF80UI( uiA64, uiA0 )
|| softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) || softfloat_isSigNaNExtF80UI( uiB64, uiB0 )
) { ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
uiZ.v64 = defaultNaNExtF80UI64; uiZ.v64 = defaultNaNExtF80UI64;
uiZ.v0 = defaultNaNExtF80UI0; uiZ.v0 = defaultNaNExtF80UI0;
return uiZ; return uiZ;
} }

View File

@ -1,68 +1,68 @@
/*============================================================================ /*============================================================================
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
Package, Release 3e, by John R. Hauser. Package, Release 3e, by John R. Hauser.
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
California. All rights reserved. California. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following disclaimer. this list of conditions, and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following disclaimer in the documentation this list of conditions, and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors may 3. Neither the name of the University nor the names of its contributors may
be used to endorse or promote products derived from this software without be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=============================================================================*/ =============================================================================*/
#include <stdint.h> #include <stdint.h>
#include "platform.h" #include "platform.h"
#include "primitiveTypes.h" #include "primitiveTypes.h"
#include "specialize.h" #include "specialize.h"
#include "softfloat.h" #include "softfloat.h"
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
| Assuming at least one of the two 128-bit floating-point values pointed to by | Assuming at least one of the two 128-bit floating-point values pointed to by
| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location | 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location
| pointed to by 'zWPtr'. If either original floating-point value is a | pointed to by 'zWPtr'. If either original floating-point value is a
| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', | signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr',
| and 'zWPtr' points to an array of four 32-bit elements that concatenate in | and 'zWPtr' points to an array of four 32-bit elements that concatenate in
| the platform's normal endian order to form a 128-bit floating-point value. | the platform's normal endian order to form a 128-bit floating-point value.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
softfloat_propagateNaNF128M( softfloat_propagateNaNF128M(
const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr )
{ {
if ( if (
f128M_isSignalingNaN( (const float128_t *) aWPtr ); f128M_isSignalingNaN( (const float128_t *) aWPtr );
|| (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr ))
) { ) {
softfloat_raiseFlags( softfloat_flag_invalid ); softfloat_raiseFlags( softfloat_flag_invalid );
} }
zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96;
zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64;
zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32;
zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0;
} }

Some files were not shown because too many files have changed in this diff Show More