gccint: Decimal float library routines

1 
1 4.3 Routines for decimal floating point emulation
1 =================================================
1 
1 The software decimal floating point library implements IEEE 754-2008
1 decimal floating point arithmetic and is only activated on selected
1 targets.
1 
1  The software decimal floating point library supports either DPD
1 (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
1 selected at configure time.
1 
1 4.3.1 Arithmetic functions
1 --------------------------
1 
1  -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
1           _Decimal128 B)
1  -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
1           _Decimal128 B)
1      These functions return the sum of A and B.
1 
1  -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
1           _Decimal128 B)
1  -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
1           _Decimal128 B)
1      These functions return the difference between B and A; that is,
1      A - B.
1 
1  -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
1           _Decimal128 B)
1  -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
1           _Decimal128 B)
1      These functions return the product of A and B.
1 
1  -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
1           B)
1  -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
1           B)
1  -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
1           _Decimal128 B)
1  -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
1           _Decimal128 B)
1      These functions return the quotient of A and B; that is, A / B.
1 
1  -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
1  -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
1  -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
1  -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
1  -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
1  -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
1      These functions return the negation of A.  They simply flip the
1      sign bit, so they can produce negative zero and negative NaN.
1 
1 4.3.2 Conversion functions
1 --------------------------
1 
1  -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
1  -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
1  -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
1  -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
1  -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
1  -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
1  -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
1  -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
1  -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
1  -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
1  -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
1  -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
1      These functions convert the value A from one decimal floating type
1      to another.
1 
1  -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
1  -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
1  -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
1  -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
1  -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
1  -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
1  -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
1  -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
1  -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
1  -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
1  -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
1  -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
1  -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
1  -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
1  -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
1  -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
1  -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
1  -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
1      These functions convert the value of A from a binary floating type
1      to a decimal floating type of a different size.
1 
1  -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
1  -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
1  -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
1  -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
1  -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
1  -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
1  -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
1  -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
1  -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
1  -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
1  -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
1  -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
1  -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
1  -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
1  -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
1  -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
1  -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
1  -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
1      These functions convert the value of A from a decimal floating type
1      to a binary floating type of a different size.
1 
1  -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
1  -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
1  -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
1  -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
1  -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
1  -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
1  -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
1  -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
1  -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
1  -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
1  -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
1  -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
1      These functions convert the value of A between decimal and binary
1      floating types of the same size.
1 
1  -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
1  -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
1  -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
1  -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
1  -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
1  -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
1      These functions convert A to a signed integer.
1 
1  -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
1  -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
1  -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
1  -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
1  -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
1  -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
1      These functions convert A to a signed long.
1 
1  -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
1  -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
1  -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
1  -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
1  -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
1  -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
1      These functions convert A to an unsigned integer.  Negative values
1      all become zero.
1 
1  -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
1  -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
1  -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
1  -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
1  -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
1  -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
1      These functions convert A to an unsigned long.  Negative values all
1      become zero.
1 
1  -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
1  -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
1  -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
1  -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
1  -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
1  -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
1      These functions convert I, a signed integer, to decimal floating
1      point.
1 
1  -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
1  -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
1  -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
1  -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
1  -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
1  -- Runtime Function: _Decimal128 __bid_floatditd (long I)
1      These functions convert I, a signed long, to decimal floating
1      point.
1 
1  -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
1  -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
1  -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
1  -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
1  -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
1  -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
1      These functions convert I, an unsigned integer, to decimal floating
1      point.
1 
1  -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
1  -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
1  -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
1  -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
1  -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
1  -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
1      These functions convert I, an unsigned long, to decimal floating
1      point.
1 
1 4.3.3 Comparison functions
1 --------------------------
1 
1  -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
1  -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
1      These functions return a nonzero value if either argument is NaN,
1      otherwise 0.
1 
1  There is also a complete group of higher level functions which
1 correspond directly to comparison operators.  They implement the ISO C
1 semantics for floating-point comparisons, taking NaN into account.  Pay
1 careful attention to the return values defined for each set.  Under the
1 hood, all of these routines are implemented as
1 
1        if (__bid_unordXd2 (a, b))
1          return E;
1        return __bid_cmpXd2 (a, b);
1 
1 where E is a constant chosen to give the proper behavior for NaN.  Thus,
1 the meaning of the return value is different for each set.  Do not rely
1 on this implementation; only the semantics documented below are
1 guaranteed.
1 
1  -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
1  -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
1      These functions return zero if neither argument is NaN, and A and B
1      are equal.
1 
1  -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
1  -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
1      These functions return a nonzero value if either argument is NaN,
1      or if A and B are unequal.
1 
1  -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
1  -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
1      These functions return a value greater than or equal to zero if
1      neither argument is NaN, and A is greater than or equal to B.
1 
1  -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
1  -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
1      These functions return a value less than zero if neither argument
1      is NaN, and A is strictly less than B.
1 
1  -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
1  -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
1      These functions return a value less than or equal to zero if
1      neither argument is NaN, and A is less than or equal to B.
1 
1  -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
1  -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
1  -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
1  -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
1      These functions return a value greater than zero if neither
1      argument is NaN, and A is strictly greater than B.
1