mirror of
https://github.com/AntelopeIO/berkeley-softfloat-3.git
synced 2026-07-21 13:53:30 +00:00
Release 3e. See "doc/SoftFloat-history.html".
This commit is contained in:
+4
-4
@@ -1,13 +1,13 @@
|
|||||||
|
|
||||||
License for Berkeley SoftFloat Release 3d
|
License for Berkeley SoftFloat Release 3e
|
||||||
|
|
||||||
John R. Hauser
|
John R. Hauser
|
||||||
2017 August 10
|
2018 January 20
|
||||||
|
|
||||||
The following applies to the whole of SoftFloat Release 3d 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 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
|
||||||
|
|||||||
+2
-2
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
<BODY>
|
<BODY>
|
||||||
|
|
||||||
<H1>Package Overview for Berkeley SoftFloat Release 3d</H1>
|
<H1>Package Overview for Berkeley SoftFloat Release 3e</H1>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
John R. Hauser<BR>
|
John R. Hauser<BR>
|
||||||
2017 August 10<BR>
|
2018 January 20<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
Package Overview for Berkeley SoftFloat Release 3d
|
Package Overview for Berkeley SoftFloat Release 3e
|
||||||
==================================================
|
==================================================
|
||||||
|
|
||||||
John R. Hauser<br>
|
John R. Hauser<br>
|
||||||
2017 August 10
|
2018 January 20
|
||||||
|
|
||||||
|
|
||||||
Berkeley SoftFloat is a software implementation of binary floating-point
|
Berkeley SoftFloat is a software implementation of binary floating-point
|
||||||
|
|||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
Package Overview for Berkeley SoftFloat Release 3d
|
Package Overview for Berkeley SoftFloat Release 3e
|
||||||
|
|
||||||
John R. Hauser
|
John R. Hauser
|
||||||
2017 August 10
|
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
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
# Package, Release 3d, 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.
|
||||||
@@ -51,6 +51,8 @@ MAKELIB = ar crs $@
|
|||||||
OBJ = .o
|
OBJ = .o
|
||||||
LIB = .a
|
LIB = .a
|
||||||
|
|
||||||
|
OTHER_HEADERS =
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -300,7 +302,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2017 The Regents of the
|
||||||
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:
|
||||||
@@ -46,3 +46,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define INLINE extern inline
|
#define INLINE extern inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define SOFTFLOAT_BUILTIN_CLZ 1
|
||||||
|
#include "opts-GCC.h"
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
# Package, Release 3d, 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.
|
||||||
@@ -51,6 +51,8 @@ MAKELIB = ar crs $@
|
|||||||
OBJ = .o
|
OBJ = .o
|
||||||
LIB = .a
|
LIB = .a
|
||||||
|
|
||||||
|
OTHER_HEADERS =
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -300,7 +302,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2017 The Regents of the
|
||||||
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:
|
||||||
@@ -46,3 +46,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define INLINE extern inline
|
#define INLINE extern inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define SOFTFLOAT_BUILTIN_CLZ 1
|
||||||
|
#include "opts-GCC.h"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,323 @@
|
|||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
#
|
||||||
|
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
# Package, Release 3e, by John R. Hauser.
|
||||||
|
#
|
||||||
|
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
|
||||||
|
# University of California. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# 3. Neither the name of the University nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software
|
||||||
|
# without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
|
SOURCE_DIR ?= ../../source
|
||||||
|
SPECIALIZE_TYPE ?= ARM-VFPv2
|
||||||
|
|
||||||
|
SOFTFLOAT_OPTS ?= -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5
|
||||||
|
|
||||||
|
DELETE = rm -f
|
||||||
|
C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
|
||||||
|
COMPILE_C = \
|
||||||
|
gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
|
||||||
|
$(C_INCLUDES) -O2 -o $@
|
||||||
|
MAKELIB = ar crs $@
|
||||||
|
|
||||||
|
OBJ = .o
|
||||||
|
LIB = .a
|
||||||
|
|
||||||
|
OTHER_HEADERS =
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
|
OBJS_PRIMITIVES = \
|
||||||
|
s_compare96M$(OBJ) \
|
||||||
|
s_compare128M$(OBJ) \
|
||||||
|
s_shortShiftLeft64To96M$(OBJ) \
|
||||||
|
s_shortShiftLeftM$(OBJ) \
|
||||||
|
s_shiftLeftM$(OBJ) \
|
||||||
|
s_shortShiftRightM$(OBJ) \
|
||||||
|
s_shortShiftRightJam64$(OBJ) \
|
||||||
|
s_shortShiftRightJamM$(OBJ) \
|
||||||
|
s_shiftRightJam32$(OBJ) \
|
||||||
|
s_shiftRightJam64$(OBJ) \
|
||||||
|
s_shiftRightJamM$(OBJ) \
|
||||||
|
s_shiftRightM$(OBJ) \
|
||||||
|
s_countLeadingZeros8$(OBJ) \
|
||||||
|
s_countLeadingZeros16$(OBJ) \
|
||||||
|
s_countLeadingZeros32$(OBJ) \
|
||||||
|
s_countLeadingZeros64$(OBJ) \
|
||||||
|
s_addM$(OBJ) \
|
||||||
|
s_addCarryM$(OBJ) \
|
||||||
|
s_addComplCarryM$(OBJ) \
|
||||||
|
s_negXM$(OBJ) \
|
||||||
|
s_sub1XM$(OBJ) \
|
||||||
|
s_subM$(OBJ) \
|
||||||
|
s_mul64To128M$(OBJ) \
|
||||||
|
s_mul128MTo256M$(OBJ) \
|
||||||
|
s_approxRecip_1Ks$(OBJ) \
|
||||||
|
s_approxRecip32_1$(OBJ) \
|
||||||
|
s_approxRecipSqrt_1Ks$(OBJ) \
|
||||||
|
s_approxRecipSqrt32_1$(OBJ) \
|
||||||
|
s_remStepMBy32$(OBJ) \
|
||||||
|
|
||||||
|
OBJS_SPECIALIZE = \
|
||||||
|
softfloat_raiseFlags$(OBJ) \
|
||||||
|
s_f16UIToCommonNaN$(OBJ) \
|
||||||
|
s_commonNaNToF16UI$(OBJ) \
|
||||||
|
s_propagateNaNF16UI$(OBJ) \
|
||||||
|
s_f32UIToCommonNaN$(OBJ) \
|
||||||
|
s_commonNaNToF32UI$(OBJ) \
|
||||||
|
s_propagateNaNF32UI$(OBJ) \
|
||||||
|
s_f64UIToCommonNaN$(OBJ) \
|
||||||
|
s_commonNaNToF64UI$(OBJ) \
|
||||||
|
s_propagateNaNF64UI$(OBJ) \
|
||||||
|
extF80M_isSignalingNaN$(OBJ) \
|
||||||
|
s_extF80MToCommonNaN$(OBJ) \
|
||||||
|
s_commonNaNToExtF80M$(OBJ) \
|
||||||
|
s_propagateNaNExtF80M$(OBJ) \
|
||||||
|
f128M_isSignalingNaN$(OBJ) \
|
||||||
|
s_f128MToCommonNaN$(OBJ) \
|
||||||
|
s_commonNaNToF128M$(OBJ) \
|
||||||
|
s_propagateNaNF128M$(OBJ) \
|
||||||
|
|
||||||
|
OBJS_OTHERS = \
|
||||||
|
s_roundToUI32$(OBJ) \
|
||||||
|
s_roundMToUI64$(OBJ) \
|
||||||
|
s_roundToI32$(OBJ) \
|
||||||
|
s_roundMToI64$(OBJ) \
|
||||||
|
s_normSubnormalF16Sig$(OBJ) \
|
||||||
|
s_roundPackToF16$(OBJ) \
|
||||||
|
s_normRoundPackToF16$(OBJ) \
|
||||||
|
s_addMagsF16$(OBJ) \
|
||||||
|
s_subMagsF16$(OBJ) \
|
||||||
|
s_mulAddF16$(OBJ) \
|
||||||
|
s_normSubnormalF32Sig$(OBJ) \
|
||||||
|
s_roundPackToF32$(OBJ) \
|
||||||
|
s_normRoundPackToF32$(OBJ) \
|
||||||
|
s_addMagsF32$(OBJ) \
|
||||||
|
s_subMagsF32$(OBJ) \
|
||||||
|
s_mulAddF32$(OBJ) \
|
||||||
|
s_normSubnormalF64Sig$(OBJ) \
|
||||||
|
s_roundPackToF64$(OBJ) \
|
||||||
|
s_normRoundPackToF64$(OBJ) \
|
||||||
|
s_addMagsF64$(OBJ) \
|
||||||
|
s_subMagsF64$(OBJ) \
|
||||||
|
s_mulAddF64$(OBJ) \
|
||||||
|
s_tryPropagateNaNExtF80M$(OBJ) \
|
||||||
|
s_invalidExtF80M$(OBJ) \
|
||||||
|
s_normExtF80SigM$(OBJ) \
|
||||||
|
s_roundPackMToExtF80M$(OBJ) \
|
||||||
|
s_normRoundPackMToExtF80M$(OBJ) \
|
||||||
|
s_addExtF80M$(OBJ) \
|
||||||
|
s_compareNonnormExtF80M$(OBJ) \
|
||||||
|
s_isNaNF128M$(OBJ) \
|
||||||
|
s_tryPropagateNaNF128M$(OBJ) \
|
||||||
|
s_invalidF128M$(OBJ) \
|
||||||
|
s_shiftNormSigF128M$(OBJ) \
|
||||||
|
s_roundPackMToF128M$(OBJ) \
|
||||||
|
s_normRoundPackMToF128M$(OBJ) \
|
||||||
|
s_addF128M$(OBJ) \
|
||||||
|
s_mulAddF128M$(OBJ) \
|
||||||
|
softfloat_state$(OBJ) \
|
||||||
|
ui32_to_f16$(OBJ) \
|
||||||
|
ui32_to_f32$(OBJ) \
|
||||||
|
ui32_to_f64$(OBJ) \
|
||||||
|
ui32_to_extF80M$(OBJ) \
|
||||||
|
ui32_to_f128M$(OBJ) \
|
||||||
|
ui64_to_f16$(OBJ) \
|
||||||
|
ui64_to_f32$(OBJ) \
|
||||||
|
ui64_to_f64$(OBJ) \
|
||||||
|
ui64_to_extF80M$(OBJ) \
|
||||||
|
ui64_to_f128M$(OBJ) \
|
||||||
|
i32_to_f16$(OBJ) \
|
||||||
|
i32_to_f32$(OBJ) \
|
||||||
|
i32_to_f64$(OBJ) \
|
||||||
|
i32_to_extF80M$(OBJ) \
|
||||||
|
i32_to_f128M$(OBJ) \
|
||||||
|
i64_to_f16$(OBJ) \
|
||||||
|
i64_to_f32$(OBJ) \
|
||||||
|
i64_to_f64$(OBJ) \
|
||||||
|
i64_to_extF80M$(OBJ) \
|
||||||
|
i64_to_f128M$(OBJ) \
|
||||||
|
f16_to_ui32$(OBJ) \
|
||||||
|
f16_to_ui64$(OBJ) \
|
||||||
|
f16_to_i32$(OBJ) \
|
||||||
|
f16_to_i64$(OBJ) \
|
||||||
|
f16_to_ui32_r_minMag$(OBJ) \
|
||||||
|
f16_to_ui64_r_minMag$(OBJ) \
|
||||||
|
f16_to_i32_r_minMag$(OBJ) \
|
||||||
|
f16_to_i64_r_minMag$(OBJ) \
|
||||||
|
f16_to_f32$(OBJ) \
|
||||||
|
f16_to_f64$(OBJ) \
|
||||||
|
f16_to_extF80M$(OBJ) \
|
||||||
|
f16_to_f128M$(OBJ) \
|
||||||
|
f16_roundToInt$(OBJ) \
|
||||||
|
f16_add$(OBJ) \
|
||||||
|
f16_sub$(OBJ) \
|
||||||
|
f16_mul$(OBJ) \
|
||||||
|
f16_mulAdd$(OBJ) \
|
||||||
|
f16_div$(OBJ) \
|
||||||
|
f16_rem$(OBJ) \
|
||||||
|
f16_sqrt$(OBJ) \
|
||||||
|
f16_eq$(OBJ) \
|
||||||
|
f16_le$(OBJ) \
|
||||||
|
f16_lt$(OBJ) \
|
||||||
|
f16_eq_signaling$(OBJ) \
|
||||||
|
f16_le_quiet$(OBJ) \
|
||||||
|
f16_lt_quiet$(OBJ) \
|
||||||
|
f16_isSignalingNaN$(OBJ) \
|
||||||
|
f32_to_ui32$(OBJ) \
|
||||||
|
f32_to_ui64$(OBJ) \
|
||||||
|
f32_to_i32$(OBJ) \
|
||||||
|
f32_to_i64$(OBJ) \
|
||||||
|
f32_to_ui32_r_minMag$(OBJ) \
|
||||||
|
f32_to_ui64_r_minMag$(OBJ) \
|
||||||
|
f32_to_i32_r_minMag$(OBJ) \
|
||||||
|
f32_to_i64_r_minMag$(OBJ) \
|
||||||
|
f32_to_f16$(OBJ) \
|
||||||
|
f32_to_f64$(OBJ) \
|
||||||
|
f32_to_extF80M$(OBJ) \
|
||||||
|
f32_to_f128M$(OBJ) \
|
||||||
|
f32_roundToInt$(OBJ) \
|
||||||
|
f32_add$(OBJ) \
|
||||||
|
f32_sub$(OBJ) \
|
||||||
|
f32_mul$(OBJ) \
|
||||||
|
f32_mulAdd$(OBJ) \
|
||||||
|
f32_div$(OBJ) \
|
||||||
|
f32_rem$(OBJ) \
|
||||||
|
f32_sqrt$(OBJ) \
|
||||||
|
f32_eq$(OBJ) \
|
||||||
|
f32_le$(OBJ) \
|
||||||
|
f32_lt$(OBJ) \
|
||||||
|
f32_eq_signaling$(OBJ) \
|
||||||
|
f32_le_quiet$(OBJ) \
|
||||||
|
f32_lt_quiet$(OBJ) \
|
||||||
|
f32_isSignalingNaN$(OBJ) \
|
||||||
|
f64_to_ui32$(OBJ) \
|
||||||
|
f64_to_ui64$(OBJ) \
|
||||||
|
f64_to_i32$(OBJ) \
|
||||||
|
f64_to_i64$(OBJ) \
|
||||||
|
f64_to_ui32_r_minMag$(OBJ) \
|
||||||
|
f64_to_ui64_r_minMag$(OBJ) \
|
||||||
|
f64_to_i32_r_minMag$(OBJ) \
|
||||||
|
f64_to_i64_r_minMag$(OBJ) \
|
||||||
|
f64_to_f16$(OBJ) \
|
||||||
|
f64_to_f32$(OBJ) \
|
||||||
|
f64_to_extF80M$(OBJ) \
|
||||||
|
f64_to_f128M$(OBJ) \
|
||||||
|
f64_roundToInt$(OBJ) \
|
||||||
|
f64_add$(OBJ) \
|
||||||
|
f64_sub$(OBJ) \
|
||||||
|
f64_mul$(OBJ) \
|
||||||
|
f64_mulAdd$(OBJ) \
|
||||||
|
f64_div$(OBJ) \
|
||||||
|
f64_rem$(OBJ) \
|
||||||
|
f64_sqrt$(OBJ) \
|
||||||
|
f64_eq$(OBJ) \
|
||||||
|
f64_le$(OBJ) \
|
||||||
|
f64_lt$(OBJ) \
|
||||||
|
f64_eq_signaling$(OBJ) \
|
||||||
|
f64_le_quiet$(OBJ) \
|
||||||
|
f64_lt_quiet$(OBJ) \
|
||||||
|
f64_isSignalingNaN$(OBJ) \
|
||||||
|
extF80M_to_ui32$(OBJ) \
|
||||||
|
extF80M_to_ui64$(OBJ) \
|
||||||
|
extF80M_to_i32$(OBJ) \
|
||||||
|
extF80M_to_i64$(OBJ) \
|
||||||
|
extF80M_to_ui32_r_minMag$(OBJ) \
|
||||||
|
extF80M_to_ui64_r_minMag$(OBJ) \
|
||||||
|
extF80M_to_i32_r_minMag$(OBJ) \
|
||||||
|
extF80M_to_i64_r_minMag$(OBJ) \
|
||||||
|
extF80M_to_f16$(OBJ) \
|
||||||
|
extF80M_to_f32$(OBJ) \
|
||||||
|
extF80M_to_f64$(OBJ) \
|
||||||
|
extF80M_to_f128M$(OBJ) \
|
||||||
|
extF80M_roundToInt$(OBJ) \
|
||||||
|
extF80M_add$(OBJ) \
|
||||||
|
extF80M_sub$(OBJ) \
|
||||||
|
extF80M_mul$(OBJ) \
|
||||||
|
extF80M_div$(OBJ) \
|
||||||
|
extF80M_rem$(OBJ) \
|
||||||
|
extF80M_sqrt$(OBJ) \
|
||||||
|
extF80M_eq$(OBJ) \
|
||||||
|
extF80M_le$(OBJ) \
|
||||||
|
extF80M_lt$(OBJ) \
|
||||||
|
extF80M_eq_signaling$(OBJ) \
|
||||||
|
extF80M_le_quiet$(OBJ) \
|
||||||
|
extF80M_lt_quiet$(OBJ) \
|
||||||
|
f128M_to_ui32$(OBJ) \
|
||||||
|
f128M_to_ui64$(OBJ) \
|
||||||
|
f128M_to_i32$(OBJ) \
|
||||||
|
f128M_to_i64$(OBJ) \
|
||||||
|
f128M_to_ui32_r_minMag$(OBJ) \
|
||||||
|
f128M_to_ui64_r_minMag$(OBJ) \
|
||||||
|
f128M_to_i32_r_minMag$(OBJ) \
|
||||||
|
f128M_to_i64_r_minMag$(OBJ) \
|
||||||
|
f128M_to_f16$(OBJ) \
|
||||||
|
f128M_to_f32$(OBJ) \
|
||||||
|
f128M_to_f64$(OBJ) \
|
||||||
|
f128M_to_extF80M$(OBJ) \
|
||||||
|
f128M_roundToInt$(OBJ) \
|
||||||
|
f128M_add$(OBJ) \
|
||||||
|
f128M_sub$(OBJ) \
|
||||||
|
f128M_mul$(OBJ) \
|
||||||
|
f128M_mulAdd$(OBJ) \
|
||||||
|
f128M_div$(OBJ) \
|
||||||
|
f128M_rem$(OBJ) \
|
||||||
|
f128M_sqrt$(OBJ) \
|
||||||
|
f128M_eq$(OBJ) \
|
||||||
|
f128M_le$(OBJ) \
|
||||||
|
f128M_lt$(OBJ) \
|
||||||
|
f128M_eq_signaling$(OBJ) \
|
||||||
|
f128M_le_quiet$(OBJ) \
|
||||||
|
f128M_lt_quiet$(OBJ) \
|
||||||
|
|
||||||
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
|
$(OBJS_ALL): \
|
||||||
|
$(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
|
||||||
|
$(SOURCE_DIR)/include/primitives.h
|
||||||
|
$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
|
||||||
|
$(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
|
||||||
|
$(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
|
||||||
|
$(SOURCE_DIR)/include/softfloat.h
|
||||||
|
|
||||||
|
$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
|
||||||
|
$(COMPILE_C) $(SOURCE_DIR)/$*.c
|
||||||
|
|
||||||
|
$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
|
||||||
|
$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
|
||||||
|
|
||||||
|
softfloat$(LIB): $(OBJS_ALL)
|
||||||
|
$(DELETE) $@
|
||||||
|
$(MAKELIB) $^
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
$(DELETE) $(OBJS_ALL) softfloat$(LIB)
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
|
||||||
|
University of California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define LITTLEENDIAN 1
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#ifdef __GNUC_STDC_INLINE__
|
||||||
|
#define INLINE inline
|
||||||
|
#else
|
||||||
|
#define INLINE extern inline
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define SOFTFLOAT_BUILTIN_CLZ 1
|
||||||
|
#include "opts-GCC.h"
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
# Package, Release 3d, 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.
|
||||||
@@ -51,6 +51,8 @@ MAKELIB = ar crs $@
|
|||||||
OBJ = .o
|
OBJ = .o
|
||||||
LIB = .a
|
LIB = .a
|
||||||
|
|
||||||
|
OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -365,7 +367,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2017 The Regents of the
|
||||||
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:
|
||||||
@@ -46,3 +46,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define INLINE extern inline
|
#define INLINE extern inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define SOFTFLOAT_BUILTIN_CLZ 1
|
||||||
|
#define SOFTFLOAT_INTRINSIC_INT128 1
|
||||||
|
#include "opts-GCC.h"
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
# Package, Release 3d, 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.
|
||||||
@@ -51,6 +51,8 @@ MAKELIB = ar crs $@
|
|||||||
OBJ = .o
|
OBJ = .o
|
||||||
LIB = .a
|
LIB = .a
|
||||||
|
|
||||||
|
OTHER_HEADERS =
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -300,7 +302,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2017 The Regents of the
|
||||||
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:
|
||||||
@@ -46,3 +46,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define INLINE extern inline
|
#define INLINE extern inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define SOFTFLOAT_BUILTIN_CLZ 1
|
||||||
|
#include "opts-GCC.h"
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
# Package, Release 3d, 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.
|
||||||
@@ -51,6 +51,8 @@ MAKELIB = ar crs $@
|
|||||||
OBJ = .o
|
OBJ = .o
|
||||||
LIB = .a
|
LIB = .a
|
||||||
|
|
||||||
|
OTHER_HEADERS =
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -300,7 +302,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2017 The Regents of the
|
||||||
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:
|
||||||
@@ -46,3 +46,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define INLINE extern inline
|
#define INLINE extern inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define SOFTFLOAT_BUILTIN_CLZ 1
|
||||||
|
#include "opts-GCC.h"
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
# Package, Release 3d, 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.
|
||||||
@@ -51,6 +51,8 @@ MAKELIB = x86_64-w64-mingw32-ar crs $@
|
|||||||
OBJ = .o
|
OBJ = .o
|
||||||
LIB = .a
|
LIB = .a
|
||||||
|
|
||||||
|
OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -365,7 +367,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2017 The Regents of the
|
||||||
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:
|
||||||
@@ -46,3 +46,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define INLINE extern inline
|
#define INLINE extern inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define SOFTFLOAT_BUILTIN_CLZ 1
|
||||||
|
#define SOFTFLOAT_INTRINSIC_INT128 1
|
||||||
|
#include "opts-GCC.h"
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# 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 3d, 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.
|
||||||
@@ -52,6 +52,8 @@
|
|||||||
==> OBJ = .o
|
==> OBJ = .o
|
||||||
==> LIB = .a
|
==> LIB = .a
|
||||||
|
|
||||||
|
==> OTHER_HEADERS =
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -366,7 +368,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
#
|
#
|
||||||
# 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 3d, 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.
|
||||||
@@ -51,6 +51,8 @@
|
|||||||
==> OBJ = .o
|
==> OBJ = .o
|
||||||
==> LIB = .a
|
==> LIB = .a
|
||||||
|
|
||||||
|
==> OTHER_HEADERS =
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: softfloat$(LIB)
|
all: softfloat$(LIB)
|
||||||
|
|
||||||
@@ -300,7 +302,7 @@ OBJS_OTHERS = \
|
|||||||
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
|
||||||
|
|
||||||
$(OBJS_ALL): \
|
$(OBJS_ALL): \
|
||||||
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 \
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -7,14 +7,57 @@
|
|||||||
|
|
||||||
<BODY>
|
<BODY>
|
||||||
|
|
||||||
<H1>History of Berkeley SoftFloat, to Release 3d</H1>
|
<H1>History of Berkeley SoftFloat, to Release 3e</H1>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
John R. Hauser<BR>
|
John R. Hauser<BR>
|
||||||
2017 August 10<BR>
|
2018 January 20<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
||||||
|
<H3>Release 3e (2018 January)</H3>
|
||||||
|
|
||||||
|
<UL>
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
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.
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
Modified the behavior of rounding mode <CODE>odd</CODE> when rounding to an
|
||||||
|
integer value (either conversion to an integer format or a
|
||||||
|
‘<CODE>roundToInt</CODE>’ function).
|
||||||
|
Previously, for those cases only, rounding mode <CODE>odd</CODE> acted the same
|
||||||
|
as rounding to minimum magnitude.
|
||||||
|
Now all operations are rounded consistently.
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
Fixed some errors in the specialization code modeling Intel x86 floating-point,
|
||||||
|
specifically the integers returned on invalid operations and the propagation of
|
||||||
|
NaN payloads in a few rare cases.
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
Added specialization code modeling ARM floating-point, conforming to VFPv2 or
|
||||||
|
later.
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
Added an example target for ARM processors.
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
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
|
||||||
|
negative.
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
Added example target-specific optimization for GCC, employing GCC instrinsics
|
||||||
|
and support for <NOBR>128-bit</NOBR> integer arithmetic.
|
||||||
|
|
||||||
|
<LI>
|
||||||
|
Made other minor improvements.
|
||||||
|
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
|
||||||
<H3>Release 3d (2017 August)</H3>
|
<H3>Release 3d (2017 August)</H3>
|
||||||
|
|
||||||
<UL>
|
<UL>
|
||||||
|
|||||||
+81
-28
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
<BODY>
|
<BODY>
|
||||||
|
|
||||||
<H1>Berkeley SoftFloat Release 3d: Source Documentation</H1>
|
<H1>Berkeley SoftFloat Release 3e: Source Documentation</H1>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
John R. Hauser<BR>
|
John R. Hauser<BR>
|
||||||
2017 August 10<BR>
|
2018 January 20<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ SoftFloat has been successfully compiled with the GNU C Compiler
|
|||||||
<NOBR>Release 2</NOBR> or earlier.
|
<NOBR>Release 2</NOBR> or earlier.
|
||||||
Changes to the interface of SoftFloat functions are documented in
|
Changes to the interface of SoftFloat functions are documented in
|
||||||
<A HREF="SoftFloat.html"><NOBR><CODE>SoftFloat.html</CODE></NOBR></A>.
|
<A HREF="SoftFloat.html"><NOBR><CODE>SoftFloat.html</CODE></NOBR></A>.
|
||||||
The current version of SoftFloat is <NOBR>Release 3d</NOBR>.
|
The current version of SoftFloat is <NOBR>Release 3e</NOBR>.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ and <CODE><stdint.h></CODE></I>.
|
|||||||
The SoftFloat package was written by me, <NOBR>John R.</NOBR> Hauser.
|
The SoftFloat package was written by me, <NOBR>John R.</NOBR> Hauser.
|
||||||
<NOBR>Release 3</NOBR> of SoftFloat was a completely new implementation
|
<NOBR>Release 3</NOBR> of SoftFloat was a completely new implementation
|
||||||
supplanting earlier releases.
|
supplanting earlier releases.
|
||||||
The project to create <NOBR>Release 3</NOBR> (now <NOBR>through 3d</NOBR>) was
|
The project to create <NOBR>Release 3</NOBR> (now <NOBR>through 3e</NOBR>) was
|
||||||
done in the employ of the University of California, Berkeley, within the
|
done in the employ of the University of California, Berkeley, within the
|
||||||
Department of Electrical Engineering and Computer Sciences, first for the
|
Department of Electrical Engineering and Computer Sciences, first for the
|
||||||
Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab.
|
Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab.
|
||||||
@@ -148,12 +148,12 @@ Oracle, and Samsung.
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
The following applies to the whole of SoftFloat <NOBR>Release 3d</NOBR> as well
|
The following applies to the whole of SoftFloat <NOBR>Release 3e</NOBR> as well
|
||||||
as to each source file individually.
|
as to each source file individually.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
|
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the
|
||||||
University of California.
|
University of California.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
</P>
|
</P>
|
||||||
@@ -215,12 +215,15 @@ source
|
|||||||
include
|
include
|
||||||
8086
|
8086
|
||||||
8086-SSE
|
8086-SSE
|
||||||
|
ARM-VFPv2
|
||||||
|
ARM-VFPv2-defaultNaN
|
||||||
build
|
build
|
||||||
template-FAST_INT64
|
template-FAST_INT64
|
||||||
template-not-FAST_INT64
|
template-not-FAST_INT64
|
||||||
Linux-386-GCC
|
Linux-386-GCC
|
||||||
Linux-386-SSE2-GCC
|
Linux-386-SSE2-GCC
|
||||||
Linux-x86_64-GCC
|
Linux-x86_64-GCC
|
||||||
|
Linux-ARM-VFPv2-GCC
|
||||||
Win32-MinGW
|
Win32-MinGW
|
||||||
Win32-SSE2-MinGW
|
Win32-SSE2-MinGW
|
||||||
Win64-MinGW-w64
|
Win64-MinGW-w64
|
||||||
@@ -228,20 +231,37 @@ build
|
|||||||
</BLOCKQUOTE>
|
</BLOCKQUOTE>
|
||||||
The majority of the SoftFloat sources are provided in the <CODE>source</CODE>
|
The majority of the SoftFloat sources are provided in the <CODE>source</CODE>
|
||||||
directory.
|
directory.
|
||||||
The <CODE>include</CODE> subdirectory of <CODE>source</CODE> contains several
|
The <CODE>include</CODE> subdirectory contains several header files
|
||||||
header files (unsurprisingly), while the <CODE>8086</CODE> and
|
(unsurprisingly), while the other subdirectories of <CODE>source</CODE> contain
|
||||||
<NOBR><CODE>8086-SSE</CODE></NOBR> subdirectories contain source files that
|
source files that specialize the floating-point behavior to match particular
|
||||||
specialize the floating-point behavior to match the Intel x86 line of
|
processor families:
|
||||||
processors.
|
<BLOCKQUOTE>
|
||||||
The files in directory <CODE>8086</CODE> give floating-point behavior
|
<DL>
|
||||||
consistent solely with Intel’s older, 8087-derived floating-point, while
|
<DT><CODE>8086</CODE></DT>
|
||||||
those in <NOBR><CODE>8086-SSE</CODE></NOBR> update the behavior of the
|
<DD>
|
||||||
non-extended formats (<CODE>float16_t</CODE>, <CODE>float32_t</CODE>,
|
Intel’s older, 8087-derived floating-point, extended to all supported
|
||||||
<CODE>float64_t</CODE>, and <CODE>float128_t</CODE>) to mirror Intel’s
|
floating-point types
|
||||||
more recent Streaming SIMD Extensions (SSE) and other compatible extensions.
|
</DD>
|
||||||
|
<DT><CODE>8086-SSE</CODE></DT>
|
||||||
|
<DD>
|
||||||
|
Intel’s x86 processors with Streaming SIMD Extensions (SSE) and later
|
||||||
|
compatible extensions, having 8087 behavior for <NOBR>80-bit</NOBR>
|
||||||
|
double-extended-precision (<CODE>extFloat80_t</CODE>) and SSE behavior for
|
||||||
|
other floating-point types
|
||||||
|
</DD>
|
||||||
|
<DT><CODE>ARM-VFPv2</CODE></DT>
|
||||||
|
<DD>
|
||||||
|
ARM’s VFPv2 or later floating-point, with NaN payload propagation
|
||||||
|
</DD>
|
||||||
|
<DT><CODE>ARM-VFPv2-defaultNaN</CODE></DT>
|
||||||
|
<DD>
|
||||||
|
ARM’s VFPv2 or later floating-point, with the “default NaN”
|
||||||
|
option
|
||||||
|
</DD>
|
||||||
|
</DL>
|
||||||
|
</BLOCKQUOTE>
|
||||||
If other specializations are attempted, these would be expected to be other
|
If other specializations are attempted, these would be expected to be other
|
||||||
subdirectories of <CODE>source</CODE> alongside <CODE>8086</CODE> and
|
subdirectories of <CODE>source</CODE> alongside the ones listed above.
|
||||||
<NOBR><CODE>8086-SSE</CODE></NOBR>.
|
|
||||||
Specialization is covered later, in <NOBR>section 5.2</NOBR>, <I>Specializing
|
Specialization is covered later, in <NOBR>section 5.2</NOBR>, <I>Specializing
|
||||||
Floating-Point Behavior</I>.
|
Floating-Point Behavior</I>.
|
||||||
</P>
|
</P>
|
||||||
@@ -264,19 +284,20 @@ are intended to follow a naming system of
|
|||||||
For the example targets,
|
For the example targets,
|
||||||
<NOBR><CODE><<I>execution-environment</I>></CODE></NOBR> is
|
<NOBR><CODE><<I>execution-environment</I>></CODE></NOBR> is
|
||||||
<NOBR><CODE>Linux-386</CODE></NOBR>, <NOBR><CODE>Linux-386-SSE2</CODE></NOBR>,
|
<NOBR><CODE>Linux-386</CODE></NOBR>, <NOBR><CODE>Linux-386-SSE2</CODE></NOBR>,
|
||||||
<NOBR><CODE>Linux-x86_64</CODE></NOBR>, <CODE>Win32</CODE>,
|
<NOBR><CODE>Linux-x86_64</CODE></NOBR>,
|
||||||
|
<NOBR><CODE>Linux-ARM-VFPv2</CODE></NOBR>, <CODE>Win32</CODE>,
|
||||||
<NOBR><CODE>Win32-SSE2</CODE></NOBR>, or <CODE>Win64</CODE>, and
|
<NOBR><CODE>Win32-SSE2</CODE></NOBR>, or <CODE>Win64</CODE>, and
|
||||||
<NOBR><CODE><<I>compiler</I>></CODE></NOBR> is <CODE>GCC</CODE>,
|
<NOBR><CODE><<I>compiler</I>></CODE></NOBR> is <CODE>GCC</CODE>,
|
||||||
<CODE>MinGW</CODE>, or <NOBR><CODE>MinGW-w64</CODE></NOBR>.
|
<CODE>MinGW</CODE>, or <NOBR><CODE>MinGW-w64</CODE></NOBR>.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
At the current time, all of the supplied target directories are merely examples
|
All of the supplied target directories are merely examples that may or may not
|
||||||
that may or may not be correct for compiling on any particular system.
|
be correct for compiling on any particular system.
|
||||||
Despite requests, there are currently no plans to include and maintain in the
|
Despite requests, there are currently no plans to include and maintain in the
|
||||||
SoftFloat package the build files needed for a great many users’
|
SoftFloat package the build files needed for a great many users’
|
||||||
compilation environments, which after all can span a broad range of operating
|
compilation environments, which can span a huge range of operating systems,
|
||||||
systems, compilers, and other tools.
|
compilers, and other tools.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
@@ -402,8 +423,8 @@ A new build target may use an existing specialization, such as the ones
|
|||||||
provided by the <CODE>8086</CODE> and <NOBR><CODE>8086-SSE</CODE></NOBR>
|
provided by the <CODE>8086</CODE> and <NOBR><CODE>8086-SSE</CODE></NOBR>
|
||||||
subdirectories.
|
subdirectories.
|
||||||
If a build target needs a new specialization, different from any existing ones,
|
If a build target needs a new specialization, different from any existing ones,
|
||||||
it is recommended that a new specialization subdirectory be created in the
|
it is recommended that a new specialization directory be created for this
|
||||||
<CODE>source</CODE> directory for this purpose.
|
purpose.
|
||||||
The <CODE>specialize.h</CODE> header file from any of the provided
|
The <CODE>specialize.h</CODE> header file from any of the provided
|
||||||
specialization subdirectories can be used as a model for what definitions are
|
specialization subdirectories can be used as a model for what definitions are
|
||||||
needed.
|
needed.
|
||||||
@@ -577,8 +598,40 @@ function.
|
|||||||
This technically defines <NOBR><CODE><<I>function-name</I>></CODE></NOBR>
|
This technically defines <NOBR><CODE><<I>function-name</I>></CODE></NOBR>
|
||||||
as a macro, but one that resolves to the same name, which may then be a
|
as a macro, but one that resolves to the same name, which may then be a
|
||||||
function.
|
function.
|
||||||
(A preprocessor that conforms to the C Standard must limit recursive macro
|
(A preprocessor that conforms to the C Standard is required to limit recursive
|
||||||
expansion from being applied more than once.)
|
macro expansion from being applied more than once.)
|
||||||
|
</P>
|
||||||
|
|
||||||
|
<P>
|
||||||
|
The supplied header file <CODE>opts-GCC.h</CODE> (in directory
|
||||||
|
<CODE>source/include</CODE>) provides an example of target-specific
|
||||||
|
optimization for the GCC compiler.
|
||||||
|
Each GCC target example in the <CODE>build</CODE> directory has
|
||||||
|
<BLOCKQUOTE>
|
||||||
|
<CODE>#include "opts-GCC.h"</CODE>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
in its <CODE>platform.h</CODE> header file.
|
||||||
|
Before <CODE>opts-GCC.h</CODE> is included, the following macros must be
|
||||||
|
defined (or not) to control which features are invoked:
|
||||||
|
<BLOCKQUOTE>
|
||||||
|
<DL>
|
||||||
|
<DT><CODE>SOFTFLOAT_BUILTIN_CLZ</CODE></DT>
|
||||||
|
<DD>
|
||||||
|
If defined, SoftFloat’s internal
|
||||||
|
‘<CODE>countLeadingZeros</CODE>’ functions use intrinsics
|
||||||
|
<CODE>__builtin_clz</CODE> and <CODE>__builtin_clzll</CODE>.
|
||||||
|
</DD>
|
||||||
|
<DT><CODE>SOFTFLOAT_INTRINSIC_INT128</CODE></DT>
|
||||||
|
<DD>
|
||||||
|
If defined, SoftFloat makes use of GCC’s nonstandard <NOBR>128-bit</NOBR>
|
||||||
|
integer type <CODE>__int128</CODE>.
|
||||||
|
</DD>
|
||||||
|
</DL>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
On some machines, these improvements are observed to increase the speeds of
|
||||||
|
<CODE>f64_mul</CODE> and <CODE>f128_mul</CODE> by around 20 to 25%, although
|
||||||
|
other functions receive less dramatic boosts, or none at all.
|
||||||
|
Results can vary greatly across different platforms.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+30
-41
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
<BODY>
|
<BODY>
|
||||||
|
|
||||||
<H1>Berkeley SoftFloat Release 3d: Library Interface</H1>
|
<H1>Berkeley SoftFloat Release 3e: Library Interface</H1>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
John R. Hauser<BR>
|
John R. Hauser<BR>
|
||||||
2017 August 10<BR>
|
2018 January 20<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
||||||
@@ -106,13 +106,20 @@ Information about the standard is available elsewhere.
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
The current version of SoftFloat is <NOBR>Release 3d</NOBR>.
|
The current version of SoftFloat is <NOBR>Release 3e</NOBR>.
|
||||||
This release fixes bugs that were found in the square root functions for the
|
This release modifies the behavior of the rarely used <I>odd</I> rounding mode
|
||||||
<NOBR>64-bit</NOBR>, <NOBR>80-bit</NOBR>, and <NOBR>128-bit</NOBR>
|
(<I>round to odd</I>, also known as <I>jamming</I>), and also adds some new
|
||||||
floating-point formats.
|
specialization and optimization examples for those compiling SoftFloat.
|
||||||
|
</P>
|
||||||
|
|
||||||
|
<P>
|
||||||
|
The previous <NOBR>Release 3d</NOBR> fixed bugs that were found in the square
|
||||||
|
root functions for the <NOBR>64-bit</NOBR>, <NOBR>80-bit</NOBR>, and
|
||||||
|
<NOBR>128-bit</NOBR> floating-point formats.
|
||||||
(Thanks to Alexei Sibidanov at the University of Victoria for reporting an
|
(Thanks to Alexei Sibidanov at the University of Victoria for reporting an
|
||||||
incorrect result.)
|
incorrect result.)
|
||||||
The bugs affected all prior <NOBR>Release-3</NOBR> versions of SoftFloat.
|
The bugs affected all prior <NOBR>Release-3</NOBR> versions of SoftFloat
|
||||||
|
<NOBR>through 3c</NOBR>.
|
||||||
The flaw in the <NOBR>64-bit</NOBR> floating-point square root function was of
|
The flaw in the <NOBR>64-bit</NOBR> floating-point square root function was of
|
||||||
very minor impact, causing a <NOBR>1-ulp</NOBR> error (<NOBR>1 unit</NOBR> in
|
very minor impact, causing a <NOBR>1-ulp</NOBR> error (<NOBR>1 unit</NOBR> in
|
||||||
the last place) a few times out of a billion.
|
the last place) a few times out of a billion.
|
||||||
@@ -124,13 +131,8 @@ wrong.
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
<NOBR>Release 3d</NOBR> makes no changes to the SoftFloat library interface
|
Among earlier releases, 3b was notable for adding support for the
|
||||||
compared to the previous <NOBR>Release 3c</NOBR>.
|
<NOBR>16-bit</NOBR> half-precision format.
|
||||||
Since the original <NOBR>Release 3</NOBR>, the main changes to the interface
|
|
||||||
have been that <NOBR>Release 3b</NOBR> added support for the
|
|
||||||
<NOBR>16-bit</NOBR> half-precision format, and <NOBR>Release 3c</NOBR> added
|
|
||||||
optional support for a rarely used rounding mode, <I>round to odd</I>, also
|
|
||||||
known as <I>jamming</I>.
|
|
||||||
For more about the evolution of SoftFloat releases, see
|
For more about the evolution of SoftFloat releases, see
|
||||||
<A HREF="SoftFloat-history.html"><NOBR><CODE>SoftFloat-history.html</CODE></NOBR></A>.
|
<A HREF="SoftFloat-history.html"><NOBR><CODE>SoftFloat-history.html</CODE></NOBR></A>.
|
||||||
</P>
|
</P>
|
||||||
@@ -169,7 +171,7 @@ strictly required.
|
|||||||
<P>
|
<P>
|
||||||
Most operations not required by the original 1985 version of the IEEE
|
Most operations not required by the original 1985 version of the IEEE
|
||||||
Floating-Point Standard but added in the 2008 version are not yet supported in
|
Floating-Point Standard but added in the 2008 version are not yet supported in
|
||||||
SoftFloat <NOBR>Release 3d</NOBR>.
|
SoftFloat <NOBR>Release 3e</NOBR>.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
||||||
@@ -179,7 +181,7 @@ SoftFloat <NOBR>Release 3d</NOBR>.
|
|||||||
The SoftFloat package was written by me, <NOBR>John R.</NOBR> Hauser.
|
The SoftFloat package was written by me, <NOBR>John R.</NOBR> Hauser.
|
||||||
<NOBR>Release 3</NOBR> of SoftFloat was a completely new implementation
|
<NOBR>Release 3</NOBR> of SoftFloat was a completely new implementation
|
||||||
supplanting earlier releases.
|
supplanting earlier releases.
|
||||||
The project to create <NOBR>Release 3</NOBR> (now <NOBR>through 3d</NOBR>) was
|
The project to create <NOBR>Release 3</NOBR> (now <NOBR>through 3e</NOBR>) was
|
||||||
done in the employ of the University of California, Berkeley, within the
|
done in the employ of the University of California, Berkeley, within the
|
||||||
Department of Electrical Engineering and Computer Sciences, first for the
|
Department of Electrical Engineering and Computer Sciences, first for the
|
||||||
Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab.
|
Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab.
|
||||||
@@ -213,12 +215,12 @@ Oracle, and Samsung.
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
The following applies to the whole of SoftFloat <NOBR>Release 3d</NOBR> as well
|
The following applies to the whole of SoftFloat <NOBR>Release 3e</NOBR> as well
|
||||||
as to each source file individually.
|
as to each source file individually.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
|
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the
|
||||||
University of California.
|
University of California.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
</P>
|
</P>
|
||||||
@@ -395,7 +397,7 @@ comparisons between two values in the same floating-point format.
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
The following operations required by the 2008 IEEE Floating-Point Standard are
|
The following operations required by the 2008 IEEE Floating-Point Standard are
|
||||||
not supported in SoftFloat <NOBR>Release 3d</NOBR>:
|
not supported in SoftFloat <NOBR>Release 3e</NOBR>:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>
|
<LI>
|
||||||
<B>nextUp</B>, <B>nextDown</B>, <B>minNum</B>, <B>maxNum</B>, <B>minNumMag</B>,
|
<B>nextUp</B>, <B>nextDown</B>, <B>minNum</B>, <B>maxNum</B>, <B>minNumMag</B>,
|
||||||
@@ -445,8 +447,8 @@ exponent must both be zero.
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
SoftFloat's functions are not guaranteed to operate as expected when inputs of
|
SoftFloat’s functions are not guaranteed to operate as expected when
|
||||||
type <CODE>extFloat80_t</CODE> are non-canonical.
|
inputs of type <CODE>extFloat80_t</CODE> are non-canonical.
|
||||||
Assuming all of a function’s <CODE>extFloat80_t</CODE> inputs (if any)
|
Assuming all of a function’s <CODE>extFloat80_t</CODE> inputs (if any)
|
||||||
are canonical, function outputs of type <CODE>extFloat80_t</CODE> will always
|
are canonical, function outputs of type <CODE>extFloat80_t</CODE> will always
|
||||||
be canonical.
|
be canonical.
|
||||||
@@ -591,16 +593,15 @@ Variable <CODE>softfloat_roundingMode</CODE> is initialized to
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
If supported, mode <CODE>softfloat_round_odd</CODE> first rounds a
|
When <CODE>softfloat_round_odd</CODE> is the rounding mode for a function that
|
||||||
floating-point result to minimum magnitude, the same as
|
rounds to an integer value (either conversion to an integer format or a
|
||||||
|
‘<CODE>roundToInt</CODE>’ function), if the input is not already an
|
||||||
|
integer, the rounded result is the closest <EM>odd</EM> integer.
|
||||||
|
For other operations, this rounding mode acts as though the floating-point
|
||||||
|
result is first rounded to minimum magnitude, the same as
|
||||||
<CODE>softfloat_round_minMag</CODE>, and then, if the result is inexact, the
|
<CODE>softfloat_round_minMag</CODE>, and then, if the result is inexact, the
|
||||||
least-significant bit of the result is set <NOBR>to 1</NOBR>.
|
least-significant bit of the result is set <NOBR>to 1</NOBR>.
|
||||||
This rounding mode is also known as <EM>jamming</EM>.
|
Rounding to odd is also known as <EM>jamming</EM>.
|
||||||
As a special case, when <CODE>softfloat_round_odd</CODE> is the rounding mode
|
|
||||||
for a function that rounds to an integer value (either conversion to an integer
|
|
||||||
format or a ‘<CODE>roundToInt</CODE>’ function), rounding is the
|
|
||||||
same as <CODE>softfloat_round_minMag</CODE>, without any change to the
|
|
||||||
least-significant integer bit.
|
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<H3>6.2. Underflow Detection</H3>
|
<H3>6.2. Underflow Detection</H3>
|
||||||
@@ -820,12 +821,6 @@ The <CODE><I>roundingMode</I></CODE> argument specifies the rounding mode for
|
|||||||
the conversion.
|
the conversion.
|
||||||
The variable that usually indicates rounding mode,
|
The variable that usually indicates rounding mode,
|
||||||
<CODE>softfloat_roundingMode</CODE>, is ignored.
|
<CODE>softfloat_roundingMode</CODE>, is ignored.
|
||||||
If <CODE><I>roundingMode</I></CODE> is <CODE>softfloat_round_odd</CODE>,
|
|
||||||
rounding is to minimum magnitude, the same as
|
|
||||||
<CODE>softfloat_round_minMag</CODE>, rather than to an odd integer.
|
|
||||||
</P>
|
|
||||||
|
|
||||||
<P>
|
|
||||||
Argument <CODE><I>exact</I></CODE> determines whether the <I>inexact</I>
|
Argument <CODE><I>exact</I></CODE> determines whether the <I>inexact</I>
|
||||||
exception flag is raised if the conversion is not exact.
|
exception flag is raised if the conversion is not exact.
|
||||||
If <CODE><I>exact</I></CODE> is <CODE>true</CODE>, the <I>inexact</I> flag may
|
If <CODE><I>exact</I></CODE> is <CODE>true</CODE>, the <I>inexact</I> flag may
|
||||||
@@ -1087,12 +1082,6 @@ The <CODE><I>roundingMode</I></CODE> argument specifies the rounding mode to
|
|||||||
apply.
|
apply.
|
||||||
The variable that usually indicates rounding mode,
|
The variable that usually indicates rounding mode,
|
||||||
<CODE>softfloat_roundingMode</CODE>, is ignored.
|
<CODE>softfloat_roundingMode</CODE>, is ignored.
|
||||||
If <CODE><I>roundingMode</I></CODE> is <CODE>softfloat_round_odd</CODE>,
|
|
||||||
rounding is to minimum magnitude, the same as
|
|
||||||
<CODE>softfloat_round_minMag</CODE>, rather than to an odd integer value.
|
|
||||||
</P>
|
|
||||||
|
|
||||||
<P>
|
|
||||||
Argument <CODE><I>exact</I></CODE> determines whether the <I>inexact</I>
|
Argument <CODE><I>exact</I></CODE> determines whether the <I>inexact</I>
|
||||||
exception flag is raised if the conversion is not exact.
|
exception flag is raised if the conversion is not exact.
|
||||||
If <CODE><I>exact</I></CODE> is <CODE>true</CODE>, the <I>inexact</I> flag may
|
If <CODE><I>exact</I></CODE> is <CODE>true</CODE>, the <I>inexact</I> flag may
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the University of
|
||||||
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:
|
||||||
@@ -42,9 +42,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#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
|
||||||
@@ -90,8 +90,8 @@ struct uint128
|
|||||||
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 ( uiNonsigA0 < uiNonsigB0 ) goto returnB;
|
if ( uiA0 < uiB0 ) goto returnB;
|
||||||
if ( uiNonsigB0 < uiNonsigA0 ) 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;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the
|
||||||
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:
|
||||||
@@ -39,10 +39,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "softfloat_types.h"
|
#include "primitiveTypes.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
|
||||||
|
|
||||||
@@ -51,22 +52,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
| invalid exception.
|
| invalid exception.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
#define ui32_fromPosOverflow 0xFFFFFFFF
|
#define ui32_fromPosOverflow 0xFFFFFFFF
|
||||||
#define ui32_fromNegOverflow 0
|
#define ui32_fromNegOverflow 0xFFFFFFFF
|
||||||
#define ui32_fromNaN 0xFFFFFFFF
|
#define ui32_fromNaN 0xFFFFFFFF
|
||||||
#define i32_fromPosOverflow 0x7FFFFFFF
|
#define i32_fromPosOverflow (-0x7FFFFFFF - 1)
|
||||||
#define i32_fromNegOverflow (-0x7FFFFFFF - 1)
|
#define i32_fromNegOverflow (-0x7FFFFFFF - 1)
|
||||||
#define i32_fromNaN 0x7FFFFFFF
|
#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 0
|
#define ui64_fromNegOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF )
|
||||||
#define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF )
|
#define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF )
|
||||||
#define i64_fromPosOverflow UINT64_C( 0x7FFFFFFFFFFFFFFF )
|
#define i64_fromPosOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
|
||||||
#define i64_fromNegOverflow (-UINT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
|
#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
|
||||||
#define i64_fromNaN UINT64_C( 0x7FFFFFFFFFFFFFFF )
|
#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
|
||||||
@@ -87,30 +88,30 @@ struct commonNaN {
|
|||||||
#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
|
uint_fast16_t
|
||||||
@@ -122,30 +123,30 @@ uint_fast16_t
|
|||||||
#define defaultNaNF32UI 0xFFC00000
|
#define defaultNaNF32UI 0xFFC00000
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when 32-bit unsigned integer `uiA' has the bit pattern of a
|
| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a
|
||||||
| 32-bit floating-point signaling NaN.
|
| 32-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_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
|
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -157,30 +158,30 @@ uint_fast32_t
|
|||||||
#define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 )
|
#define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 )
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when 64-bit unsigned integer `uiA' has the bit pattern of a
|
| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a
|
||||||
| 64-bit floating-point signaling NaN.
|
| 64-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_isSigNaNF64UI( uiA ) ((((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
|
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -194,7 +195,7 @@ uint_fast64_t
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when the 80-bit unsigned integer formed from concatenating
|
| 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
|
| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended
|
||||||
| floating-point signaling NaN.
|
| floating-point signaling NaN.
|
||||||
| Note: This macro evaluates its arguments more than once.
|
| Note: This macro evaluates its arguments more than once.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
@@ -203,15 +204,15 @@ uint_fast64_t
|
|||||||
#ifdef SOFTFLOAT_FAST_INT64
|
#ifdef SOFTFLOAT_FAST_INT64
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| The following functions are needed only when `SOFTFLOAT_FAST_INT64' is
|
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is
|
||||||
| defined.
|
| defined.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -219,16 +220,16 @@ void
|
|||||||
uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -250,17 +251,17 @@ struct uint128
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when the 128-bit unsigned integer formed from concatenating
|
| 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-
|
| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating-
|
||||||
| point signaling NaN.
|
| point signaling NaN.
|
||||||
| Note: This macro evaluates its arguments more than once.
|
| Note: This macro evaluates its arguments more than once.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF ))))
|
#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF ))))
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0'
|
| 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
|
||||||
@@ -268,15 +269,15 @@ void
|
|||||||
uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point
|
| 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 * );
|
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -293,14 +294,14 @@ struct uint128
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| The following functions are needed only when `SOFTFLOAT_FAST_INT64' is not
|
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not
|
||||||
| defined.
|
| defined.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -308,9 +309,9 @@ void
|
|||||||
const struct extFloat80M *aSPtr, struct commonNaN *zPtr );
|
const struct extFloat80M *aSPtr, struct commonNaN *zPtr );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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(
|
||||||
@@ -318,8 +319,8 @@ void
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -338,10 +339,10 @@ void
|
|||||||
#define defaultNaNF128UI0 0
|
#define defaultNaNF128UI0 0
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
@@ -349,9 +350,9 @@ void
|
|||||||
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr );
|
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, 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 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
|
||||||
@@ -359,10 +360,10 @@ void
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the University of
|
||||||
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:
|
||||||
@@ -42,9 +42,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#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
|
||||||
@@ -90,8 +90,8 @@ struct uint128
|
|||||||
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 ( uiNonsigA0 < uiNonsigB0 ) goto returnB;
|
if ( uiA0 < uiB0 ) goto returnB;
|
||||||
if ( uiNonsigB0 < uiNonsigA0 ) 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;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the University of
|
||||||
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:
|
||||||
@@ -42,9 +42,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#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
|
||||||
@@ -85,8 +85,8 @@ struct uint128
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
returnLargerMag:
|
returnLargerMag:
|
||||||
uiMagA64 = uiNonsigA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF );
|
uiMagA64 = uiA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF );
|
||||||
uiMagB64 = uiNonsigB64 & 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;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the
|
||||||
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:
|
||||||
@@ -42,9 +42,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#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
|
||||||
@@ -74,8 +74,8 @@ uint_fast16_t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
returnLargerMag:
|
returnLargerMag:
|
||||||
uiMagA = uiNonsigA & 0x7FFF;
|
uiMagA = uiA & 0x7FFF;
|
||||||
uiMagB = uiNonsigB & 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;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the University of
|
||||||
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:
|
||||||
@@ -42,9 +42,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#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
|
||||||
@@ -74,8 +74,8 @@ uint_fast32_t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
returnLargerMag:
|
returnLargerMag:
|
||||||
uiMagA = uiNonsigA & 0x7FFFFFFF;
|
uiMagA = uiA & 0x7FFFFFFF;
|
||||||
uiMagB = uiNonsigB & 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;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the University of
|
||||||
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:
|
||||||
@@ -42,9 +42,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#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
|
||||||
@@ -74,8 +74,8 @@ uint_fast64_t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
returnLargerMag:
|
returnLargerMag:
|
||||||
uiMagA = uiNonsigA & UINT64_C( 0x7FFFFFFFFFFFFFFF );
|
uiMagA = uiA & UINT64_C( 0x7FFFFFFFFFFFFFFF );
|
||||||
uiMagB = uiNonsigB & 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;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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.
|
||||||
|
|||||||
+63
-62
@@ -2,10 +2,10 @@
|
|||||||
/*============================================================================
|
/*============================================================================
|
||||||
|
|
||||||
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 3d, 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, 2018 The Regents of the
|
||||||
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:
|
||||||
@@ -39,10 +39,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "softfloat_types.h"
|
#include "primitiveTypes.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
|
||||||
|
|
||||||
@@ -51,22 +52,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
| invalid exception.
|
| invalid exception.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
#define ui32_fromPosOverflow 0xFFFFFFFF
|
#define ui32_fromPosOverflow 0xFFFFFFFF
|
||||||
#define ui32_fromNegOverflow 0
|
#define ui32_fromNegOverflow 0xFFFFFFFF
|
||||||
#define ui32_fromNaN 0xFFFFFFFF
|
#define ui32_fromNaN 0xFFFFFFFF
|
||||||
#define i32_fromPosOverflow 0x7FFFFFFF
|
#define i32_fromPosOverflow (-0x7FFFFFFF - 1)
|
||||||
#define i32_fromNegOverflow (-0x7FFFFFFF - 1)
|
#define i32_fromNegOverflow (-0x7FFFFFFF - 1)
|
||||||
#define i32_fromNaN 0x7FFFFFFF
|
#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 0
|
#define ui64_fromNegOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF )
|
||||||
#define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF )
|
#define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF )
|
||||||
#define i64_fromPosOverflow UINT64_C( 0x7FFFFFFFFFFFFFFF )
|
#define i64_fromPosOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
|
||||||
#define i64_fromNegOverflow (-UINT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
|
#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
|
||||||
#define i64_fromNaN UINT64_C( 0x7FFFFFFFFFFFFFFF )
|
#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
|
||||||
@@ -87,30 +88,30 @@ struct commonNaN {
|
|||||||
#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
|
uint_fast16_t
|
||||||
@@ -122,30 +123,30 @@ uint_fast16_t
|
|||||||
#define defaultNaNF32UI 0xFFC00000
|
#define defaultNaNF32UI 0xFFC00000
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when 32-bit unsigned integer `uiA' has the bit pattern of a
|
| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a
|
||||||
| 32-bit floating-point signaling NaN.
|
| 32-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_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
|
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -157,30 +158,30 @@ uint_fast32_t
|
|||||||
#define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 )
|
#define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 )
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when 64-bit unsigned integer `uiA' has the bit pattern of a
|
| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a
|
||||||
| 64-bit floating-point signaling NaN.
|
| 64-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_isSigNaNF64UI( uiA ) ((((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
|
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -194,7 +195,7 @@ uint_fast64_t
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when the 80-bit unsigned integer formed from concatenating
|
| 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
|
| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended
|
||||||
| floating-point signaling NaN.
|
| floating-point signaling NaN.
|
||||||
| Note: This macro evaluates its arguments more than once.
|
| Note: This macro evaluates its arguments more than once.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
@@ -203,15 +204,15 @@ uint_fast64_t
|
|||||||
#ifdef SOFTFLOAT_FAST_INT64
|
#ifdef SOFTFLOAT_FAST_INT64
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| The following functions are needed only when `SOFTFLOAT_FAST_INT64' is
|
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is
|
||||||
| defined.
|
| defined.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -219,16 +220,16 @@ void
|
|||||||
uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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 );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -250,17 +251,17 @@ struct uint128
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns true when the 128-bit unsigned integer formed from concatenating
|
| 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-
|
| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating-
|
||||||
| point signaling NaN.
|
| point signaling NaN.
|
||||||
| Note: This macro evaluates its arguments more than once.
|
| Note: This macro evaluates its arguments more than once.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF ))))
|
#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF ))))
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0'
|
| 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
|
||||||
@@ -268,15 +269,15 @@ void
|
|||||||
uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point
|
| 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 * );
|
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -293,14 +294,14 @@ struct uint128
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| The following functions are needed only when `SOFTFLOAT_FAST_INT64' is not
|
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not
|
||||||
| defined.
|
| defined.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -308,9 +309,9 @@ void
|
|||||||
const struct extFloat80M *aSPtr, struct commonNaN *zPtr );
|
const struct extFloat80M *aSPtr, struct commonNaN *zPtr );
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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(
|
||||||
@@ -318,8 +319,8 @@ void
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
@@ -338,10 +339,10 @@ void
|
|||||||
#define defaultNaNF128UI0 0
|
#define defaultNaNF128UI0 0
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
@@ -349,9 +350,9 @@ void
|
|||||||
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr );
|
softfloat_f128MToCommonNaN( const uint32_t *aWPtr, 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 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
|
||||||
@@ -359,10 +360,10 @@ void
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| 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
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
bool extF80M_isSignalingNaN( const extFloat80_t *aPtr )
|
||||||
|
{
|
||||||
|
const struct extFloat80M *aSPtr;
|
||||||
|
uint64_t uiA0;
|
||||||
|
|
||||||
|
aSPtr = (const struct extFloat80M *) aPtr;
|
||||||
|
if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false;
|
||||||
|
uiA0 = aSPtr->signif;
|
||||||
|
return
|
||||||
|
! (uiA0 & UINT64_C( 0x4000000000000000 ))
|
||||||
|
&& (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitives.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
bool f128M_isSignalingNaN( const float128_t *aPtr )
|
||||||
|
{
|
||||||
|
const uint32_t *aWPtr;
|
||||||
|
uint32_t uiA96;
|
||||||
|
|
||||||
|
aWPtr = (const uint32_t *) aPtr;
|
||||||
|
uiA96 = aWPtr[indexWordHi( 4 )];
|
||||||
|
if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false;
|
||||||
|
return
|
||||||
|
((uiA96 & 0x00007FFF) != 0)
|
||||||
|
|| ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )]
|
||||||
|
| aWPtr[indexWord( 4, 0 )])
|
||||||
|
!= 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
#include "softfloat_types.h"
|
||||||
|
|
||||||
|
#define softfloat_commonNaNToExtF80M softfloat_commonNaNToExtF80M
|
||||||
|
#include "specialize.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
|
||||||
|
| floating-point NaN, and stores this NaN at the location pointed to by
|
||||||
|
| 'zSPtr'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
softfloat_commonNaNToExtF80M(
|
||||||
|
const struct commonNaN *aPtr, struct extFloat80M *zSPtr )
|
||||||
|
{
|
||||||
|
|
||||||
|
zSPtr->signExp = defaultNaNExtF80UI64;
|
||||||
|
zSPtr->signif = defaultNaNExtF80UI0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
|
||||||
|
#define softfloat_commonNaNToExtF80UI softfloat_commonNaNToExtF80UI
|
||||||
|
#include "specialize.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
|
||||||
|
| floating-point NaN, and returns the bit pattern of this value as an unsigned
|
||||||
|
| integer.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr )
|
||||||
|
{
|
||||||
|
struct uint128 uiZ;
|
||||||
|
|
||||||
|
uiZ.v64 = defaultNaNExtF80UI64;
|
||||||
|
uiZ.v0 = defaultNaNExtF80UI0;
|
||||||
|
return uiZ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
|
||||||
|
#define softfloat_commonNaNToF128M softfloat_commonNaNToF128M
|
||||||
|
#include "specialize.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
|
||||||
|
| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument
|
||||||
|
| 'zWPtr' points to an array of four 32-bit elements that concatenate in the
|
||||||
|
| platform's normal endian order to form a 128-bit floating-point value.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr )
|
||||||
|
{
|
||||||
|
|
||||||
|
zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96;
|
||||||
|
zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64;
|
||||||
|
zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32;
|
||||||
|
zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
|
||||||
|
#define softfloat_commonNaNToF128UI softfloat_commonNaNToF128UI
|
||||||
|
#include "specialize.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
|
||||||
|
| NaN, and returns the bit pattern of this value as an unsigned integer.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr )
|
||||||
|
{
|
||||||
|
struct uint128 uiZ;
|
||||||
|
|
||||||
|
uiZ.v64 = defaultNaNF128UI64;
|
||||||
|
uiZ.v0 = defaultNaNF128UI0;
|
||||||
|
return uiZ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| This file intentionally contains no code.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
#include "specialize.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming at least one of the two 80-bit extended floating-point values
|
||||||
|
| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result
|
||||||
|
| at the location pointed to by 'zSPtr'. If either original floating-point
|
||||||
|
| value is a signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
softfloat_propagateNaNExtF80M(
|
||||||
|
const struct extFloat80M *aSPtr,
|
||||||
|
const struct extFloat80M *bSPtr,
|
||||||
|
struct extFloat80M *zSPtr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint_fast16_t ui64;
|
||||||
|
uint_fast64_t ui0;
|
||||||
|
|
||||||
|
ui64 = aSPtr->signExp;
|
||||||
|
ui0 = aSPtr->signif;
|
||||||
|
if (
|
||||||
|
softfloat_isSigNaNExtF80UI( ui64, ui0 )
|
||||||
|
|| (bSPtr
|
||||||
|
&& (ui64 = bSPtr->signExp,
|
||||||
|
ui0 = bSPtr->signif,
|
||||||
|
softfloat_isSigNaNExtF80UI( ui64, ui0 )))
|
||||||
|
) {
|
||||||
|
softfloat_raiseFlags( softfloat_flag_invalid );
|
||||||
|
}
|
||||||
|
zSPtr->signExp = defaultNaNExtF80UI64;
|
||||||
|
zSPtr->signif = defaultNaNExtF80UI0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
#include "specialize.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting the unsigned integer formed from concatenating 'uiA64' and
|
||||||
|
| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
|
||||||
|
| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
|
||||||
|
| 80-bit extended floating-point value, and assuming at least on of these
|
||||||
|
| floating-point values is a NaN, returns the bit pattern of the combined NaN
|
||||||
|
| result. If either original floating-point value is a signaling NaN, the
|
||||||
|
| invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
struct uint128
|
||||||
|
softfloat_propagateNaNExtF80UI(
|
||||||
|
uint_fast16_t uiA64,
|
||||||
|
uint_fast64_t uiA0,
|
||||||
|
uint_fast16_t uiB64,
|
||||||
|
uint_fast64_t uiB0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
struct uint128 uiZ;
|
||||||
|
|
||||||
|
if (
|
||||||
|
softfloat_isSigNaNExtF80UI( uiA64, uiA0 )
|
||||||
|
|| softfloat_isSigNaNExtF80UI( uiB64, uiB0 )
|
||||||
|
) {
|
||||||
|
softfloat_raiseFlags( softfloat_flag_invalid );
|
||||||
|
}
|
||||||
|
uiZ.v64 = defaultNaNExtF80UI64;
|
||||||
|
uiZ.v0 = defaultNaNExtF80UI0;
|
||||||
|
return uiZ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
#include "specialize.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming at least one of the two 128-bit floating-point values pointed to by
|
||||||
|
| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location
|
||||||
|
| pointed to by 'zWPtr'. If either original floating-point value is a
|
||||||
|
| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr',
|
||||||
|
| and 'zWPtr' points to an array of four 32-bit elements that concatenate in
|
||||||
|
| the platform's normal endian order to form a 128-bit floating-point value.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
softfloat_propagateNaNF128M(
|
||||||
|
const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr )
|
||||||
|
{
|
||||||
|
|
||||||
|
if (
|
||||||
|
f128M_isSignalingNaN( (const float128_t *) aWPtr );
|
||||||
|
|| (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr ))
|
||||||
|
) {
|
||||||
|
softfloat_raiseFlags( softfloat_flag_invalid );
|
||||||
|
}
|
||||||
|
zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96;
|
||||||
|
zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64;
|
||||||
|
zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32;
|
||||||
|
zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
#include "specialize.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting the unsigned integer formed from concatenating 'uiA64' and
|
||||||
|
| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the
|
||||||
|
| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
|
||||||
|
| 128-bit floating-point value, and assuming at least on of these floating-
|
||||||
|
| point values is a NaN, returns the bit pattern of the combined NaN result.
|
||||||
|
| If either original floating-point value is a signaling NaN, the invalid
|
||||||
|
| exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
struct uint128
|
||||||
|
softfloat_propagateNaNF128UI(
|
||||||
|
uint_fast64_t uiA64,
|
||||||
|
uint_fast64_t uiA0,
|
||||||
|
uint_fast64_t uiB64,
|
||||||
|
uint_fast64_t uiB0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
struct uint128 uiZ;
|
||||||
|
|
||||||
|
if (
|
||||||
|
softfloat_isSigNaNF128UI( uiA64, uiA0 )
|
||||||
|
|| softfloat_isSigNaNF128UI( uiB64, uiB0 )
|
||||||
|
) {
|
||||||
|
softfloat_raiseFlags( softfloat_flag_invalid );
|
||||||
|
}
|
||||||
|
uiZ.v64 = defaultNaNF128UI64;
|
||||||
|
uiZ.v0 = defaultNaNF128UI0;
|
||||||
|
return uiZ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
|
||||||
|
University of California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "specialize.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating-
|
||||||
|
| point values, at least one of which is a NaN, returns the bit pattern of
|
||||||
|
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
|
||||||
|
| signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
uint_fast16_t
|
||||||
|
softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB )
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) ) {
|
||||||
|
softfloat_raiseFlags( softfloat_flag_invalid );
|
||||||
|
}
|
||||||
|
return defaultNaNF16UI;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "specialize.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating-
|
||||||
|
| point values, at least one of which is a NaN, returns the bit pattern of
|
||||||
|
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
|
||||||
|
| signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
uint_fast32_t
|
||||||
|
softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB )
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) ) {
|
||||||
|
softfloat_raiseFlags( softfloat_flag_invalid );
|
||||||
|
}
|
||||||
|
return defaultNaNF32UI;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "platform.h"
|
||||||
|
#include "specialize.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating-
|
||||||
|
| point values, at least one of which is a NaN, returns the bit pattern of
|
||||||
|
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
|
||||||
|
| signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
uint_fast64_t
|
||||||
|
softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB )
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) ) {
|
||||||
|
softfloat_raiseFlags( softfloat_flag_invalid );
|
||||||
|
}
|
||||||
|
return defaultNaNF64UI;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of
|
||||||
|
California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Raises the exceptions specified by 'flags'. Floating-point traps can be
|
||||||
|
| defined here if desired. It is currently not possible for such a trap
|
||||||
|
| to substitute a result value. If traps are not implemented, this routine
|
||||||
|
| should be simply 'softfloat_exceptionFlags |= flags;'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void softfloat_raiseFlags( uint_fast8_t flags )
|
||||||
|
{
|
||||||
|
|
||||||
|
softfloat_exceptionFlags |= flags;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,407 @@
|
|||||||
|
|
||||||
|
/*============================================================================
|
||||||
|
|
||||||
|
This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
|
||||||
|
Package, Release 3e, by John R. Hauser.
|
||||||
|
|
||||||
|
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the
|
||||||
|
University of California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions, and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the University nor the names of its contributors may
|
||||||
|
be used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=============================================================================*/
|
||||||
|
|
||||||
|
#ifndef specialize_h
|
||||||
|
#define specialize_h 1
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "primitiveTypes.h"
|
||||||
|
#include "softfloat.h"
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Default value for 'softfloat_detectTininess'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define init_detectTininess softfloat_tininess_beforeRounding
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The values to return on conversions to 32-bit integer formats that raise an
|
||||||
|
| invalid exception.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define ui32_fromPosOverflow 0xFFFFFFFF
|
||||||
|
#define ui32_fromNegOverflow 0
|
||||||
|
#define ui32_fromNaN 0
|
||||||
|
#define i32_fromPosOverflow 0x7FFFFFFF
|
||||||
|
#define i32_fromNegOverflow (-0x7FFFFFFF - 1)
|
||||||
|
#define i32_fromNaN 0
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The values to return on conversions to 64-bit integer formats that raise an
|
||||||
|
| invalid exception.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF )
|
||||||
|
#define ui64_fromNegOverflow 0
|
||||||
|
#define ui64_fromNaN 0
|
||||||
|
#define i64_fromPosOverflow INT64_C( 0x7FFFFFFFFFFFFFFF )
|
||||||
|
#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1)
|
||||||
|
#define i64_fromNaN 0
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| "Common NaN" structure, used to transfer NaN representations from one format
|
||||||
|
| to another.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
struct commonNaN { char _unused; };
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The bit pattern for a default generated 16-bit floating-point NaN.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define defaultNaNF16UI 0x7E00
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a
|
||||||
|
| 16-bit floating-point signaling NaN.
|
||||||
|
| Note: This macro evaluates its argument more than once.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF))
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts
|
||||||
|
| this NaN to the common NaN form, and stores the resulting common NaN at the
|
||||||
|
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
|
||||||
|
| exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_f16UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & 0x0200) ) softfloat_raiseFlags( softfloat_flag_invalid )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point
|
||||||
|
| NaN, and returns the bit pattern of this value as an unsigned integer.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_commonNaNToF16UI( aPtr ) ((uint_fast16_t) defaultNaNF16UI)
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating-
|
||||||
|
| point values, at least one of which is a NaN, returns the bit pattern of
|
||||||
|
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
|
||||||
|
| signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
uint_fast16_t
|
||||||
|
softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB );
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The bit pattern for a default generated 32-bit floating-point NaN.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define defaultNaNF32UI 0x7FC00000
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a
|
||||||
|
| 32-bit floating-point signaling NaN.
|
||||||
|
| Note: This macro evaluates its argument more than once.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF))
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts
|
||||||
|
| this NaN to the common NaN form, and stores the resulting common NaN at the
|
||||||
|
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
|
||||||
|
| exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_f32UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & 0x00400000) ) softfloat_raiseFlags( softfloat_flag_invalid )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point
|
||||||
|
| NaN, and returns the bit pattern of this value as an unsigned integer.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_commonNaNToF32UI( aPtr ) ((uint_fast32_t) defaultNaNF32UI)
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating-
|
||||||
|
| point values, at least one of which is a NaN, returns the bit pattern of
|
||||||
|
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
|
||||||
|
| signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
uint_fast32_t
|
||||||
|
softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB );
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The bit pattern for a default generated 64-bit floating-point NaN.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define defaultNaNF64UI UINT64_C( 0x7FF8000000000000 )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a
|
||||||
|
| 64-bit floating-point signaling NaN.
|
||||||
|
| Note: This macro evaluates its argument more than once.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF )))
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts
|
||||||
|
| this NaN to the common NaN form, and stores the resulting common NaN at the
|
||||||
|
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
|
||||||
|
| exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_f64UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & UINT64_C( 0x0008000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point
|
||||||
|
| NaN, and returns the bit pattern of this value as an unsigned integer.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_commonNaNToF64UI( aPtr ) ((uint_fast64_t) defaultNaNF64UI)
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating-
|
||||||
|
| point values, at least one of which is a NaN, returns the bit pattern of
|
||||||
|
| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a
|
||||||
|
| signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
uint_fast64_t
|
||||||
|
softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB );
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The bit pattern for a default generated 80-bit extended floating-point NaN.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define defaultNaNExtF80UI64 0x7FFF
|
||||||
|
#define defaultNaNExtF80UI0 UINT64_C( 0xC000000000000000 )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns true when the 80-bit unsigned integer formed from concatenating
|
||||||
|
| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended
|
||||||
|
| floating-point signaling NaN.
|
||||||
|
| Note: This macro evaluates its arguments more than once.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF )))
|
||||||
|
|
||||||
|
#ifdef SOFTFLOAT_FAST_INT64
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is
|
||||||
|
| defined.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0'
|
||||||
|
| has the bit pattern of an 80-bit extended floating-point NaN, converts
|
||||||
|
| this NaN to the common NaN form, and stores the resulting common NaN at the
|
||||||
|
| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid
|
||||||
|
| exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_extF80UIToCommonNaN( uiA64, uiA0, zPtr ) if ( ! ((uiA0) & UINT64_C( 0x4000000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
|
||||||
|
| floating-point NaN, and returns the bit pattern of this value as an unsigned
|
||||||
|
| integer.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#if defined INLINE && ! defined softfloat_commonNaNToExtF80UI
|
||||||
|
INLINE
|
||||||
|
struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr )
|
||||||
|
{
|
||||||
|
struct uint128 uiZ;
|
||||||
|
uiZ.v64 = defaultNaNExtF80UI64;
|
||||||
|
uiZ.v0 = defaultNaNExtF80UI0;
|
||||||
|
return uiZ;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting the unsigned integer formed from concatenating 'uiA64' and
|
||||||
|
| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting
|
||||||
|
| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
|
||||||
|
| 80-bit extended floating-point value, and assuming at least on of these
|
||||||
|
| floating-point values is a NaN, returns the bit pattern of the combined NaN
|
||||||
|
| result. If either original floating-point value is a signaling NaN, the
|
||||||
|
| invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
struct uint128
|
||||||
|
softfloat_propagateNaNExtF80UI(
|
||||||
|
uint_fast16_t uiA64,
|
||||||
|
uint_fast64_t uiA0,
|
||||||
|
uint_fast16_t uiB64,
|
||||||
|
uint_fast64_t uiB0
|
||||||
|
);
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The bit pattern for a default generated 128-bit floating-point NaN.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define defaultNaNF128UI64 UINT64_C( 0x7FFF800000000000 )
|
||||||
|
#define defaultNaNF128UI0 UINT64_C( 0 )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns true when the 128-bit unsigned integer formed from concatenating
|
||||||
|
| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating-
|
||||||
|
| point signaling NaN.
|
||||||
|
| Note: This macro evaluates its arguments more than once.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF ))))
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0'
|
||||||
|
| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to
|
||||||
|
| the common NaN form, and stores the resulting common NaN at the location
|
||||||
|
| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception
|
||||||
|
| is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_f128UIToCommonNaN( uiA64, uiA0, zPtr ) if ( ! ((uiA64) & UINT64_C( 0x0000800000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
|
||||||
|
| NaN, and returns the bit pattern of this value as an unsigned integer.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#if defined INLINE && ! defined softfloat_commonNaNToF128UI
|
||||||
|
INLINE
|
||||||
|
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr )
|
||||||
|
{
|
||||||
|
struct uint128 uiZ;
|
||||||
|
uiZ.v64 = defaultNaNF128UI64;
|
||||||
|
uiZ.v0 = defaultNaNF128UI0;
|
||||||
|
return uiZ;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Interpreting the unsigned integer formed from concatenating 'uiA64' and
|
||||||
|
| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the
|
||||||
|
| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another
|
||||||
|
| 128-bit floating-point value, and assuming at least on of these floating-
|
||||||
|
| point values is a NaN, returns the bit pattern of the combined NaN result.
|
||||||
|
| If either original floating-point value is a signaling NaN, the invalid
|
||||||
|
| exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
struct uint128
|
||||||
|
softfloat_propagateNaNF128UI(
|
||||||
|
uint_fast64_t uiA64,
|
||||||
|
uint_fast64_t uiA0,
|
||||||
|
uint_fast64_t uiB64,
|
||||||
|
uint_fast64_t uiB0
|
||||||
|
);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not
|
||||||
|
| defined.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is
|
||||||
|
| a NaN, converts this NaN to the common NaN form, and stores the resulting
|
||||||
|
| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling
|
||||||
|
| NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_extF80MToCommonNaN( aSPtr, zPtr ) if ( ! ((aSPtr)->signif & UINT64_C( 0x4000000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended
|
||||||
|
| floating-point NaN, and stores this NaN at the location pointed to by
|
||||||
|
| 'zSPtr'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#if defined INLINE && ! defined softfloat_commonNaNToExtF80M
|
||||||
|
INLINE
|
||||||
|
void
|
||||||
|
softfloat_commonNaNToExtF80M(
|
||||||
|
const struct commonNaN *aPtr, struct extFloat80M *zSPtr )
|
||||||
|
{
|
||||||
|
zSPtr->signExp = defaultNaNExtF80UI64;
|
||||||
|
zSPtr->signif = defaultNaNExtF80UI0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void
|
||||||
|
softfloat_commonNaNToExtF80M(
|
||||||
|
const struct commonNaN *aPtr, struct extFloat80M *zSPtr );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming at least one of the two 80-bit extended floating-point values
|
||||||
|
| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result
|
||||||
|
| at the location pointed to by 'zSPtr'. If either original floating-point
|
||||||
|
| value is a signaling NaN, the invalid exception is raised.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
softfloat_propagateNaNExtF80M(
|
||||||
|
const struct extFloat80M *aSPtr,
|
||||||
|
const struct extFloat80M *bSPtr,
|
||||||
|
struct extFloat80M *zSPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| The bit pattern for a default generated 128-bit floating-point NaN.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define defaultNaNF128UI96 0x7FFF8000
|
||||||
|
#define defaultNaNF128UI64 0
|
||||||
|
#define defaultNaNF128UI32 0
|
||||||
|
#define defaultNaNF128UI0 0
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN,
|
||||||
|
| converts this NaN to the common NaN form, and stores the resulting common
|
||||||
|
| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN,
|
||||||
|
| the invalid exception is raised. Argument 'aWPtr' points to an array of
|
||||||
|
| four 32-bit elements that concatenate in the platform's normal endian order
|
||||||
|
| to form a 128-bit floating-point value.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#define softfloat_f128MToCommonNaN( aWPtr, zPtr ) if ( ! ((aWPtr)[indexWordHi( 4 )] & UINT64_C( 0x0000800000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid )
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point
|
||||||
|
| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument
|
||||||
|
| 'zWPtr' points to an array of four 32-bit elements that concatenate in the
|
||||||
|
| platform's normal endian order to form a 128-bit floating-point value.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#if defined INLINE && ! defined softfloat_commonNaNToF128M
|
||||||
|
INLINE
|
||||||
|
void
|
||||||
|
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr )
|
||||||
|
{
|
||||||
|
zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96;
|
||||||
|
zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64;
|
||||||
|
zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32;
|
||||||
|
zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void
|
||||||
|
softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Assuming at least one of the two 128-bit floating-point values pointed to by
|
||||||
|
| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location
|
||||||
|
| pointed to by 'zWPtr'. If either original floating-point value is a
|
||||||
|
| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr',
|
||||||
|
| and 'zWPtr' points to an array of four 32-bit elements that concatenate in
|
||||||
|
| the platform's normal endian order to form a 128-bit floating-point value.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
softfloat_propagateNaNF128M(
|
||||||
|
const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user