1169689Skan/* Header file for dfp-bit.c. 2169689Skan Copyright (C) 2005, 2006 Free Software Foundation, Inc. 3169689Skan 4169689SkanThis file is part of GCC. 5169689Skan 6169689SkanGCC is free software; you can redistribute it and/or modify it under 7169689Skanthe terms of the GNU General Public License as published by the Free 8169689SkanSoftware Foundation; either version 2, or (at your option) any later 9169689Skanversion. 10169689Skan 11169689SkanIn addition to the permissions in the GNU General Public License, the 12169689SkanFree Software Foundation gives you unlimited permission to link the 13169689Skancompiled version of this file into combinations with other programs, 14169689Skanand to distribute those combinations without any restriction coming 15169689Skanfrom the use of this file. (The General Public License restrictions 16169689Skando apply in other respects; for example, they cover modification of 17169689Skanthe file, and distribution when not linked into a combine 18169689Skanexecutable.) 19169689Skan 20169689SkanGCC is distributed in the hope that it will be useful, but WITHOUT ANY 21169689SkanWARRANTY; without even the implied warranty of MERCHANTABILITY or 22169689SkanFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 23169689Skanfor more details. 24169689Skan 25169689SkanYou should have received a copy of the GNU General Public License 26169689Skanalong with GCC; see the file COPYING. If not, write to the Free 27169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 28169689Skan02110-1301, USA. */ 29169689Skan 30169689Skan#ifndef _DFPBIT_H 31169689Skan#define _DFPBIT_H 32169689Skan 33169689Skan#include "tconfig.h" 34169689Skan#include "coretypes.h" 35169689Skan#include "tm.h" 36169689Skan 37169689Skan#ifndef LIBGCC2_WORDS_BIG_ENDIAN 38169689Skan#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN 39169689Skan#endif 40169689Skan 41169689Skan#ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN 42169689Skan#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN LIBGCC2_WORDS_BIG_ENDIAN 43169689Skan#endif 44169689Skan 45169689Skan#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE 46169689Skan#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE 47169689Skan#endif 48169689Skan 49169689Skan#ifndef LIBGCC2_HAS_XF_MODE 50169689Skan#define LIBGCC2_HAS_XF_MODE \ 51169689Skan (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80) 52169689Skan#endif 53169689Skan 54169689Skan/* Depending on WIDTH, define a number of macros: 55169689Skan 56169689Skan DFP_C_TYPE: type of the arguments to the libgcc functions; 57169689Skan (eg _Decimal32) 58169689Skan 59169689Skan IEEE_TYPE: the corresponding (encoded) IEEE754R type; 60169689Skan (eg decimal32) 61169689Skan 62169689Skan TO_INTERNAL: the name of the decNumber function to convert an 63169689Skan encoded value into the decNumber internal representation; 64169689Skan 65169689Skan TO_ENCODED: the name of the decNumber function to convert an 66169689Skan internally represented decNumber into the encoded 67169689Skan representation. 68169689Skan 69169689Skan FROM_STRING: the name of the decNumber function to read an 70169689Skan encoded value from a string. 71169689Skan 72169689Skan TO_STRING: the name of the decNumber function to write an 73169689Skan encoded value to a string. */ 74169689Skan 75169689Skan#if WIDTH == 32 76169689Skan#define DFP_C_TYPE _Decimal32 77169689Skan#define IEEE_TYPE decimal32 78169689Skan#define HOST_TO_IEEE __host_to_ieee_32 79169689Skan#define IEEE_TO_HOST __ieee_to_host_32 80169689Skan#define TO_INTERNAL __decimal32ToNumber 81169689Skan#define TO_ENCODED __decimal32FromNumber 82169689Skan#define FROM_STRING __decimal32FromString 83169689Skan#define TO_STRING __decimal32ToString 84169689Skan#elif WIDTH == 64 85169689Skan#define DFP_C_TYPE _Decimal64 86169689Skan#define IEEE_TYPE decimal64 87169689Skan#define HOST_TO_IEEE __host_to_ieee_64 88169689Skan#define IEEE_TO_HOST __ieee_to_host_64 89169689Skan#define TO_INTERNAL __decimal64ToNumber 90169689Skan#define TO_ENCODED __decimal64FromNumber 91169689Skan#define FROM_STRING __decimal64FromString 92169689Skan#define TO_STRING __decimal64ToString 93169689Skan#elif WIDTH == 128 94169689Skan#define DFP_C_TYPE _Decimal128 95169689Skan#define IEEE_TYPE decimal128 96169689Skan#define HOST_TO_IEEE __host_to_ieee_128 97169689Skan#define IEEE_TO_HOST __ieee_to_host_128 98169689Skan#define TO_INTERNAL __decimal128ToNumber 99169689Skan#define TO_ENCODED __decimal128FromNumber 100169689Skan#define FROM_STRING __decimal128FromString 101169689Skan#define TO_STRING __decimal128ToString 102169689Skan#else 103169689Skan#error invalid decimal float word width 104169689Skan#endif 105169689Skan 106169689Skan/* We define __DEC_EVAL_METHOD__ to 2, saying that we evaluate all 107169689Skan operations and constants to the range and precision of the _Decimal128 108169689Skan type. Make it so. */ 109169689Skan#if WIDTH == 32 110169689Skan#define CONTEXT_INIT DEC_INIT_DECIMAL32 111169689Skan#elif WIDTH == 64 112169689Skan#define CONTEXT_INIT DEC_INIT_DECIMAL64 113169689Skan#elif WIDTH == 128 114169689Skan#define CONTEXT_INIT DEC_INIT_DECIMAL128 115169689Skan#endif 116169689Skan 117169689Skan/* Define CONTEXT_ROUND to obtain the current decNumber rounding mode. */ 118169689Skanextern enum rounding __decGetRound (void); 119169689Skan#define CONTEXT_ROUND __decGetRound () 120169689Skan 121169689Skanextern int __dfp_traps; 122169689Skan#define CONTEXT_TRAPS __dfp_traps 123169689Skan#define CONTEXT_ERRORS(context) context.status & DEC_Errors 124169689Skanextern void __dfp_raise (int); 125169689Skan#define DFP_RAISE(A) __dfp_raise(A) 126169689Skan 127169689Skan/* Conversions between different decimal float types use WIDTH_TO to 128169689Skan determine additional macros to define. */ 129169689Skan 130169689Skan#if defined (L_dd_to_sd) || defined (L_td_to_sd) 131169689Skan#define WIDTH_TO 32 132169689Skan#elif defined (L_sd_to_dd) || defined (L_td_to_dd) 133169689Skan#define WIDTH_TO 64 134169689Skan#elif defined (L_sd_to_td) || defined (L_dd_to_td) 135169689Skan#define WIDTH_TO 128 136169689Skan#endif 137169689Skan 138169689Skan/* If WIDTH_TO is defined, define additional macros: 139169689Skan 140169689Skan DFP_C_TYPE_TO: type of the result of dfp to dfp conversion. 141169689Skan 142169689Skan IEEE_TYPE_TO: the corresponding (encoded) IEEE754R type. 143169689Skan 144169689Skan TO_ENCODED_TO: the name of the decNumber function to convert an 145169689Skan internally represented decNumber into the encoded representation 146169689Skan for the destination. */ 147169689Skan 148169689Skan#if WIDTH_TO == 32 149169689Skan#define DFP_C_TYPE_TO _Decimal32 150169689Skan#define IEEE_TYPE_TO decimal32 151169689Skan#define TO_ENCODED_TO __decimal32FromNumber 152169689Skan#define IEEE_TO_HOST_TO __ieee_to_host_32 153169689Skan#elif WIDTH_TO == 64 154169689Skan#define DFP_C_TYPE_TO _Decimal64 155169689Skan#define IEEE_TYPE_TO decimal64 156169689Skan#define TO_ENCODED_TO __decimal64FromNumber 157169689Skan#define IEEE_TO_HOST_TO __ieee_to_host_64 158169689Skan#elif WIDTH_TO == 128 159169689Skan#define DFP_C_TYPE_TO _Decimal128 160169689Skan#define IEEE_TYPE_TO decimal128 161169689Skan#define TO_ENCODED_TO __decimal128FromNumber 162169689Skan#define IEEE_TO_HOST_TO __ieee_to_host_128 163169689Skan#endif 164169689Skan 165169689Skan/* Conversions between decimal float types and integral types use INT_KIND 166169689Skan to determine the data type and C functions to use. */ 167169689Skan 168169689Skan#if defined (L_sd_to_si) || defined (L_dd_to_si) || defined (L_td_to_si) \ 169169689Skan || defined (L_si_to_sd) || defined (L_si_to_dd) || defined (L_si_to_td) 170169689Skan#define INT_KIND 1 171169689Skan#elif defined (L_sd_to_di) || defined (L_dd_to_di) || defined (L_td_to_di) \ 172169689Skan || defined (L_di_to_sd) || defined (L_di_to_dd) || defined (L_di_to_td) 173169689Skan#define INT_KIND 2 174169689Skan#elif defined (L_sd_to_usi) || defined (L_dd_to_usi) || defined (L_td_to_usi) \ 175169689Skan || defined (L_usi_to_sd) || defined (L_usi_to_dd) || defined (L_usi_to_td) 176169689Skan#define INT_KIND 3 177169689Skan#elif defined (L_sd_to_udi) || defined (L_dd_to_udi) || defined (L_td_to_udi) \ 178169689Skan || defined (L_udi_to_sd) || defined (L_udi_to_dd) || defined (L_udi_to_td) 179169689Skan#define INT_KIND 4 180169689Skan#endif 181169689Skan 182169689Skan/* If INT_KIND is defined, define additional macros: 183169689Skan 184169689Skan INT_TYPE: The integer data type. 185169689Skan 186169689Skan INT_FMT: The format string for writing the integer to a string. 187169689Skan 188169689Skan CAST_FOR_FMT: Cast variable of INT_KIND to C type for sprintf. 189169689Skan This works for ILP32 and LP64, won't for other type size systems. 190169689Skan 191169689Skan STR_TO_INT: The function to read the integer from a string. */ 192169689Skan 193169689Skan#if INT_KIND == 1 194169689Skan#define INT_TYPE SItype 195169689Skan#define INT_FMT "%d" 196169689Skan#define CAST_FOR_FMT(A) (int)A 197169689Skan#define STR_TO_INT strtol 198169689Skan#elif INT_KIND == 2 199169689Skan#define INT_TYPE DItype 200169689Skan#define INT_FMT "%lld" 201169689Skan#define CAST_FOR_FMT(A) (long long)A 202169689Skan#define STR_TO_INT strtoll 203169689Skan#elif INT_KIND == 3 204169689Skan#define INT_TYPE USItype 205169689Skan#define INT_FMT "%u" 206169689Skan#define CAST_FOR_FMT(A) (unsigned int)A 207169689Skan#define STR_TO_INT strtoul 208169689Skan#elif INT_KIND == 4 209169689Skan#define INT_TYPE UDItype 210169689Skan#define INT_FMT "%llu" 211169689Skan#define CAST_FOR_FMT(A) (unsigned long long)A 212169689Skan#define STR_TO_INT strtoull 213169689Skan#endif 214169689Skan 215169689Skan/* Conversions between decimal float types and binary float types use 216169689Skan BFP_KIND to determine the data type and C functions to use. */ 217169689Skan 218169689Skan#if defined (L_sd_to_sf) || defined (L_dd_to_sf) || defined (L_td_to_sf) \ 219169689Skan || defined (L_sf_to_sd) || defined (L_sf_to_dd) || defined (L_sf_to_td) 220169689Skan#define BFP_KIND 1 221169689Skan#elif defined (L_sd_to_df) || defined (L_dd_to_df ) || defined (L_td_to_df) \ 222169689Skan || defined (L_df_to_sd) || defined (L_df_to_dd) || defined (L_df_to_td) 223169689Skan#define BFP_KIND 2 224169689Skan#elif defined (L_sd_to_xf) || defined (L_dd_to_xf ) || defined (L_td_to_xf) \ 225169689Skan || defined (L_xf_to_sd) || defined (L_xf_to_dd) || defined (L_xf_to_td) 226169689Skan#define BFP_KIND 3 227169689Skan#endif 228169689Skan 229169689Skan/* If BFP_KIND is defined, define additional macros: 230169689Skan 231169689Skan BFP_TYPE: The binary floating point data type. 232169689Skan 233169689Skan BFP_FMT: The format string for writing the value to a string. 234169689Skan 235169689Skan STR_TO_BFP: The function to read the value from a string. */ 236169689Skan 237169689Skan#if BFP_KIND == 1 238169689Skan/* strtof is declared in <stdlib.h> only for C99. */ 239169689Skanextern float strtof (const char *, char **); 240169689Skan#define BFP_TYPE SFtype 241169689Skan#define BFP_FMT "%e" 242169689Skan#define STR_TO_BFP strtof 243169689Skan 244169689Skan#elif BFP_KIND == 2 245169689Skan#define BFP_TYPE DFtype 246169689Skan#define BFP_FMT "%e" 247169689Skan#define STR_TO_BFP strtod 248169689Skan 249169689Skan#elif BFP_KIND == 3 250169689Skan#if LIBGCC2_HAS_XF_MODE 251169689Skan/* These aren't used if XF mode is not supported. */ 252169689Skan#define BFP_TYPE XFtype 253169689Skan#define BFP_FMT "%e" 254169689Skan#define BFP_VIA_TYPE double 255169689Skan#define STR_TO_BFP strtod 256169689Skan#endif 257169689Skan 258169689Skan#endif /* BFP_KIND */ 259169689Skan 260169689Skan#if WIDTH == 128 || WIDTH_TO == 128 261169689Skan#include "decimal128.h" 262169689Skan#endif 263169689Skan#if WIDTH == 64 || WIDTH_TO == 64 264169689Skan#include "decimal64.h" 265169689Skan#endif 266169689Skan#if WIDTH == 32 || WIDTH_TO == 32 267169689Skan#include "decimal32.h" 268169689Skan#endif 269169689Skan#include "decNumber.h" 270169689Skan 271169689Skan/* Names of arithmetic functions. */ 272169689Skan 273169689Skan#if WIDTH == 32 274169689Skan#define DFP_ADD __addsd3 275169689Skan#define DFP_SUB __subsd3 276169689Skan#define DFP_MULTIPLY __mulsd3 277169689Skan#define DFP_DIVIDE __divsd3 278169689Skan#define DFP_EQ __eqsd2 279169689Skan#define DFP_NE __nesd2 280169689Skan#define DFP_LT __ltsd2 281169689Skan#define DFP_GT __gtsd2 282169689Skan#define DFP_LE __lesd2 283169689Skan#define DFP_GE __gesd2 284169689Skan#define DFP_UNORD __unordsd2 285169689Skan#elif WIDTH == 64 286169689Skan#define DFP_ADD __adddd3 287169689Skan#define DFP_SUB __subdd3 288169689Skan#define DFP_MULTIPLY __muldd3 289169689Skan#define DFP_DIVIDE __divdd3 290169689Skan#define DFP_EQ __eqdd2 291169689Skan#define DFP_NE __nedd2 292169689Skan#define DFP_LT __ltdd2 293169689Skan#define DFP_GT __gtdd2 294169689Skan#define DFP_LE __ledd2 295169689Skan#define DFP_GE __gedd2 296169689Skan#define DFP_UNORD __unorddd2 297169689Skan#elif WIDTH == 128 298169689Skan#define DFP_ADD __addtd3 299169689Skan#define DFP_SUB __subtd3 300169689Skan#define DFP_MULTIPLY __multd3 301169689Skan#define DFP_DIVIDE __divtd3 302169689Skan#define DFP_EQ __eqtd2 303169689Skan#define DFP_NE __netd2 304169689Skan#define DFP_LT __lttd2 305169689Skan#define DFP_GT __gttd2 306169689Skan#define DFP_LE __letd2 307169689Skan#define DFP_GE __getd2 308169689Skan#define DFP_UNORD __unordtd2 309169689Skan#endif 310169689Skan 311169689Skan/* Names of functions to convert between different decimal float types. */ 312169689Skan 313169689Skan#if WIDTH == 32 314169689Skan#if WIDTH_TO == 64 315169689Skan#define DFP_TO_DFP __extendsddd2 316169689Skan#elif WIDTH_TO == 128 317169689Skan#define DFP_TO_DFP __extendsdtd2 318169689Skan#endif 319169689Skan#elif WIDTH == 64 320169689Skan#if WIDTH_TO == 32 321169689Skan#define DFP_TO_DFP __truncddsd2 322169689Skan#elif WIDTH_TO == 128 323169689Skan#define DFP_TO_DFP __extendddtd2 324169689Skan#endif 325169689Skan#elif WIDTH == 128 326169689Skan#if WIDTH_TO == 32 327169689Skan#define DFP_TO_DFP __trunctdsd2 328169689Skan#elif WIDTH_TO == 64 329169689Skan#define DFP_TO_DFP __trunctddd2 330169689Skan#endif 331169689Skan#endif 332169689Skan 333169689Skan/* Names of functions to convert between decimal float and integers. */ 334169689Skan 335169689Skan#if WIDTH == 32 336169689Skan#if INT_KIND == 1 337169689Skan#define INT_TO_DFP __floatsisd 338169689Skan#define DFP_TO_INT __fixsdsi 339169689Skan#elif INT_KIND == 2 340169689Skan#define INT_TO_DFP __floatdisd 341169689Skan#define DFP_TO_INT __fixsddi 342169689Skan#elif INT_KIND == 3 343169689Skan#define INT_TO_DFP __floatunssisd 344169689Skan#define DFP_TO_INT __fixunssdsi 345169689Skan#elif INT_KIND == 4 346169689Skan#define INT_TO_DFP __floatunsdisd 347169689Skan#define DFP_TO_INT __fixunssddi 348169689Skan#endif 349169689Skan#elif WIDTH == 64 350169689Skan#if INT_KIND == 1 351169689Skan#define INT_TO_DFP __floatsidd 352169689Skan#define DFP_TO_INT __fixddsi 353169689Skan#elif INT_KIND == 2 354169689Skan#define INT_TO_DFP __floatdidd 355169689Skan#define DFP_TO_INT __fixdddi 356169689Skan#elif INT_KIND == 3 357169689Skan#define INT_TO_DFP __floatunssidd 358169689Skan#define DFP_TO_INT __fixunsddsi 359169689Skan#elif INT_KIND == 4 360169689Skan#define INT_TO_DFP __floatunsdidd 361169689Skan#define DFP_TO_INT __fixunsdddi 362169689Skan#endif 363169689Skan#elif WIDTH == 128 364169689Skan#if INT_KIND == 1 365169689Skan#define INT_TO_DFP __floatsitd 366169689Skan#define DFP_TO_INT __fixtdsi 367169689Skan#elif INT_KIND == 2 368169689Skan#define INT_TO_DFP __floatditd 369169689Skan#define DFP_TO_INT __fixtddi 370169689Skan#elif INT_KIND == 3 371169689Skan#define INT_TO_DFP __floatunssitd 372169689Skan#define DFP_TO_INT __fixunstdsi 373169689Skan#elif INT_KIND == 4 374169689Skan#define INT_TO_DFP __floatunsditd 375169689Skan#define DFP_TO_INT __fixunstddi 376169689Skan#endif 377169689Skan#endif 378169689Skan 379169689Skan/* Names of functions to convert between decimal float and binary float. */ 380169689Skan 381169689Skan#if WIDTH == 32 382169689Skan#if BFP_KIND == 1 383169689Skan#define BFP_TO_DFP __extendsfsd 384169689Skan#define DFP_TO_BFP __truncsdsf 385169689Skan#elif BFP_KIND == 2 386169689Skan#define BFP_TO_DFP __truncdfsd 387169689Skan#define DFP_TO_BFP __extendsddf 388169689Skan#elif BFP_KIND == 3 389169689Skan#define BFP_TO_DFP __truncxfsd 390169689Skan#define DFP_TO_BFP __extendsdxf 391169689Skan#endif /* BFP_KIND */ 392169689Skan 393169689Skan#elif WIDTH == 64 394169689Skan#if BFP_KIND == 1 395169689Skan#define BFP_TO_DFP __extendsfdd 396169689Skan#define DFP_TO_BFP __truncddsf 397169689Skan#elif BFP_KIND == 2 398169689Skan#define BFP_TO_DFP __extenddfdd 399169689Skan#define DFP_TO_BFP __truncdddf 400169689Skan#elif BFP_KIND == 3 401169689Skan#define BFP_TO_DFP __truncxfdd 402169689Skan#define DFP_TO_BFP __extendddxf 403169689Skan#endif /* BFP_KIND */ 404169689Skan 405169689Skan#elif WIDTH == 128 406169689Skan#if BFP_KIND == 1 407169689Skan#define BFP_TO_DFP __extendsftd 408169689Skan#define DFP_TO_BFP __trunctdsf 409169689Skan#elif BFP_KIND == 2 410169689Skan#define BFP_TO_DFP __extenddftd 411169689Skan#define DFP_TO_BFP __trunctddf 412169689Skan#elif BFP_KIND == 3 413169689Skan#define BFP_TO_DFP __extendxftd 414169689Skan#define DFP_TO_BFP __trunctdxf 415169689Skan#endif /* BFP_KIND */ 416169689Skan 417169689Skan#endif /* WIDTH */ 418169689Skan 419169689Skan/* Some handy typedefs. */ 420169689Skan 421169689Skantypedef float SFtype __attribute__ ((mode (SF))); 422169689Skantypedef float DFtype __attribute__ ((mode (DF))); 423169689Skan#if LIBGCC2_HAS_XF_MODE 424169689Skantypedef float XFtype __attribute__ ((mode (XF))); 425169689Skan#endif /* LIBGCC2_HAS_XF_MODE */ 426169689Skan 427169689Skantypedef int SItype __attribute__ ((mode (SI))); 428169689Skantypedef int DItype __attribute__ ((mode (DI))); 429169689Skantypedef unsigned int USItype __attribute__ ((mode (SI))); 430169689Skantypedef unsigned int UDItype __attribute__ ((mode (DI))); 431169689Skan 432169689Skan/* The type of the result of a decimal float comparison. This must 433169689Skan match `word_mode' in GCC for the target. */ 434169689Skan 435169689Skantypedef int CMPtype __attribute__ ((mode (word))); 436169689Skan 437169689Skan/* Prototypes. */ 438169689Skan 439169689Skan#if defined (L_mul_sd) || defined (L_mul_dd) || defined (L_mul_td) 440169689Skanextern DFP_C_TYPE DFP_MULTIPLY (DFP_C_TYPE, DFP_C_TYPE); 441169689Skan#endif 442169689Skan 443169689Skan#if defined (L_div_sd) || defined (L_div_dd) || defined (L_div_td) 444169689Skanextern DFP_C_TYPE DFP_DIVIDE (DFP_C_TYPE, DFP_C_TYPE); 445169689Skan#endif 446169689Skan 447169689Skan#if defined (L_addsub_sd) || defined (L_addsub_dd) || defined (L_addsub_td) 448169689Skanextern DFP_C_TYPE DFP_ADD (DFP_C_TYPE, DFP_C_TYPE); 449169689Skanextern DFP_C_TYPE DFP_SUB (DFP_C_TYPE, DFP_C_TYPE); 450169689Skan#endif 451169689Skan 452169689Skan#if defined (L_eq_sd) || defined (L_eq_dd) || defined (L_eq_td) 453169689Skanextern CMPtype DFP_EQ (DFP_C_TYPE, DFP_C_TYPE); 454169689Skan#endif 455169689Skan 456169689Skan#if defined (L_ne_sd) || defined (L_ne_dd) || defined (L_ne_td) 457169689Skanextern CMPtype DFP_NE (DFP_C_TYPE, DFP_C_TYPE); 458169689Skan#endif 459169689Skan 460169689Skan#if defined (L_lt_sd) || defined (L_lt_dd) || defined (L_lt_td) 461169689Skanextern CMPtype DFP_LT (DFP_C_TYPE, DFP_C_TYPE); 462169689Skan#endif 463169689Skan 464169689Skan#if defined (L_gt_sd) || defined (L_gt_dd) || defined (L_gt_td) 465169689Skanextern CMPtype DFP_GT (DFP_C_TYPE, DFP_C_TYPE); 466169689Skan#endif 467169689Skan 468169689Skan#if defined (L_le_sd) || defined (L_le_dd) || defined (L_le_td) 469169689Skanextern CMPtype DFP_LE (DFP_C_TYPE, DFP_C_TYPE); 470169689Skan#endif 471169689Skan 472169689Skan#if defined (L_ge_sd) || defined (L_ge_dd) || defined (L_ge_td) 473169689Skanextern CMPtype DFP_GE (DFP_C_TYPE, DFP_C_TYPE); 474169689Skan#endif 475169689Skan 476169689Skan#if defined (L_unord_sd) || defined (L_unord_dd) || defined (L_unord_td) 477169689Skanextern CMPtype DFP_UNORD (DFP_C_TYPE, DFP_C_TYPE); 478169689Skan#endif 479169689Skan 480169689Skan#if defined (L_sd_to_dd) || defined (L_sd_to_td) || defined (L_dd_to_sd) \ 481169689Skan || defined (L_dd_to_td) || defined (L_td_to_sd) || defined (L_td_to_dd) 482169689Skanextern DFP_C_TYPE_TO DFP_TO_DFP (DFP_C_TYPE); 483169689Skan#endif 484169689Skan 485169689Skan#if defined (L_sd_to_si) || defined (L_dd_to_si) || defined (L_td_to_si) \ 486169689Skan || defined (L_sd_to_di) || defined (L_dd_to_di) || defined (L_td_to_di) \ 487169689Skan || defined (L_sd_to_usi) || defined (L_dd_to_usi) || defined (L_td_to_usi) \ 488169689Skan || defined (L_sd_to_udi) || defined (L_dd_to_udi) || defined (L_td_to_udi) 489169689Skanextern INT_TYPE DFP_TO_INT (DFP_C_TYPE); 490169689Skan#endif 491169689Skan 492169689Skan#if defined (L_si_to_sd) || defined (L_si_to_dd) || defined (L_si_to_td) \ 493169689Skan || defined (L_di_to_sd) || defined (L_di_to_dd) || defined (L_di_to_td) \ 494169689Skan || defined (L_usi_to_sd) || defined (L_usi_to_dd) || defined (L_usi_to_td) \ 495169689Skan || defined (L_udi_to_sd) || defined (L_udi_to_dd) || defined (L_udi_to_td) 496169689Skanextern DFP_C_TYPE INT_TO_DFP (INT_TYPE); 497169689Skan#endif 498169689Skan 499169689Skan#if defined (L_sd_to_sf) || defined (L_dd_to_sf) || defined (L_td_to_sf) \ 500169689Skan || defined (L_sd_to_df) || defined (L_dd_to_df) || defined (L_td_to_df) \ 501169689Skan || ((defined (L_sd_to_xf) || defined (L_dd_to_xf) || defined (L_td_to_xf)) \ 502169689Skan && LIBGCC2_HAS_XF_MODE) 503169689Skanextern BFP_TYPE DFP_TO_BFP (DFP_C_TYPE); 504169689Skan#endif 505169689Skan 506169689Skan#if defined (L_sf_to_sd) || defined (L_sf_to_dd) || defined (L_sf_to_td) \ 507169689Skan || defined (L_df_to_sd) || defined (L_df_to_dd) || defined (L_df_to_td) \ 508169689Skan || ((defined (L_xf_to_sd) || defined (L_xf_to_dd) || defined (L_xf_to_td)) \ 509169689Skan && LIBGCC2_HAS_XF_MODE) 510169689Skanextern DFP_C_TYPE BFP_TO_DFP (BFP_TYPE); 511169689Skan#endif 512169689Skan 513169689Skan#endif /* _DFPBIT_H */ 514