Commit 9954c743 by Joseph Myers Committed by Joseph Myers

float128-cmp-invalid.c, [...]: New tests.

gcc/testsuite:
	* gcc.dg/torture/float128-cmp-invalid.c,
	gcc.dg/torture/float128-div-underflow.c,
	gcc.dg/torture/float128-extend-nan.c,
	gcc.dg/torture/fp-int-convert-float128-timode-3.c: New tests.

libgcc:
	* soft-fp/README: Update.
	* soft-fp/adddf3.c: Update from glibc.
	* soft-fp/addsf3.c: Likewise.
	* soft-fp/addtf3.c: Likewise.
	* soft-fp/divdf3.c: Likewise.
	* soft-fp/divsf3.c: Likewise.
	* soft-fp/divtf3.c: Likewise.
	* soft-fp/double.h: Likewise.
	* soft-fp/eqdf2.c: Likewise.
	* soft-fp/eqsf2.c: Likewise.
	* soft-fp/eqtf2.c: Likewise.
	* soft-fp/extenddftf2.c: Likewise.
	* soft-fp/extended.h: Likewise.
	* soft-fp/extendsfdf2.c: Likewise.
	* soft-fp/extendsftf2.c: Likewise.
	* soft-fp/extendxftf2.c: Likewise.
	* soft-fp/fixdfdi.c: Likewise.
	* soft-fp/fixdfsi.c: Likewise.
	* soft-fp/fixdfti.c: Likewise.
	* soft-fp/fixsfdi.c: Likewise.
	* soft-fp/fixsfsi.c: Likewise.
	* soft-fp/fixsfti.c: Likewise.
	* soft-fp/fixtfdi.c: Likewise.
	* soft-fp/fixtfsi.c: Likewise.
	* soft-fp/fixtfti.c: Likewise.
	* soft-fp/fixunsdfdi.c: Likewise.
	* soft-fp/fixunsdfsi.c: Likewise.
	* soft-fp/fixunsdfti.c: Likewise.
	* soft-fp/fixunssfdi.c: Likewise.
	* soft-fp/fixunssfsi.c: Likewise.
	* soft-fp/fixunssfti.c: Likewise.
	* soft-fp/fixunstfdi.c: Likewise.
	* soft-fp/fixunstfsi.c: Likewise.
	* soft-fp/fixunstfti.c: Likewise.
	* soft-fp/floatdidf.c: Likewise.
	* soft-fp/floatdisf.c: Likewise.
	* soft-fp/floatditf.c: Likewise.
	* soft-fp/floatsidf.c: Likewise.
	* soft-fp/floatsisf.c: Likewise.
	* soft-fp/floatsitf.c: Likewise.
	* soft-fp/floattidf.c: Likewise.
	* soft-fp/floattisf.c: Likewise.
	* soft-fp/floattitf.c: Likewise.
	* soft-fp/floatundidf.c: Likewise.
	* soft-fp/floatundisf.c: Likewise.
	* soft-fp/floatunditf.c: Likewise.
	* soft-fp/floatunsidf.c: Likewise.
	* soft-fp/floatunsisf.c: Likewise.
	* soft-fp/floatunsitf.c: Likewise.
	* soft-fp/floatuntidf.c: Likewise.
	* soft-fp/floatuntisf.c: Likewise.
	* soft-fp/floatuntitf.c: Likewise.
	* soft-fp/gedf2.c: Likewise.
	* soft-fp/gesf2.c: Likewise.
	* soft-fp/getf2.c: Likewise.
	* soft-fp/ledf2.c: Likewise.
	* soft-fp/lesf2.c: Likewise.
	* soft-fp/letf2.c: Likewise.
	* soft-fp/muldf3.c: Likewise.
	* soft-fp/mulsf3.c: Likewise.
	* soft-fp/multf3.c: Likewise.
	* soft-fp/negdf2.c: Likewise.
	* soft-fp/negsf2.c: Likewise.
	* soft-fp/negtf2.c: Likewise.
	* soft-fp/op-1.h: Likewise.
	* soft-fp/op-2.h: Likewise.
	* soft-fp/op-4.h: Likewise.
	* soft-fp/op-8.h: Likewise.
	* soft-fp/op-common.h: Likewise.
	* soft-fp/quad.h: Likewise.
	* soft-fp/single.h: Likewise.
	* soft-fp/soft-fp.h: Likewise.
	* soft-fp/subdf3.c: Likewise.
	* soft-fp/subsf3.c: Likewise.
	* soft-fp/subtf3.c: Likewise.
	* soft-fp/truncdfsf2.c: Likewise.
	* soft-fp/trunctfdf2.c: Likewise.
	* soft-fp/trunctfsf2.c: Likewise.
	* soft-fp/trunctfxf2.c: Likewise.
	* soft-fp/unorddf2.c: Likewise.
	* soft-fp/unordsf2.c: Likewise.
	* soft-fp/unordtf2.c: Likewise.

From-SVN: r204489
parent 3c40bae1
2013-11-06 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/torture/float128-cmp-invalid.c,
gcc.dg/torture/float128-div-underflow.c,
gcc.dg/torture/float128-extend-nan.c,
gcc.dg/torture/fp-int-convert-float128-timode-3.c: New tests.
2013-11-06 Oleg Endo <olegendo@gcc.gnu.org> 2013-11-06 Oleg Endo <olegendo@gcc.gnu.org>
* gcc.target/sh/pr51244-11.c: Remove target line. * gcc.target/sh/pr51244-11.c: Remove target line.
......
/* Test for "invalid" exceptions from __float128 comparisons. */
/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
/* { dg-options "" } */
#include <fenv.h>
#include <stdlib.h>
int
main (void)
{
volatile __float128 a = __builtin_nan (""), b = 0;
volatile int r = a < b;
if (!fetestexcept (FE_INVALID))
abort ();
if (r)
abort ();
exit (0);
}
/* Test for spurious underflow from __float128 division. */
/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
/* { dg-options "" } */
#include <fenv.h>
#include <stdlib.h>
int
main (void)
{
volatile __float128 a = 0x0.fffp-16382q, b = 0x0.fffp0q, c;
c = a / b;
if (fetestexcept (FE_UNDERFLOW | FE_INEXACT))
abort ();
if (c != 0x1p-16382q)
abort ();
exit (0);
}
/* Test extensions to __float128 quiet signaling NaNs. */
/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
/* { dg-options "-fsignaling-nans" } */
#include <fenv.h>
#include <float.h>
#include <stdlib.h>
volatile long double a = __builtin_nansl ("");
int
main (void)
{
#if LDBL_MANT_DIG < 113
volatile __float128 r = a;
feclearexcept (FE_INVALID);
r += 1;
if (fetestexcept (FE_INVALID))
abort ();
#endif
exit (0);
}
/* Test for correct rounding of conversions from __int128 to
__float128. */
/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
/* { dg-require-effective-target int128 } */
/* { dg-options "-frounding-math" } */
#include <fenv.h>
#include <stdlib.h>
int
main (void)
{
volatile unsigned long long h = -1ULL;
volatile unsigned __int128 u128 = (((unsigned __int128) h) << 64) | h;
volatile __int128 s128 = u128 >> 1;
fesetround (FE_TOWARDZERO);
__float128 ru = u128, rs = s128;
if (ru != 0x1.ffffffffffffffffffffffffffffp127q)
abort ();
if (rs != 0x1.ffffffffffffffffffffffffffffp126q)
abort ();
exit (0);
}
2013-11-06 Joseph Myers <joseph@codesourcery.com>
* soft-fp/README: Update.
* soft-fp/adddf3.c: Update from glibc.
* soft-fp/addsf3.c: Likewise.
* soft-fp/addtf3.c: Likewise.
* soft-fp/divdf3.c: Likewise.
* soft-fp/divsf3.c: Likewise.
* soft-fp/divtf3.c: Likewise.
* soft-fp/double.h: Likewise.
* soft-fp/eqdf2.c: Likewise.
* soft-fp/eqsf2.c: Likewise.
* soft-fp/eqtf2.c: Likewise.
* soft-fp/extenddftf2.c: Likewise.
* soft-fp/extended.h: Likewise.
* soft-fp/extendsfdf2.c: Likewise.
* soft-fp/extendsftf2.c: Likewise.
* soft-fp/extendxftf2.c: Likewise.
* soft-fp/fixdfdi.c: Likewise.
* soft-fp/fixdfsi.c: Likewise.
* soft-fp/fixdfti.c: Likewise.
* soft-fp/fixsfdi.c: Likewise.
* soft-fp/fixsfsi.c: Likewise.
* soft-fp/fixsfti.c: Likewise.
* soft-fp/fixtfdi.c: Likewise.
* soft-fp/fixtfsi.c: Likewise.
* soft-fp/fixtfti.c: Likewise.
* soft-fp/fixunsdfdi.c: Likewise.
* soft-fp/fixunsdfsi.c: Likewise.
* soft-fp/fixunsdfti.c: Likewise.
* soft-fp/fixunssfdi.c: Likewise.
* soft-fp/fixunssfsi.c: Likewise.
* soft-fp/fixunssfti.c: Likewise.
* soft-fp/fixunstfdi.c: Likewise.
* soft-fp/fixunstfsi.c: Likewise.
* soft-fp/fixunstfti.c: Likewise.
* soft-fp/floatdidf.c: Likewise.
* soft-fp/floatdisf.c: Likewise.
* soft-fp/floatditf.c: Likewise.
* soft-fp/floatsidf.c: Likewise.
* soft-fp/floatsisf.c: Likewise.
* soft-fp/floatsitf.c: Likewise.
* soft-fp/floattidf.c: Likewise.
* soft-fp/floattisf.c: Likewise.
* soft-fp/floattitf.c: Likewise.
* soft-fp/floatundidf.c: Likewise.
* soft-fp/floatundisf.c: Likewise.
* soft-fp/floatunditf.c: Likewise.
* soft-fp/floatunsidf.c: Likewise.
* soft-fp/floatunsisf.c: Likewise.
* soft-fp/floatunsitf.c: Likewise.
* soft-fp/floatuntidf.c: Likewise.
* soft-fp/floatuntisf.c: Likewise.
* soft-fp/floatuntitf.c: Likewise.
* soft-fp/gedf2.c: Likewise.
* soft-fp/gesf2.c: Likewise.
* soft-fp/getf2.c: Likewise.
* soft-fp/ledf2.c: Likewise.
* soft-fp/lesf2.c: Likewise.
* soft-fp/letf2.c: Likewise.
* soft-fp/muldf3.c: Likewise.
* soft-fp/mulsf3.c: Likewise.
* soft-fp/multf3.c: Likewise.
* soft-fp/negdf2.c: Likewise.
* soft-fp/negsf2.c: Likewise.
* soft-fp/negtf2.c: Likewise.
* soft-fp/op-1.h: Likewise.
* soft-fp/op-2.h: Likewise.
* soft-fp/op-4.h: Likewise.
* soft-fp/op-8.h: Likewise.
* soft-fp/op-common.h: Likewise.
* soft-fp/quad.h: Likewise.
* soft-fp/single.h: Likewise.
* soft-fp/soft-fp.h: Likewise.
* soft-fp/subdf3.c: Likewise.
* soft-fp/subsf3.c: Likewise.
* soft-fp/subtf3.c: Likewise.
* soft-fp/truncdfsf2.c: Likewise.
* soft-fp/trunctfdf2.c: Likewise.
* soft-fp/trunctfsf2.c: Likewise.
* soft-fp/trunctfxf2.c: Likewise.
* soft-fp/unorddf2.c: Likewise.
* soft-fp/unordsf2.c: Likewise.
* soft-fp/unordtf2.c: Likewise.
2013-11-05 Uros Bizjak <ubizjak@gmail.com> 2013-11-05 Uros Bizjak <ubizjak@gmail.com>
* config/i386/32/sfp-machine.h (_FP_MUL_MEAT_S): Define. * config/i386/32/sfp-machine.h (_FP_MUL_MEAT_S): Define.
......
Except for conversions involving TImode and conversions involving The files in this directory are part of the GNU C Library, not part of
XFmode, the files in this directory are part of the GNU C Library, not part GCC. As described at <http://gcc.gnu.org/codingconventions.html>,
of GCC. As described at <http://gcc.gnu.org/codingconventions.html>, changes changes should be made to the GNU C Library and the changed files then
should be made to the GNU C Library and the changed files then imported imported into GCC.
into GCC.
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __adddf3(DFtype a, DFtype b) DFtype
__adddf3 (DFtype a, DFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R); FP_DECL_D (A);
FP_DECL_D (B);
FP_DECL_D (R);
DFtype r; DFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_D(A, a); FP_UNPACK_SEMIRAW_D (A, a);
FP_UNPACK_SEMIRAW_D(B, b); FP_UNPACK_SEMIRAW_D (B, b);
FP_ADD_D(R, A, B); FP_ADD_D (R, A, B);
FP_PACK_SEMIRAW_D(r, R); FP_PACK_SEMIRAW_D (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __addsf3(SFtype a, SFtype b) SFtype
__addsf3 (SFtype a, SFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R); FP_DECL_S (A);
FP_DECL_S (B);
FP_DECL_S (R);
SFtype r; SFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_S(A, a); FP_UNPACK_SEMIRAW_S (A, a);
FP_UNPACK_SEMIRAW_S(B, b); FP_UNPACK_SEMIRAW_S (B, b);
FP_ADD_S(R, A, B); FP_ADD_S (R, A, B);
FP_PACK_SEMIRAW_S(r, R); FP_PACK_SEMIRAW_S (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __addtf3(TFtype a, TFtype b) TFtype
__addtf3 (TFtype a, TFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R); FP_DECL_Q (A);
FP_DECL_Q (B);
FP_DECL_Q (R);
TFtype r; TFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_Q(A, a); FP_UNPACK_SEMIRAW_Q (A, a);
FP_UNPACK_SEMIRAW_Q(B, b); FP_UNPACK_SEMIRAW_Q (B, b);
FP_ADD_Q(R, A, B); FP_ADD_Q (R, A, B);
FP_PACK_SEMIRAW_Q(r, R); FP_PACK_SEMIRAW_Q (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __divdf3(DFtype a, DFtype b) DFtype
__divdf3 (DFtype a, DFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R); FP_DECL_D (A);
FP_DECL_D (B);
FP_DECL_D (R);
DFtype r; DFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_D(A, a); FP_UNPACK_D (A, a);
FP_UNPACK_D(B, b); FP_UNPACK_D (B, b);
FP_DIV_D(R, A, B); FP_DIV_D (R, A, B);
FP_PACK_D(r, R); FP_PACK_D (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __divsf3(SFtype a, SFtype b) SFtype
__divsf3 (SFtype a, SFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R); FP_DECL_S (A);
FP_DECL_S (B);
FP_DECL_S (R);
SFtype r; SFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_S(A, a); FP_UNPACK_S (A, a);
FP_UNPACK_S(B, b); FP_UNPACK_S (B, b);
FP_DIV_S(R, A, B); FP_DIV_S (R, A, B);
FP_PACK_S(r, R); FP_PACK_S (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __divtf3(TFtype a, TFtype b) TFtype
__divtf3 (TFtype a, TFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R); FP_DECL_Q (A);
FP_DECL_Q (B);
FP_DECL_Q (R);
TFtype r; TFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_Q(A, a); FP_UNPACK_Q (A, a);
FP_UNPACK_Q(B, b); FP_UNPACK_Q (B, b);
FP_DIV_Q(R, A, B); FP_DIV_Q (R, A, B);
FP_PACK_Q(r, R); FP_PACK_Q (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
CMPtype __eqdf2(DFtype a, DFtype b) CMPtype
__eqdf2 (DFtype a, DFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D (A);
FP_DECL_D (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_D(B, b); FP_UNPACK_RAW_D (A, a);
FP_CMP_EQ_D(r, A, B); FP_UNPACK_RAW_D (B, b);
if (r && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B))) FP_CMP_EQ_D (r, A, B);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r && (FP_ISSIGNAN_D (A) || FP_ISSIGNAN_D (B)))
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__eqdf2, __nedf2); strong_alias (__eqdf2, __nedf2);
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
CMPtype __eqsf2(SFtype a, SFtype b) CMPtype
__eqsf2 (SFtype a, SFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S (A);
FP_DECL_S (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_S(B, b); FP_UNPACK_RAW_S (A, a);
FP_CMP_EQ_S(r, A, B); FP_UNPACK_RAW_S (B, b);
if (r && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B))) FP_CMP_EQ_S (r, A, B);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r && (FP_ISSIGNAN_S (A) || FP_ISSIGNAN_S (B)))
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__eqsf2, __nesf2); strong_alias (__eqsf2, __nesf2);
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
CMPtype __eqtf2(TFtype a, TFtype b) CMPtype
__eqtf2 (TFtype a, TFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q (A);
FP_DECL_Q (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_Q(B, b); FP_UNPACK_RAW_Q (A, a);
FP_CMP_EQ_Q(r, A, B); FP_UNPACK_RAW_Q (B, b);
if (r && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) FP_CMP_EQ_Q (r, A, B);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r && (FP_ISSIGNAN_Q (A) || FP_ISSIGNAN_Q (B)))
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__eqtf2, __netf2); strong_alias (__eqtf2, __netf2);
...@@ -32,21 +32,22 @@ ...@@ -32,21 +32,22 @@
#include "double.h" #include "double.h"
#include "quad.h" #include "quad.h"
TFtype __extenddftf2(DFtype a) TFtype
__extenddftf2 (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
FP_DECL_Q(R); FP_DECL_Q (R);
TFtype r; TFtype r;
FP_INIT_ROUNDMODE; FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D (A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
FP_EXTEND(Q,D,4,2,R,A); FP_EXTEND (Q, D, 4, 2, R, A);
#else #else
FP_EXTEND(Q,D,2,1,R,A); FP_EXTEND (Q, D, 2, 1, R, A);
#endif #endif
FP_PACK_RAW_Q(r, R); FP_PACK_RAW_Q (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -32,21 +32,22 @@ ...@@ -32,21 +32,22 @@
#include "single.h" #include "single.h"
#include "double.h" #include "double.h"
DFtype __extendsfdf2(SFtype a) DFtype
__extendsfdf2 (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
FP_DECL_D(R); FP_DECL_D (R);
DFtype r; DFtype r;
FP_INIT_ROUNDMODE; FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S (A, a);
#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D #if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
FP_EXTEND(D,S,2,1,R,A); FP_EXTEND (D, S, 2, 1, R, A);
#else #else
FP_EXTEND(D,S,1,1,R,A); FP_EXTEND (D, S, 1, 1, R, A);
#endif #endif
FP_PACK_RAW_D(r, R); FP_PACK_RAW_D (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -32,21 +32,22 @@ ...@@ -32,21 +32,22 @@
#include "single.h" #include "single.h"
#include "quad.h" #include "quad.h"
TFtype __extendsftf2(SFtype a) TFtype
__extendsftf2 (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
FP_DECL_Q(R); FP_DECL_Q (R);
TFtype r; TFtype r;
FP_INIT_ROUNDMODE; FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S (A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
FP_EXTEND(Q,S,4,1,R,A); FP_EXTEND (Q, S, 4, 1, R, A);
#else #else
FP_EXTEND(Q,S,2,1,R,A); FP_EXTEND (Q, S, 2, 1, R, A);
#endif #endif
FP_PACK_RAW_Q(r, R); FP_PACK_RAW_Q (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Return a converted to IEEE quad Return a converted to IEEE quad
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,29 +24,29 @@ ...@@ -24,29 +24,29 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "extended.h" #include "extended.h"
#include "quad.h" #include "quad.h"
TFtype __extendxftf2(XFtype a) TFtype
__extendxftf2 (XFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_E(A); FP_DECL_E (A);
FP_DECL_Q(R); FP_DECL_Q (R);
TFtype r; TFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_RAW_E(A, a); FP_UNPACK_RAW_E (A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
FP_EXTEND(Q,E,4,4,R,A); FP_EXTEND (Q, E, 4, 4, R, A);
#else #else
FP_EXTEND(Q,E,2,2,R,A); FP_EXTEND (Q, E, 2, 2, R, A);
#endif #endif
FP_PACK_RAW_Q(r, R); FP_PACK_RAW_Q (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DItype __fixdfdi(DFtype a) DItype
__fixdfdi (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
UDItype r; UDItype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_D(r, A, DI_BITS, 1); FP_UNPACK_RAW_D (A, a);
FP_TO_INT_D (r, A, DI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
SItype __fixdfsi(DFtype a) SItype
__fixdfsi (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
USItype r; USItype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_D(r, A, SI_BITS, 1); FP_UNPACK_RAW_D (A, a);
FP_TO_INT_D (r, A, SI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert IEEE double to 128bit signed integer Convert IEEE double to 128bit signed integer
Copyright (C) 2007, 2008 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
TItype __fixdfti(DFtype a) TItype
__fixdfti (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
UTItype r; UTItype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_D(r, A, TI_BITS, 1); FP_UNPACK_RAW_D (A, a);
FP_TO_INT_D (r, A, TI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
DItype __fixsfdi(SFtype a) DItype
__fixsfdi (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
UDItype r; UDItype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_S(r, A, DI_BITS, 1); FP_UNPACK_RAW_S (A, a);
FP_TO_INT_S (r, A, DI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SItype __fixsfsi(SFtype a) SItype
__fixsfsi (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
USItype r; USItype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_S(r, A, SI_BITS, 1); FP_UNPACK_RAW_S (A, a);
FP_TO_INT_S (r, A, SI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert IEEE single to 128bit signed integer Convert IEEE single to 128bit signed integer
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
TItype __fixsfti(SFtype a) TItype
__fixsfti (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
UTItype r; UTItype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_S(r, A, TI_BITS, 1); FP_UNPACK_RAW_S (A, a);
FP_TO_INT_S (r, A, TI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
DItype __fixtfdi(TFtype a) DItype
__fixtfdi (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
UDItype r; UDItype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_Q(r, A, DI_BITS, 1); FP_UNPACK_RAW_Q (A, a);
FP_TO_INT_Q (r, A, DI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
SItype __fixtfsi(TFtype a) SItype
__fixtfsi (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
USItype r; USItype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_Q(r, A, SI_BITS, 1); FP_UNPACK_RAW_Q (A, a);
FP_TO_INT_Q (r, A, SI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert IEEE quad to 128bit signed integer Convert IEEE quad to 128bit signed integer
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TItype __fixtfti(TFtype a) TItype
__fixtfti (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
UTItype r; UTItype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_Q(r, A, TI_BITS, 1); FP_UNPACK_RAW_Q (A, a);
FP_TO_INT_Q (r, A, TI_BITS, 1);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
UDItype __fixunsdfdi(DFtype a) UDItype
__fixunsdfdi (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
UDItype r; UDItype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_D(r, A, DI_BITS, 0); FP_UNPACK_RAW_D (A, a);
FP_TO_INT_D (r, A, DI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
USItype __fixunsdfsi(DFtype a) USItype
__fixunsdfsi (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
USItype r; USItype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_D(r, A, SI_BITS, 0); FP_UNPACK_RAW_D (A, a);
FP_TO_INT_D (r, A, SI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert IEEE double to 128bit unsigned integer Convert IEEE double to 128bit unsigned integer
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
UTItype __fixunsdfti(DFtype a) UTItype
__fixunsdfti (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
UTItype r; UTItype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_D(r, A, TI_BITS, 0); FP_UNPACK_RAW_D (A, a);
FP_TO_INT_D (r, A, TI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
UDItype __fixunssfdi(SFtype a) UDItype
__fixunssfdi (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
UDItype r; UDItype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_S(r, A, DI_BITS, 0); FP_UNPACK_RAW_S (A, a);
FP_TO_INT_S (r, A, DI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
USItype __fixunssfsi(SFtype a) USItype
__fixunssfsi (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
USItype r; USItype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_S(r, A, SI_BITS, 0); FP_UNPACK_RAW_S (A, a);
FP_TO_INT_S (r, A, SI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert IEEE single to 128bit unsigned integer Convert IEEE single to 128bit unsigned integer
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
UTItype __fixunssfti(SFtype a) UTItype
__fixunssfti (SFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
UTItype r; UTItype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_S(r, A, TI_BITS, 0); FP_UNPACK_RAW_S (A, a);
FP_TO_INT_S (r, A, TI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
UDItype __fixunstfdi(TFtype a) UDItype
__fixunstfdi (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
UDItype r; UDItype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_Q(r, A, DI_BITS, 0); FP_UNPACK_RAW_Q (A, a);
FP_TO_INT_Q (r, A, DI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
USItype __fixunstfsi(TFtype a) USItype
__fixunstfsi (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
USItype r; USItype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_Q(r, A, SI_BITS, 0); FP_UNPACK_RAW_Q (A, a);
FP_TO_INT_Q (r, A, SI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert IEEE quad to 128bit unsigned integer Convert IEEE quad to 128bit unsigned integer
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
UTItype __fixunstfti(TFtype a) UTItype
__fixunstfti (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
UTItype r; UTItype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_TO_INT_Q(r, A, TI_BITS, 0); FP_UNPACK_RAW_Q (A, a);
FP_TO_INT_Q (r, A, TI_BITS, 0);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __floatdidf(DItype i) DFtype
__floatdidf (DItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
DFtype a; DFtype a;
FP_FROM_INT_D(A, i, DI_BITS, UDItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_D(a, A); FP_FROM_INT_D (A, i, DI_BITS, UDItype);
FP_PACK_RAW_D (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __floatdisf(DItype i) SFtype
__floatdisf (DItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
SFtype a; SFtype a;
FP_FROM_INT_S(A, i, DI_BITS, UDItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_S(a, A); FP_FROM_INT_S (A, i, DI_BITS, UDItype);
FP_PACK_RAW_S (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -28,18 +28,18 @@ ...@@ -28,18 +28,18 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#define FP_NO_EXCEPTIONS
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __floatditf(DItype i) TFtype
__floatditf (DItype i)
{ {
FP_DECL_EX; FP_DECL_Q (A);
FP_DECL_Q(A);
TFtype a; TFtype a;
FP_FROM_INT_Q(A, i, DI_BITS, UDItype); FP_FROM_INT_Q (A, i, DI_BITS, UDItype);
FP_PACK_RAW_Q(a, A); FP_PACK_RAW_Q (a, A);
FP_HANDLE_EXCEPTIONS;
return a; return a;
} }
...@@ -28,18 +28,18 @@ ...@@ -28,18 +28,18 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#define FP_NO_EXCEPTIONS
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __floatsidf(SItype i) DFtype
__floatsidf (SItype i)
{ {
FP_DECL_EX; FP_DECL_D (A);
FP_DECL_D(A);
DFtype a; DFtype a;
FP_FROM_INT_D(A, i, SI_BITS, USItype); FP_FROM_INT_D (A, i, SI_BITS, USItype);
FP_PACK_RAW_D(a, A); FP_PACK_RAW_D (a, A);
FP_HANDLE_EXCEPTIONS;
return a; return a;
} }
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __floatsisf(SItype i) SFtype
__floatsisf (SItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
SFtype a; SFtype a;
FP_FROM_INT_S(A, i, SI_BITS, USItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_S(a, A); FP_FROM_INT_S (A, i, SI_BITS, USItype);
FP_PACK_RAW_S (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -28,18 +28,18 @@ ...@@ -28,18 +28,18 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#define FP_NO_EXCEPTIONS
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __floatsitf(SItype i) TFtype
__floatsitf (SItype i)
{ {
FP_DECL_EX; FP_DECL_Q (A);
FP_DECL_Q(A);
TFtype a; TFtype a;
FP_FROM_INT_Q(A, i, SI_BITS, USItype); FP_FROM_INT_Q (A, i, SI_BITS, USItype);
FP_PACK_RAW_Q(a, A); FP_PACK_RAW_Q (a, A);
FP_HANDLE_EXCEPTIONS;
return a; return a;
} }
/* Software floating-point emulation. /* Software floating-point emulation.
Convert a 128bit signed integer to IEEE double Convert a 128bit signed integer to IEEE double
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __floattidf(TItype i) DFtype
__floattidf (TItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
DFtype a; DFtype a;
FP_FROM_INT_D(A, i, TI_BITS, UTItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_D(a, A); FP_FROM_INT_D (A, i, TI_BITS, UTItype);
FP_PACK_RAW_D (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert a 128bit signed integer to IEEE single Convert a 128bit signed integer to IEEE single
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __floattisf(TItype i) SFtype
__floattisf (TItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
SFtype a; SFtype a;
FP_FROM_INT_S(A, i, TI_BITS, UTItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_S(a, A); FP_FROM_INT_S (A, i, TI_BITS, UTItype);
FP_PACK_RAW_S (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert a 128bit signed integer to IEEE quad Convert a 128bit signed integer to IEEE quad
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __floattitf(TItype i) TFtype
__floattitf (TItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
TFtype a; TFtype a;
FP_FROM_INT_Q(A, i, TI_BITS, UTItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_Q(a, A); FP_FROM_INT_Q (A, i, TI_BITS, UTItype);
FP_PACK_RAW_Q (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __floatundidf(UDItype i) DFtype
__floatundidf (UDItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
DFtype a; DFtype a;
FP_FROM_INT_D(A, i, DI_BITS, UDItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_D(a, A); FP_FROM_INT_D (A, i, DI_BITS, UDItype);
FP_PACK_RAW_D (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __floatundisf(UDItype i) SFtype
__floatundisf (UDItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
SFtype a; SFtype a;
FP_FROM_INT_S(A, i, DI_BITS, UDItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_S(a, A); FP_FROM_INT_S (A, i, DI_BITS, UDItype);
FP_PACK_RAW_S (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -28,19 +28,18 @@ ...@@ -28,19 +28,18 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#define FP_NO_EXCEPTIONS
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype TFtype
__floatunditf(UDItype i) __floatunditf (UDItype i)
{ {
FP_DECL_EX; FP_DECL_Q (A);
FP_DECL_Q(A);
TFtype a; TFtype a;
FP_FROM_INT_Q(A, i, DI_BITS, UDItype); FP_FROM_INT_Q (A, i, DI_BITS, UDItype);
FP_PACK_RAW_Q(a, A); FP_PACK_RAW_Q (a, A);
FP_HANDLE_EXCEPTIONS;
return a; return a;
} }
...@@ -28,18 +28,18 @@ ...@@ -28,18 +28,18 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#define FP_NO_EXCEPTIONS
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __floatunsidf(USItype i) DFtype
__floatunsidf (USItype i)
{ {
FP_DECL_EX; FP_DECL_D (A);
FP_DECL_D(A);
DFtype a; DFtype a;
FP_FROM_INT_D(A, i, SI_BITS, USItype); FP_FROM_INT_D (A, i, SI_BITS, USItype);
FP_PACK_RAW_D(a, A); FP_PACK_RAW_D (a, A);
FP_HANDLE_EXCEPTIONS;
return a; return a;
} }
...@@ -31,14 +31,16 @@ ...@@ -31,14 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __floatunsisf(USItype i) SFtype
__floatunsisf (USItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
SFtype a; SFtype a;
FP_FROM_INT_S(A, i, SI_BITS, USItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_S(a, A); FP_FROM_INT_S (A, i, SI_BITS, USItype);
FP_PACK_RAW_S (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -28,19 +28,18 @@ ...@@ -28,19 +28,18 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#define FP_NO_EXCEPTIONS
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype TFtype
__floatunsitf(USItype i) __floatunsitf (USItype i)
{ {
FP_DECL_EX; FP_DECL_Q (A);
FP_DECL_Q(A);
TFtype a; TFtype a;
FP_FROM_INT_Q(A, i, SI_BITS, USItype); FP_FROM_INT_Q (A, i, SI_BITS, USItype);
FP_PACK_RAW_Q(a, A); FP_PACK_RAW_Q (a, A);
FP_HANDLE_EXCEPTIONS;
return a; return a;
} }
/* Software floating-point emulation. /* Software floating-point emulation.
Convert a 128bit unsigned integer to IEEE double Convert a 128bit unsigned integer to IEEE double
Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc. Copyright (C) 1997-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __floatuntidf(UTItype i) DFtype
__floatuntidf (UTItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
DFtype a; DFtype a;
FP_FROM_INT_D(A, i, TI_BITS, UTItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_D(a, A); FP_FROM_INT_D (A, i, TI_BITS, UTItype);
FP_PACK_RAW_D (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert a 128bit unsigned integer to IEEE single Convert a 128bit unsigned integer to IEEE single
Copyright (C) 2007, 2008 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __floatuntisf(UTItype i) SFtype
__floatuntisf (UTItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S (A);
SFtype a; SFtype a;
FP_FROM_INT_S(A, i, TI_BITS, UTItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_S(a, A); FP_FROM_INT_S (A, i, TI_BITS, UTItype);
FP_PACK_RAW_S (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Convert a 128bit unsigned integer to IEEE quad Convert a 128bit unsigned integer to IEEE quad
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,21 +24,22 @@ ...@@ -24,21 +24,22 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __floatuntitf(UTItype i) TFtype
__floatuntitf (UTItype i)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
TFtype a; TFtype a;
FP_FROM_INT_Q(A, i, TI_BITS, UTItype); FP_INIT_ROUNDMODE;
FP_PACK_RAW_Q(a, A); FP_FROM_INT_Q (A, i, TI_BITS, UTItype);
FP_PACK_RAW_Q (a, A);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return a; return a;
......
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
CMPtype __gedf2(DFtype a, DFtype b) CMPtype
__gedf2 (DFtype a, DFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D (A);
FP_DECL_D (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_D(B, b); FP_UNPACK_RAW_D (A, a);
FP_CMP_D(r, A, B, -2); FP_UNPACK_RAW_D (B, b);
if (r == -2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B))) FP_CMP_D (r, A, B, -2);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r == -2)
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__gedf2, __gtdf2); strong_alias (__gedf2, __gtdf2);
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
CMPtype __gesf2(SFtype a, SFtype b) CMPtype
__gesf2 (SFtype a, SFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S (A);
FP_DECL_S (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_S(B, b); FP_UNPACK_RAW_S (A, a);
FP_CMP_S(r, A, B, -2); FP_UNPACK_RAW_S (B, b);
if (r == -2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B))) FP_CMP_S (r, A, B, -2);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r == -2)
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__gesf2, __gtsf2); strong_alias (__gesf2, __gtsf2);
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
CMPtype __getf2(TFtype a, TFtype b) CMPtype
__getf2 (TFtype a, TFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q (A);
FP_DECL_Q (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_Q(B, b); FP_UNPACK_RAW_Q (A, a);
FP_CMP_Q(r, A, B, -2); FP_UNPACK_RAW_Q (B, b);
if (r == -2 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) FP_CMP_Q (r, A, B, -2);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r == -2)
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__getf2, __gttf2); strong_alias (__getf2, __gttf2);
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
CMPtype __ledf2(DFtype a, DFtype b) CMPtype
__ledf2 (DFtype a, DFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D (A);
FP_DECL_D (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_D(B, b); FP_UNPACK_RAW_D (A, a);
FP_CMP_D(r, A, B, 2); FP_UNPACK_RAW_D (B, b);
if (r == 2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B))) FP_CMP_D (r, A, B, 2);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r == 2)
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__ledf2, __ltdf2); strong_alias (__ledf2, __ltdf2);
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
CMPtype __lesf2(SFtype a, SFtype b) CMPtype
__lesf2 (SFtype a, SFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S (A);
FP_DECL_S (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_S(B, b); FP_UNPACK_RAW_S (A, a);
FP_CMP_S(r, A, B, 2); FP_UNPACK_RAW_S (B, b);
if (r == 2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B))) FP_CMP_S (r, A, B, 2);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r == 2)
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__lesf2, __ltsf2); strong_alias (__lesf2, __ltsf2);
...@@ -31,20 +31,23 @@ ...@@ -31,20 +31,23 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
CMPtype __letf2(TFtype a, TFtype b) CMPtype
__letf2 (TFtype a, TFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q (A);
FP_DECL_Q (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_Q(B, b); FP_UNPACK_RAW_Q (A, a);
FP_CMP_Q(r, A, B, 2); FP_UNPACK_RAW_Q (B, b);
if (r == 2 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) FP_CMP_Q (r, A, B, 2);
FP_SET_EXCEPTION(FP_EX_INVALID); if (r == 2)
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
strong_alias(__letf2, __lttf2); strong_alias (__letf2, __lttf2);
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __muldf3(DFtype a, DFtype b) DFtype
__muldf3 (DFtype a, DFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R); FP_DECL_D (A);
FP_DECL_D (B);
FP_DECL_D (R);
DFtype r; DFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_D(A, a); FP_UNPACK_D (A, a);
FP_UNPACK_D(B, b); FP_UNPACK_D (B, b);
FP_MUL_D(R, A, B); FP_MUL_D (R, A, B);
FP_PACK_D(r, R); FP_PACK_D (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __mulsf3(SFtype a, SFtype b) SFtype
__mulsf3 (SFtype a, SFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R); FP_DECL_S (A);
FP_DECL_S (B);
FP_DECL_S (R);
SFtype r; SFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_S(A, a); FP_UNPACK_S (A, a);
FP_UNPACK_S(B, b); FP_UNPACK_S (B, b);
FP_MUL_S(R, A, B); FP_MUL_S (R, A, B);
FP_PACK_S(r, R); FP_PACK_S (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __multf3(TFtype a, TFtype b) TFtype
__multf3 (TFtype a, TFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R); FP_DECL_Q (A);
FP_DECL_Q (B);
FP_DECL_Q (R);
TFtype r; TFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_Q(A, a); FP_UNPACK_Q (A, a);
FP_UNPACK_Q(B, b); FP_UNPACK_Q (B, b);
FP_MUL_Q(R, A, B); FP_MUL_Q (R, A, B);
FP_PACK_Q(r, R); FP_PACK_Q (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,16 @@ ...@@ -31,17 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __negdf2(DFtype a) DFtype
__negdf2 (DFtype a)
{ {
FP_DECL_EX; FP_DECL_D (A);
FP_DECL_D(A); FP_DECL_D(R); FP_DECL_D (R);
DFtype r; DFtype r;
FP_UNPACK_D(A, a); FP_UNPACK_RAW_D (A, a);
FP_NEG_D(R, A); FP_NEG_D (R, A);
FP_PACK_D(r, R); FP_PACK_RAW_D (r, R);
FP_CLEAR_EXCEPTIONS;
FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
...@@ -31,17 +31,16 @@ ...@@ -31,17 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __negsf2(SFtype a) SFtype
__negsf2 (SFtype a)
{ {
FP_DECL_EX; FP_DECL_S (A);
FP_DECL_S(A); FP_DECL_S(R); FP_DECL_S (R);
SFtype r; SFtype r;
FP_UNPACK_S(A, a); FP_UNPACK_RAW_S (A, a);
FP_NEG_S(R, A); FP_NEG_S (R, A);
FP_PACK_S(r, R); FP_PACK_RAW_S (r, R);
FP_CLEAR_EXCEPTIONS;
FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
...@@ -31,17 +31,16 @@ ...@@ -31,17 +31,16 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __negtf2(TFtype a) TFtype
__negtf2 (TFtype a)
{ {
FP_DECL_EX; FP_DECL_Q (A);
FP_DECL_Q(A); FP_DECL_Q(R); FP_DECL_Q (R);
TFtype r; TFtype r;
FP_UNPACK_Q(A, a); FP_UNPACK_RAW_Q (A, a);
FP_NEG_Q(R, A); FP_NEG_Q (R, A);
FP_PACK_Q(r, R); FP_PACK_RAW_Q (r, R);
FP_CLEAR_EXCEPTIONS;
FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
...@@ -34,47 +34,51 @@ ...@@ -34,47 +34,51 @@
#define _FP_FRAC_DECL_8(X) _FP_W_TYPE X##_f[8] #define _FP_FRAC_DECL_8(X) _FP_W_TYPE X##_f[8]
#define _FP_FRAC_HIGH_8(X) (X##_f[7]) #define _FP_FRAC_HIGH_8(X) (X##_f[7])
#define _FP_FRAC_LOW_8(X) (X##_f[0]) #define _FP_FRAC_LOW_8(X) (X##_f[0])
#define _FP_FRAC_WORD_8(X,w) (X##_f[w]) #define _FP_FRAC_WORD_8(X, w) (X##_f[w])
#define _FP_FRAC_SLL_8(X,N) \ #define _FP_FRAC_SLL_8(X, N) \
do { \ do \
_FP_I_TYPE _up, _down, _skip, _i; \ { \
_skip = (N) / _FP_W_TYPE_SIZE; \ _FP_I_TYPE _up, _down, _skip, _i; \
_up = (N) % _FP_W_TYPE_SIZE; \ _skip = (N) / _FP_W_TYPE_SIZE; \
_down = _FP_W_TYPE_SIZE - _up; \ _up = (N) % _FP_W_TYPE_SIZE; \
if (!_up) \ _down = _FP_W_TYPE_SIZE - _up; \
for (_i = 7; _i >= _skip; --_i) \ if (!_up) \
X##_f[_i] = X##_f[_i-_skip]; \ for (_i = 7; _i >= _skip; --_i) \
else \ X##_f[_i] = X##_f[_i-_skip]; \
{ \ else \
for (_i = 7; _i > _skip; --_i) \ { \
X##_f[_i] = X##_f[_i-_skip] << _up \ for (_i = 7; _i > _skip; --_i) \
| X##_f[_i-_skip-1] >> _down; \ X##_f[_i] = (X##_f[_i-_skip] << _up \
X##_f[_i--] = X##_f[0] << _up; \ | X##_f[_i-_skip-1] >> _down); \
} \ X##_f[_i--] = X##_f[0] << _up; \
for (; _i >= 0; --_i) \ } \
X##_f[_i] = 0; \ for (; _i >= 0; --_i) \
} while (0) X##_f[_i] = 0; \
} \
while (0)
#define _FP_FRAC_SRL_8(X,N) \ #define _FP_FRAC_SRL_8(X, N) \
do { \ do \
_FP_I_TYPE _up, _down, _skip, _i; \ { \
_skip = (N) / _FP_W_TYPE_SIZE; \ _FP_I_TYPE _up, _down, _skip, _i; \
_down = (N) % _FP_W_TYPE_SIZE; \ _skip = (N) / _FP_W_TYPE_SIZE; \
_up = _FP_W_TYPE_SIZE - _down; \ _down = (N) % _FP_W_TYPE_SIZE; \
if (!_down) \ _up = _FP_W_TYPE_SIZE - _down; \
for (_i = 0; _i <= 7-_skip; ++_i) \ if (!_down) \
X##_f[_i] = X##_f[_i+_skip]; \ for (_i = 0; _i <= 7-_skip; ++_i) \
else \ X##_f[_i] = X##_f[_i+_skip]; \
{ \ else \
for (_i = 0; _i < 7-_skip; ++_i) \ { \
X##_f[_i] = X##_f[_i+_skip] >> _down \ for (_i = 0; _i < 7-_skip; ++_i) \
| X##_f[_i+_skip+1] << _up; \ X##_f[_i] = (X##_f[_i+_skip] >> _down \
X##_f[_i++] = X##_f[7] >> _down; \ | X##_f[_i+_skip+1] << _up); \
} \ X##_f[_i++] = X##_f[7] >> _down; \
for (; _i < 8; ++_i) \ } \
X##_f[_i] = 0; \ for (; _i < 8; ++_i) \
} while (0) X##_f[_i] = 0; \
} \
while (0)
/* Right shift with sticky-lsb. /* Right shift with sticky-lsb.
...@@ -82,28 +86,31 @@ ...@@ -82,28 +86,31 @@
* but that if any of the bits that fall off the right hand side * but that if any of the bits that fall off the right hand side
* were one then we always set the LSbit. * were one then we always set the LSbit.
*/ */
#define _FP_FRAC_SRS_8(X,N,size) \ #define _FP_FRAC_SRS_8(X, N, size) \
do { \ do \
_FP_I_TYPE _up, _down, _skip, _i; \ { \
_FP_W_TYPE _s; \ _FP_I_TYPE _up, _down, _skip, _i; \
_skip = (N) / _FP_W_TYPE_SIZE; \ _FP_W_TYPE _s; \
_down = (N) % _FP_W_TYPE_SIZE; \ _skip = (N) / _FP_W_TYPE_SIZE; \
_up = _FP_W_TYPE_SIZE - _down; \ _down = (N) % _FP_W_TYPE_SIZE; \
for (_s = _i = 0; _i < _skip; ++_i) \ _up = _FP_W_TYPE_SIZE - _down; \
_s |= X##_f[_i]; \ for (_s = _i = 0; _i < _skip; ++_i) \
if (!_down) \ _s |= X##_f[_i]; \
for (_i = 0; _i <= 7-_skip; ++_i) \ if (!_down) \
X##_f[_i] = X##_f[_i+_skip]; \ for (_i = 0; _i <= 7-_skip; ++_i) \
else \ X##_f[_i] = X##_f[_i+_skip]; \
{ \ else \
_s |= X##_f[_i] << _up; \ { \
for (_i = 0; _i < 7-_skip; ++_i) \ _s |= X##_f[_i] << _up; \
X##_f[_i] = X##_f[_i+_skip] >> _down \ for (_i = 0; _i < 7-_skip; ++_i) \
| X##_f[_i+_skip+1] << _up; \ X##_f[_i] = (X##_f[_i+_skip] >> _down \
X##_f[_i++] = X##_f[7] >> _down; \ | X##_f[_i+_skip+1] << _up); \
} \ X##_f[_i++] = X##_f[7] >> _down; \
for (; _i < 8; ++_i) \ } \
X##_f[_i] = 0; \ for (; _i < 8; ++_i) \
/* don't fix the LSB until the very end when we're sure f[0] is stable */ \ X##_f[_i] = 0; \
X##_f[0] |= (_s != 0); \ /* don't fix the LSB until the very end when we're sure f[0] is \
} while (0) stable */ \
X##_f[0] |= (_s != 0); \
} \
while (0)
...@@ -31,11 +31,17 @@ ...@@ -31,11 +31,17 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#if _FP_W_TYPE_SIZE < 32 #if _FP_W_TYPE_SIZE < 32
#error "Here's a nickel kid. Go buy yourself a real computer." # error "Here's a nickel kid. Go buy yourself a real computer."
#endif #endif
#define _FP_FRACTBITS_S _FP_W_TYPE_SIZE #define _FP_FRACTBITS_S _FP_W_TYPE_SIZE
#if _FP_W_TYPE_SIZE < 64
# define _FP_FRACTBITS_DW_S (2 * _FP_W_TYPE_SIZE)
#else
# define _FP_FRACTBITS_DW_S _FP_W_TYPE_SIZE
#endif
#define _FP_FRACBITS_S 24 #define _FP_FRACBITS_S 24
#define _FP_FRACXBITS_S (_FP_FRACTBITS_S - _FP_FRACBITS_S) #define _FP_FRACXBITS_S (_FP_FRACTBITS_S - _FP_FRACBITS_S)
#define _FP_WFRACBITS_S (_FP_WORKBITS + _FP_FRACBITS_S) #define _FP_WFRACBITS_S (_FP_WORKBITS + _FP_FRACBITS_S)
...@@ -43,21 +49,27 @@ ...@@ -43,21 +49,27 @@
#define _FP_EXPBITS_S 8 #define _FP_EXPBITS_S 8
#define _FP_EXPBIAS_S 127 #define _FP_EXPBIAS_S 127
#define _FP_EXPMAX_S 255 #define _FP_EXPMAX_S 255
#define _FP_QNANBIT_S ((_FP_W_TYPE)1 << (_FP_FRACBITS_S-2)) #define _FP_QNANBIT_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-2))
#define _FP_QNANBIT_SH_S ((_FP_W_TYPE)1 << (_FP_FRACBITS_S-2+_FP_WORKBITS)) #define _FP_QNANBIT_SH_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-2+_FP_WORKBITS))
#define _FP_IMPLBIT_S ((_FP_W_TYPE)1 << (_FP_FRACBITS_S-1)) #define _FP_IMPLBIT_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-1))
#define _FP_IMPLBIT_SH_S ((_FP_W_TYPE)1 << (_FP_FRACBITS_S-1+_FP_WORKBITS)) #define _FP_IMPLBIT_SH_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-1+_FP_WORKBITS))
#define _FP_OVERFLOW_S ((_FP_W_TYPE)1 << (_FP_WFRACBITS_S)) #define _FP_OVERFLOW_S ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_S))
#define _FP_WFRACBITS_DW_S (2 * _FP_WFRACBITS_S)
#define _FP_WFRACXBITS_DW_S (_FP_FRACTBITS_DW_S - _FP_WFRACBITS_DW_S)
#define _FP_HIGHBIT_DW_S \
((_FP_W_TYPE) 1 << (_FP_WFRACBITS_DW_S - 1) % _FP_W_TYPE_SIZE)
/* The implementation of _FP_MUL_MEAT_S and _FP_DIV_MEAT_S should be /* The implementation of _FP_MUL_MEAT_S and _FP_DIV_MEAT_S should be
chosen by the target machine. */ chosen by the target machine. */
typedef float SFtype __attribute__((mode(SF))); typedef float SFtype __attribute__ ((mode (SF)));
union _FP_UNION_S union _FP_UNION_S
{ {
SFtype flt; SFtype flt;
struct _FP_STRUCT_LAYOUT { struct _FP_STRUCT_LAYOUT
{
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1; unsigned sign : 1;
unsigned exp : _FP_EXPBITS_S; unsigned exp : _FP_EXPBITS_S;
...@@ -67,84 +79,114 @@ union _FP_UNION_S ...@@ -67,84 +79,114 @@ union _FP_UNION_S
unsigned exp : _FP_EXPBITS_S; unsigned exp : _FP_EXPBITS_S;
unsigned sign : 1; unsigned sign : 1;
#endif #endif
} bits __attribute__((packed)); } bits __attribute__ ((packed));
}; };
#define FP_DECL_S(X) _FP_DECL(1,X) #define FP_DECL_S(X) _FP_DECL (1, X)
#define FP_UNPACK_RAW_S(X,val) _FP_UNPACK_RAW_1(S,X,val) #define FP_UNPACK_RAW_S(X, val) _FP_UNPACK_RAW_1 (S, X, val)
#define FP_UNPACK_RAW_SP(X,val) _FP_UNPACK_RAW_1_P(S,X,val) #define FP_UNPACK_RAW_SP(X, val) _FP_UNPACK_RAW_1_P (S, X, val)
#define FP_PACK_RAW_S(val,X) _FP_PACK_RAW_1(S,val,X) #define FP_PACK_RAW_S(val, X) _FP_PACK_RAW_1 (S, val, X)
#define FP_PACK_RAW_SP(val,X) \ #define FP_PACK_RAW_SP(val, X) \
do { \ do \
if (!FP_INHIBIT_RESULTS) \ { \
_FP_PACK_RAW_1_P(S,val,X); \ if (!FP_INHIBIT_RESULTS) \
} while (0) _FP_PACK_RAW_1_P (S, val, X); \
} \
#define FP_UNPACK_S(X,val) \ while (0)
do { \
_FP_UNPACK_RAW_1(S,X,val); \ #define FP_UNPACK_S(X, val) \
_FP_UNPACK_CANONICAL(S,1,X); \ do \
} while (0) { \
_FP_UNPACK_RAW_1 (S, X, val); \
#define FP_UNPACK_SP(X,val) \ _FP_UNPACK_CANONICAL (S, 1, X); \
do { \ } \
_FP_UNPACK_RAW_1_P(S,X,val); \ while (0)
_FP_UNPACK_CANONICAL(S,1,X); \
} while (0) #define FP_UNPACK_SP(X, val) \
do \
#define FP_UNPACK_SEMIRAW_S(X,val) \ { \
do { \ _FP_UNPACK_RAW_1_P (S, X, val); \
_FP_UNPACK_RAW_1(S,X,val); \ _FP_UNPACK_CANONICAL (S, 1, X); \
_FP_UNPACK_SEMIRAW(S,1,X); \ } \
} while (0) while (0)
#define FP_UNPACK_SEMIRAW_SP(X,val) \ #define FP_UNPACK_SEMIRAW_S(X, val) \
do { \ do \
_FP_UNPACK_RAW_1_P(S,X,val); \ { \
_FP_UNPACK_SEMIRAW(S,1,X); \ _FP_UNPACK_RAW_1 (S, X, val); \
} while (0) _FP_UNPACK_SEMIRAW (S, 1, X); \
} \
#define FP_PACK_S(val,X) \ while (0)
do { \
_FP_PACK_CANONICAL(S,1,X); \ #define FP_UNPACK_SEMIRAW_SP(X, val) \
_FP_PACK_RAW_1(S,val,X); \ do \
} while (0) { \
_FP_UNPACK_RAW_1_P (S, X, val); \
#define FP_PACK_SP(val,X) \ _FP_UNPACK_SEMIRAW (S, 1, X); \
do { \ } \
_FP_PACK_CANONICAL(S,1,X); \ while (0)
if (!FP_INHIBIT_RESULTS) \
_FP_PACK_RAW_1_P(S,val,X); \ #define FP_PACK_S(val, X) \
} while (0) do \
{ \
#define FP_PACK_SEMIRAW_S(val,X) \ _FP_PACK_CANONICAL (S, 1, X); \
do { \ _FP_PACK_RAW_1 (S, val, X); \
_FP_PACK_SEMIRAW(S,1,X); \ } \
_FP_PACK_RAW_1(S,val,X); \ while (0)
} while (0)
#define FP_PACK_SP(val, X) \
#define FP_PACK_SEMIRAW_SP(val,X) \ do \
do { \ { \
_FP_PACK_SEMIRAW(S,1,X); \ _FP_PACK_CANONICAL (S, 1, X); \
if (!FP_INHIBIT_RESULTS) \ if (!FP_INHIBIT_RESULTS) \
_FP_PACK_RAW_1_P(S,val,X); \ _FP_PACK_RAW_1_P (S, val, X); \
} while (0) } \
while (0)
#define FP_ISSIGNAN_S(X) _FP_ISSIGNAN(S,1,X)
#define FP_NEG_S(R,X) _FP_NEG(S,1,R,X) #define FP_PACK_SEMIRAW_S(val, X) \
#define FP_ADD_S(R,X,Y) _FP_ADD(S,1,R,X,Y) do \
#define FP_SUB_S(R,X,Y) _FP_SUB(S,1,R,X,Y) { \
#define FP_MUL_S(R,X,Y) _FP_MUL(S,1,R,X,Y) _FP_PACK_SEMIRAW (S, 1, X); \
#define FP_DIV_S(R,X,Y) _FP_DIV(S,1,R,X,Y) _FP_PACK_RAW_1 (S, val, X); \
#define FP_SQRT_S(R,X) _FP_SQRT(S,1,R,X) } \
#define _FP_SQRT_MEAT_S(R,S,T,X,Q) _FP_SQRT_MEAT_1(R,S,T,X,Q) while (0)
#define FP_CMP_S(r,X,Y,un) _FP_CMP(S,1,r,X,Y,un) #define FP_PACK_SEMIRAW_SP(val, X) \
#define FP_CMP_EQ_S(r,X,Y) _FP_CMP_EQ(S,1,r,X,Y) do \
#define FP_CMP_UNORD_S(r,X,Y) _FP_CMP_UNORD(S,1,r,X,Y) { \
_FP_PACK_SEMIRAW (S, 1, X); \
#define FP_TO_INT_S(r,X,rsz,rsg) _FP_TO_INT(S,1,r,X,rsz,rsg) if (!FP_INHIBIT_RESULTS) \
#define FP_FROM_INT_S(X,r,rs,rt) _FP_FROM_INT(S,1,X,r,rs,rt) _FP_PACK_RAW_1_P (S, val, X); \
} \
#define _FP_FRAC_HIGH_S(X) _FP_FRAC_HIGH_1(X) while (0)
#define _FP_FRAC_HIGH_RAW_S(X) _FP_FRAC_HIGH_1(X)
#define FP_ISSIGNAN_S(X) _FP_ISSIGNAN (S, 1, X)
#define FP_NEG_S(R, X) _FP_NEG (S, 1, R, X)
#define FP_ADD_S(R, X, Y) _FP_ADD (S, 1, R, X, Y)
#define FP_SUB_S(R, X, Y) _FP_SUB (S, 1, R, X, Y)
#define FP_MUL_S(R, X, Y) _FP_MUL (S, 1, R, X, Y)
#define FP_DIV_S(R, X, Y) _FP_DIV (S, 1, R, X, Y)
#define FP_SQRT_S(R, X) _FP_SQRT (S, 1, R, X)
#define _FP_SQRT_MEAT_S(R, S, T, X, Q) _FP_SQRT_MEAT_1 (R, S, T, X, Q)
#if _FP_W_TYPE_SIZE < 64
# define FP_FMA_S(R, X, Y, Z) _FP_FMA (S, 1, 2, R, X, Y, Z)
#else
# define FP_FMA_S(R, X, Y, Z) _FP_FMA (S, 1, 1, R, X, Y, Z)
#endif
#define FP_CMP_S(r, X, Y, un) _FP_CMP (S, 1, r, X, Y, un)
#define FP_CMP_EQ_S(r, X, Y) _FP_CMP_EQ (S, 1, r, X, Y)
#define FP_CMP_UNORD_S(r, X, Y) _FP_CMP_UNORD (S, 1, r, X, Y)
#define FP_TO_INT_S(r, X, rsz, rsg) _FP_TO_INT (S, 1, r, X, rsz, rsg)
#define FP_FROM_INT_S(X, r, rs, rt) _FP_FROM_INT (S, 1, X, r, rs, rt)
#define _FP_FRAC_HIGH_S(X) _FP_FRAC_HIGH_1 (X)
#define _FP_FRAC_HIGH_RAW_S(X) _FP_FRAC_HIGH_1 (X)
#if _FP_W_TYPE_SIZE < 64
# define _FP_FRAC_HIGH_DW_S(X) _FP_FRAC_HIGH_2 (X)
#else
# define _FP_FRAC_HIGH_DW_S(X) _FP_FRAC_HIGH_1 (X)
#endif
...@@ -33,25 +33,25 @@ ...@@ -33,25 +33,25 @@
#define SOFT_FP_H #define SOFT_FP_H
#ifdef _LIBC #ifdef _LIBC
#include <sfp-machine.h> # include <sfp-machine.h>
#else #else
#include "sfp-machine.h" # include "sfp-machine.h"
#endif #endif
/* Allow sfp-machine to have its own byte order definitions. */ /* Allow sfp-machine to have its own byte order definitions. */
#ifndef __BYTE_ORDER #ifndef __BYTE_ORDER
#ifdef _LIBC # ifdef _LIBC
#include <endian.h> # include <endian.h>
#else # else
#error "endianness not defined by sfp-machine.h" # error "endianness not defined by sfp-machine.h"
#endif # endif
#endif #endif
#define _FP_WORKBITS 3 #define _FP_WORKBITS 3
#define _FP_WORK_LSB ((_FP_W_TYPE)1 << 3) #define _FP_WORK_LSB ((_FP_W_TYPE) 1 << 3)
#define _FP_WORK_ROUND ((_FP_W_TYPE)1 << 2) #define _FP_WORK_ROUND ((_FP_W_TYPE) 1 << 2)
#define _FP_WORK_GUARD ((_FP_W_TYPE)1 << 1) #define _FP_WORK_GUARD ((_FP_W_TYPE) 1 << 1)
#define _FP_WORK_STICKY ((_FP_W_TYPE)1 << 0) #define _FP_WORK_STICKY ((_FP_W_TYPE) 1 << 0)
#ifndef FP_RND_NEAREST #ifndef FP_RND_NEAREST
# define FP_RND_NEAREST 0 # define FP_RND_NEAREST 0
...@@ -65,22 +65,22 @@ ...@@ -65,22 +65,22 @@
/* By default don't care about exceptions. */ /* By default don't care about exceptions. */
#ifndef FP_EX_INVALID #ifndef FP_EX_INVALID
#define FP_EX_INVALID 0 # define FP_EX_INVALID 0
#endif #endif
#ifndef FP_EX_OVERFLOW #ifndef FP_EX_OVERFLOW
#define FP_EX_OVERFLOW 0 # define FP_EX_OVERFLOW 0
#endif #endif
#ifndef FP_EX_UNDERFLOW #ifndef FP_EX_UNDERFLOW
#define FP_EX_UNDERFLOW 0 # define FP_EX_UNDERFLOW 0
#endif #endif
#ifndef FP_EX_DIVZERO #ifndef FP_EX_DIVZERO
#define FP_EX_DIVZERO 0 # define FP_EX_DIVZERO 0
#endif #endif
#ifndef FP_EX_INEXACT #ifndef FP_EX_INEXACT
#define FP_EX_INEXACT 0 # define FP_EX_INEXACT 0
#endif #endif
#ifndef FP_EX_DENORM #ifndef FP_EX_DENORM
#define FP_EX_DENORM 0 # define FP_EX_DENORM 0
#endif #endif
/* _FP_STRUCT_LAYOUT may be defined as an attribute to determine the /* _FP_STRUCT_LAYOUT may be defined as an attribute to determine the
...@@ -90,23 +90,31 @@ ...@@ -90,23 +90,31 @@
differences in how consecutive bit-fields are laid out from the differences in how consecutive bit-fields are laid out from the
default expected by soft-fp. */ default expected by soft-fp. */
#ifndef _FP_STRUCT_LAYOUT #ifndef _FP_STRUCT_LAYOUT
#define _FP_STRUCT_LAYOUT # define _FP_STRUCT_LAYOUT
#endif #endif
#ifdef _FP_DECL_EX #ifdef _FP_DECL_EX
#define FP_DECL_EX \ # define FP_DECL_EX \
int _fex = 0; \ int _fex = 0; \
_FP_DECL_EX _FP_DECL_EX
#else #else
#define FP_DECL_EX int _fex = 0 # define FP_DECL_EX int _fex = 0
#endif #endif
/* Initialize any machine-specific state used in FP_ROUNDMODE,
FP_TRAPPING_EXCEPTIONS or FP_HANDLE_EXCEPTIONS. */
#ifndef FP_INIT_ROUNDMODE #ifndef FP_INIT_ROUNDMODE
#define FP_INIT_ROUNDMODE do {} while (0) # define FP_INIT_ROUNDMODE do {} while (0)
#endif
/* Initialize any machine-specific state used in
FP_HANDLE_EXCEPTIONS. */
#ifndef FP_INIT_EXCEPTIONS
# define FP_INIT_EXCEPTIONS FP_INIT_ROUNDMODE
#endif #endif
#ifndef FP_HANDLE_EXCEPTIONS #ifndef FP_HANDLE_EXCEPTIONS
#define FP_HANDLE_EXCEPTIONS do {} while (0) # define FP_HANDLE_EXCEPTIONS do {} while (0)
#endif #endif
#ifndef FP_INHIBIT_RESULTS #ifndef FP_INHIBIT_RESULTS
...@@ -115,15 +123,12 @@ ...@@ -115,15 +123,12 @@
* check if some exceptions are unmasked * check if some exceptions are unmasked
* and inhibit it in such a case. * and inhibit it in such a case.
*/ */
#define FP_INHIBIT_RESULTS 0 # define FP_INHIBIT_RESULTS 0
#endif #endif
#define FP_SET_EXCEPTION(ex) \ #define FP_SET_EXCEPTION(ex) \
_fex |= (ex) _fex |= (ex)
#define FP_UNSET_EXCEPTION(ex) \
_fex &= ~(ex)
#define FP_CLEAR_EXCEPTIONS \ #define FP_CLEAR_EXCEPTIONS \
_fex = 0 _fex = 0
...@@ -131,58 +136,90 @@ ...@@ -131,58 +136,90 @@
(_fex) (_fex)
#ifndef FP_TRAPPING_EXCEPTIONS #ifndef FP_TRAPPING_EXCEPTIONS
#define FP_TRAPPING_EXCEPTIONS 0 # define FP_TRAPPING_EXCEPTIONS 0
#endif #endif
#define _FP_ROUND_NEAREST(wc, X) \ /* A file using soft-fp may define FP_NO_EXCEPTIONS before including
do { \ soft-fp.h to indicate that, although a macro used there could raise
if ((_FP_FRAC_LOW_##wc(X) & 15) != _FP_WORK_ROUND) \ exceptions, or do rounding and potentially thereby raise
_FP_FRAC_ADDI_##wc(X, _FP_WORK_ROUND); \ exceptions, for some arguments, for the particular arguments used
} while (0) in that file no exceptions or rounding can occur. Such a file
should not itself use macros relating to handling exceptions and
rounding modes; this is only for indirect uses (in particular, in
_FP_FROM_INT and the macros it calls). */
#ifdef FP_NO_EXCEPTIONS
#define _FP_ROUND_ZERO(wc, X) (void)0 # undef FP_SET_EXCEPTION
# define FP_SET_EXCEPTION(ex) do {} while (0)
#define _FP_ROUND_PINF(wc, X) \ # undef FP_CUR_EXCEPTIONS
do { \ # define FP_CUR_EXCEPTIONS 0
if (!X##_s && (_FP_FRAC_LOW_##wc(X) & 7)) \
_FP_FRAC_ADDI_##wc(X, _FP_WORK_LSB); \
} while (0)
#define _FP_ROUND_MINF(wc, X) \ # undef FP_TRAPPING_EXCEPTIONS
do { \ # define FP_TRAPPING_EXCEPTIONS 0
if (X##_s && (_FP_FRAC_LOW_##wc(X) & 7)) \
_FP_FRAC_ADDI_##wc(X, _FP_WORK_LSB); \ # undef FP_ROUNDMODE
} while (0) # define FP_ROUNDMODE FP_RND_ZERO
#endif
#define _FP_ROUND_NEAREST(wc, X) \
do \
{ \
if ((_FP_FRAC_LOW_##wc (X) & 15) != _FP_WORK_ROUND) \
_FP_FRAC_ADDI_##wc (X, _FP_WORK_ROUND); \
} \
while (0)
#define _FP_ROUND_ZERO(wc, X) (void) 0
#define _FP_ROUND_PINF(wc, X) \
do \
{ \
if (!X##_s && (_FP_FRAC_LOW_##wc (X) & 7)) \
_FP_FRAC_ADDI_##wc (X, _FP_WORK_LSB); \
} \
while (0)
#define _FP_ROUND_MINF(wc, X) \
do \
{ \
if (X##_s && (_FP_FRAC_LOW_##wc (X) & 7)) \
_FP_FRAC_ADDI_##wc (X, _FP_WORK_LSB); \
} \
while (0)
#define _FP_ROUND(wc, X) \ #define _FP_ROUND(wc, X) \
do { \ do \
if (_FP_FRAC_LOW_##wc(X) & 7) \ { \
{ \ if (_FP_FRAC_LOW_##wc (X) & 7) \
FP_SET_EXCEPTION(FP_EX_INEXACT); \ { \
switch (FP_ROUNDMODE) \ FP_SET_EXCEPTION (FP_EX_INEXACT); \
{ \ switch (FP_ROUNDMODE) \
case FP_RND_NEAREST: \ { \
_FP_ROUND_NEAREST(wc,X); \ case FP_RND_NEAREST: \
break; \ _FP_ROUND_NEAREST (wc, X); \
case FP_RND_ZERO: \ break; \
_FP_ROUND_ZERO(wc,X); \ case FP_RND_ZERO: \
break; \ _FP_ROUND_ZERO (wc, X); \
case FP_RND_PINF: \ break; \
_FP_ROUND_PINF(wc,X); \ case FP_RND_PINF: \
break; \ _FP_ROUND_PINF (wc, X); \
case FP_RND_MINF: \ break; \
_FP_ROUND_MINF(wc,X); \ case FP_RND_MINF: \
break; \ _FP_ROUND_MINF (wc, X); \
} \ break; \
} \ } \
} while (0) } \
} \
while (0)
#define FP_CLS_NORMAL 0 #define FP_CLS_NORMAL 0
#define FP_CLS_ZERO 1 #define FP_CLS_ZERO 1
#define FP_CLS_INF 2 #define FP_CLS_INF 2
#define FP_CLS_NAN 3 #define FP_CLS_NAN 3
#define _FP_CLS_COMBINE(x,y) (((x) << 2) | (y)) #define _FP_CLS_COMBINE(x, y) (((x) << 2) | (y))
#include "op-1.h" #include "op-1.h"
#include "op-2.h" #include "op-2.h"
...@@ -194,35 +231,35 @@ do { \ ...@@ -194,35 +231,35 @@ do { \
#define UWtype _FP_W_TYPE #define UWtype _FP_W_TYPE
#define W_TYPE_SIZE _FP_W_TYPE_SIZE #define W_TYPE_SIZE _FP_W_TYPE_SIZE
typedef int QItype __attribute__((mode(QI))); typedef int QItype __attribute__ ((mode (QI)));
typedef int SItype __attribute__((mode(SI))); typedef int SItype __attribute__ ((mode (SI)));
typedef int DItype __attribute__((mode(DI))); typedef int DItype __attribute__ ((mode (DI)));
typedef unsigned int UQItype __attribute__((mode(QI))); typedef unsigned int UQItype __attribute__ ((mode (QI)));
typedef unsigned int USItype __attribute__((mode(SI))); typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef unsigned int UDItype __attribute__((mode(DI))); typedef unsigned int UDItype __attribute__ ((mode (DI)));
#if _FP_W_TYPE_SIZE == 32 #if _FP_W_TYPE_SIZE == 32
typedef unsigned int UHWtype __attribute__((mode(HI))); typedef unsigned int UHWtype __attribute__ ((mode (HI)));
#elif _FP_W_TYPE_SIZE == 64 #elif _FP_W_TYPE_SIZE == 64
typedef USItype UHWtype; typedef USItype UHWtype;
#endif #endif
#ifndef CMPtype #ifndef CMPtype
#define CMPtype int # define CMPtype int
#endif #endif
#define SI_BITS (__CHAR_BIT__ * (int)sizeof(SItype)) #define SI_BITS (__CHAR_BIT__ * (int) sizeof (SItype))
#define DI_BITS (__CHAR_BIT__ * (int)sizeof(DItype)) #define DI_BITS (__CHAR_BIT__ * (int) sizeof (DItype))
#ifndef umul_ppmm #ifndef umul_ppmm
#ifdef _LIBC # ifdef _LIBC
#include <stdlib/longlong.h> # include <stdlib/longlong.h>
#else # else
#include "longlong.h" # include "longlong.h"
#endif # endif
#endif #endif
#ifdef _LIBC #ifdef _LIBC
#include <stdlib.h> # include <stdlib.h>
#else #else
extern void abort (void); extern void abort (void);
#endif #endif
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
DFtype __subdf3(DFtype a, DFtype b) DFtype
__subdf3 (DFtype a, DFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R); FP_DECL_D (A);
FP_DECL_D (B);
FP_DECL_D (R);
DFtype r; DFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_D(A, a); FP_UNPACK_SEMIRAW_D (A, a);
FP_UNPACK_SEMIRAW_D(B, b); FP_UNPACK_SEMIRAW_D (B, b);
FP_SUB_D(R, A, B); FP_SUB_D (R, A, B);
FP_PACK_SEMIRAW_D(r, R); FP_PACK_SEMIRAW_D (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
SFtype __subsf3(SFtype a, SFtype b) SFtype
__subsf3 (SFtype a, SFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R); FP_DECL_S (A);
FP_DECL_S (B);
FP_DECL_S (R);
SFtype r; SFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_S(A, a); FP_UNPACK_SEMIRAW_S (A, a);
FP_UNPACK_SEMIRAW_S(B, b); FP_UNPACK_SEMIRAW_S (B, b);
FP_SUB_S(R, A, B); FP_SUB_S (R, A, B);
FP_PACK_SEMIRAW_S(r, R); FP_PACK_SEMIRAW_S (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -31,17 +31,20 @@ ...@@ -31,17 +31,20 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
TFtype __subtf3(TFtype a, TFtype b) TFtype
__subtf3 (TFtype a, TFtype b)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R); FP_DECL_Q (A);
FP_DECL_Q (B);
FP_DECL_Q (R);
TFtype r; TFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_Q(A, a); FP_UNPACK_SEMIRAW_Q (A, a);
FP_UNPACK_SEMIRAW_Q(B, b); FP_UNPACK_SEMIRAW_Q (B, b);
FP_SUB_Q(R, A, B); FP_SUB_Q (R, A, B);
FP_PACK_SEMIRAW_Q(r, R); FP_PACK_SEMIRAW_Q (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -32,21 +32,22 @@ ...@@ -32,21 +32,22 @@
#include "single.h" #include "single.h"
#include "double.h" #include "double.h"
SFtype __truncdfsf2(DFtype a) SFtype
__truncdfsf2 (DFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D (A);
FP_DECL_S(R); FP_DECL_S (R);
SFtype r; SFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_D(A, a); FP_UNPACK_SEMIRAW_D (A, a);
#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D #if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
FP_TRUNC(S,D,1,2,R,A); FP_TRUNC (S, D, 1, 2, R, A);
#else #else
FP_TRUNC(S,D,1,1,R,A); FP_TRUNC (S, D, 1, 1, R, A);
#endif #endif
FP_PACK_SEMIRAW_S(r, R); FP_PACK_SEMIRAW_S (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -32,21 +32,22 @@ ...@@ -32,21 +32,22 @@
#include "double.h" #include "double.h"
#include "quad.h" #include "quad.h"
DFtype __trunctfdf2(TFtype a) DFtype
__trunctfdf2 (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
FP_DECL_D(R); FP_DECL_D (R);
DFtype r; DFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_Q(A, a); FP_UNPACK_SEMIRAW_Q (A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
FP_TRUNC(D,Q,2,4,R,A); FP_TRUNC (D, Q, 2, 4, R, A);
#else #else
FP_TRUNC(D,Q,1,2,R,A); FP_TRUNC (D, Q, 1, 2, R, A);
#endif #endif
FP_PACK_SEMIRAW_D(r, R); FP_PACK_SEMIRAW_D (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -32,21 +32,22 @@ ...@@ -32,21 +32,22 @@
#include "single.h" #include "single.h"
#include "quad.h" #include "quad.h"
SFtype __trunctfsf2(TFtype a) SFtype
__trunctfsf2 (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
FP_DECL_S(R); FP_DECL_S (R);
SFtype r; SFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_Q(A, a); FP_UNPACK_SEMIRAW_Q (A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
FP_TRUNC(S,Q,1,4,R,A); FP_TRUNC (S, Q, 1, 4, R, A);
#else #else
FP_TRUNC(S,Q,1,2,R,A); FP_TRUNC (S, Q, 1, 2, R, A);
#endif #endif
FP_PACK_SEMIRAW_S(r, R); FP_PACK_SEMIRAW_S (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
/* Software floating-point emulation. /* Software floating-point emulation.
Truncate IEEE quad into IEEE extended Truncate IEEE quad into IEEE extended
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Uros Bizjak (ubizjak@gmail.com). Contributed by Uros Bizjak (ubizjak@gmail.com).
...@@ -24,29 +24,29 @@ ...@@ -24,29 +24,29 @@
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free License along with the GNU C Library; if not, see
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, <http://www.gnu.org/licenses/>. */
MA 02110-1301, USA. */
#include "soft-fp.h" #include "soft-fp.h"
#include "extended.h" #include "extended.h"
#include "quad.h" #include "quad.h"
XFtype __trunctfxf2(TFtype a) XFtype
__trunctfxf2 (TFtype a)
{ {
FP_DECL_EX; FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q (A);
FP_DECL_E(R); FP_DECL_E (R);
XFtype r; XFtype r;
FP_INIT_ROUNDMODE; FP_INIT_ROUNDMODE;
FP_UNPACK_SEMIRAW_Q(A, a); FP_UNPACK_SEMIRAW_Q (A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
FP_TRUNC(E,Q,4,4,R,A); FP_TRUNC (E, Q, 4, 4, R, A);
#else #else
FP_TRUNC(E,Q,2,2,R,A); FP_TRUNC (E, Q, 2, 2, R, A);
#endif #endif
FP_PACK_SEMIRAW_E(r, R); FP_PACK_SEMIRAW_E (r, R);
FP_HANDLE_EXCEPTIONS; FP_HANDLE_EXCEPTIONS;
return r; return r;
......
...@@ -30,14 +30,21 @@ ...@@ -30,14 +30,21 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "double.h" #include "double.h"
CMPtype __unorddf2(DFtype a, DFtype b) CMPtype
__unorddf2 (DFtype a, DFtype b)
{ {
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_EX;
FP_DECL_D (A);
FP_DECL_D (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_D(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_D(B, b); FP_UNPACK_RAW_D (A, a);
FP_CMP_UNORD_D(r, A, B); FP_UNPACK_RAW_D (B, b);
FP_CMP_UNORD_D (r, A, B);
if (r && (FP_ISSIGNAN_D (A) || FP_ISSIGNAN_D (B)))
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
...@@ -30,15 +30,21 @@ ...@@ -30,15 +30,21 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "single.h" #include "single.h"
CMPtype __unordsf2(SFtype a, SFtype b) CMPtype
__unordsf2 (SFtype a, SFtype b)
{ {
FP_DECL_S(A); FP_DECL_EX;
FP_DECL_S(B); FP_DECL_S (A);
FP_DECL_S (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_S(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_S(B, b); FP_UNPACK_RAW_S (A, a);
FP_CMP_UNORD_S(r, A, B); FP_UNPACK_RAW_S (B, b);
FP_CMP_UNORD_S (r, A, B);
if (r && (FP_ISSIGNAN_S (A) || FP_ISSIGNAN_S (B)))
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
...@@ -30,15 +30,21 @@ ...@@ -30,15 +30,21 @@
#include "soft-fp.h" #include "soft-fp.h"
#include "quad.h" #include "quad.h"
CMPtype __unordtf2(TFtype a, TFtype b) CMPtype
__unordtf2 (TFtype a, TFtype b)
{ {
FP_DECL_Q(A); FP_DECL_EX;
FP_DECL_Q(B); FP_DECL_Q (A);
FP_DECL_Q (B);
CMPtype r; CMPtype r;
FP_UNPACK_RAW_Q(A, a); FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_Q(B, b); FP_UNPACK_RAW_Q (A, a);
FP_CMP_UNORD_Q(r, A, B); FP_UNPACK_RAW_Q (B, b);
FP_CMP_UNORD_Q (r, A, B);
if (r && (FP_ISSIGNAN_Q (A) || FP_ISSIGNAN_Q (B)))
FP_SET_EXCEPTION (FP_EX_INVALID);
FP_HANDLE_EXCEPTIONS;
return r; return r;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment