190075Sobrien/* Header file for fp-bit.c. */ 2169689Skan/* Copyright (C) 2000, 2002, 2003, 2006 Free Software Foundation, Inc. 390075Sobrien 4132718SkanThis file is part of GCC. 590075Sobrien 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. 1090075Sobrien 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.) 1990075Sobrien 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 2590075SobrienYou 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. */ 2990075Sobrien 3090075Sobrien#ifndef GCC_FP_BIT_H 3190075Sobrien#define GCC_FP_BIT_H 3290075Sobrien 3390075Sobrien/* Defining FINE_GRAINED_LIBRARIES allows one to select which routines 3490075Sobrien from this file are compiled via additional -D options. 3590075Sobrien 3690075Sobrien This avoids the need to pull in the entire fp emulation library 3790075Sobrien when only a small number of functions are needed. 3890075Sobrien 39117395Skan If FINE_GRAINED_LIBRARIES is not defined, then compile every 4090075Sobrien suitable routine. */ 4190075Sobrien#ifndef FINE_GRAINED_LIBRARIES 4290075Sobrien#define L_pack_df 4390075Sobrien#define L_unpack_df 4490075Sobrien#define L_pack_sf 4590075Sobrien#define L_unpack_sf 4690075Sobrien#define L_addsub_sf 4790075Sobrien#define L_addsub_df 4890075Sobrien#define L_mul_sf 4990075Sobrien#define L_mul_df 5090075Sobrien#define L_div_sf 5190075Sobrien#define L_div_df 5290075Sobrien#define L_fpcmp_parts_sf 5390075Sobrien#define L_fpcmp_parts_df 5490075Sobrien#define L_compare_sf 5590075Sobrien#define L_compare_df 5690075Sobrien#define L_eq_sf 5790075Sobrien#define L_eq_df 5890075Sobrien#define L_ne_sf 5990075Sobrien#define L_ne_df 6090075Sobrien#define L_gt_sf 6190075Sobrien#define L_gt_df 6290075Sobrien#define L_ge_sf 6390075Sobrien#define L_ge_df 6490075Sobrien#define L_lt_sf 6590075Sobrien#define L_lt_df 6690075Sobrien#define L_le_sf 6790075Sobrien#define L_le_df 6890075Sobrien#define L_unord_sf 6990075Sobrien#define L_unord_df 7090075Sobrien#define L_usi_to_sf 7190075Sobrien#define L_usi_to_df 7290075Sobrien#define L_si_to_sf 7390075Sobrien#define L_si_to_df 7490075Sobrien#define L_sf_to_si 7590075Sobrien#define L_df_to_si 7690075Sobrien#define L_f_to_usi 7790075Sobrien#define L_df_to_usi 7890075Sobrien#define L_negate_sf 7990075Sobrien#define L_negate_df 8090075Sobrien#define L_make_sf 8190075Sobrien#define L_make_df 8290075Sobrien#define L_sf_to_df 8390075Sobrien#define L_df_to_sf 8490075Sobrien#ifdef FLOAT 8590075Sobrien#define L_thenan_sf 8690075Sobrien#else 8790075Sobrien#define L_thenan_df 8890075Sobrien#endif 8990075Sobrien#endif /* ! FINE_GRAINED_LIBRARIES */ 9090075Sobrien 91117395Skan#if __LDBL_MANT_DIG__ == 113 || __LDBL_MANT_DIG__ == 106 92169689Skan# if defined(TFLOAT) || defined(L_sf_to_tf) || defined(L_df_to_tf) 93169689Skan# define TMODES 94169689Skan# endif 95117395Skan#endif 96117395Skan 9790075Sobrientypedef float SFtype __attribute__ ((mode (SF))); 9890075Sobrientypedef float DFtype __attribute__ ((mode (DF))); 99117395Skan#ifdef TMODES 100117395Skantypedef float TFtype __attribute__ ((mode (TF))); 101117395Skan#endif 10290075Sobrien 10390075Sobrientypedef int HItype __attribute__ ((mode (HI))); 10490075Sobrientypedef int SItype __attribute__ ((mode (SI))); 10590075Sobrientypedef int DItype __attribute__ ((mode (DI))); 106117395Skan#ifdef TMODES 107117395Skantypedef int TItype __attribute__ ((mode (TI))); 108117395Skan#endif 10990075Sobrien 110169689Skan/* The type of the result of a floating point comparison. This must 111169689Skan match `word_mode' in GCC for the target. */ 11290075Sobrien#ifndef CMPtype 113169689Skantypedef int CMPtype __attribute__ ((mode (word))); 11490075Sobrien#endif 11590075Sobrien 11690075Sobrientypedef unsigned int UHItype __attribute__ ((mode (HI))); 11790075Sobrientypedef unsigned int USItype __attribute__ ((mode (SI))); 11890075Sobrientypedef unsigned int UDItype __attribute__ ((mode (DI))); 119117395Skan#ifdef TMODES 120117395Skantypedef unsigned int UTItype __attribute__ ((mode (TI))); 121117395Skan#endif 12290075Sobrien 12390075Sobrien#define MAX_USI_INT (~(USItype)0) 12490075Sobrien#define MAX_SI_INT ((SItype) (MAX_USI_INT >> 1)) 12590075Sobrien#define BITS_PER_SI (4 * BITS_PER_UNIT) 126117395Skan#ifdef TMODES 127117395Skan#define MAX_UDI_INT (~(UDItype)0) 128117395Skan#define MAX_DI_INT ((DItype) (MAX_UDI_INT >> 1)) 129117395Skan#define BITS_PER_DI (8 * BITS_PER_UNIT) 130117395Skan#endif 13190075Sobrien 13290075Sobrien#ifdef FLOAT_ONLY 13390075Sobrien#define NO_DI_MODE 13490075Sobrien#endif 13590075Sobrien 136117395Skan#ifdef TFLOAT 137117395Skan# ifndef TMODES 138117395Skan# error "TFLOAT requires long double to have 113 bits of mantissa" 139117395Skan# endif 140117395Skan 141117395Skan# define PREFIXFPDP tp 142117395Skan# define PREFIXSFDF tf 143117395Skan# define NGARDS 10L /* Is this right? */ 144117395Skan# define GARDROUND 0x1ff 145117395Skan# define GARDMASK 0x3ff 146117395Skan# define GARDMSB 0x200 147117395Skan# define FRAC_NBITS 128 148117395Skan 149117395Skan# if __LDBL_MANT_DIG__ == 113 /* IEEE quad */ 150117395Skan# define EXPBITS 15 151117395Skan# define EXPBIAS 16383 152117395Skan# define EXPMAX (0x7fff) 153117395Skan# define QUIET_NAN ((TItype)0x8 << 108) 154117395Skan# define FRACHIGH ((TItype)0x8 << 124) 155117395Skan# define FRACHIGH2 ((TItype)0xc << 124) 156117395Skan# define FRACBITS 112 157117395Skan# endif 158117395Skan 159117395Skan# if __LDBL_MANT_DIG__ == 106 /* IBM extended (double+double) */ 160117395Skan# define EXPBITS 11 161117395Skan# define EXPBIAS 1023 162117395Skan# define EXPMAX (0x7ff) 163117395Skan# define QUIET_NAN ((TItype)0x8 << (48 + 64)) 164117395Skan# define FRACHIGH ((TItype)0x8 << 124) 165117395Skan# define FRACHIGH2 ((TItype)0xc << 124) 166117395Skan# define FRACBITS 105 167117395Skan# define HALFFRACBITS 52 168117395Skan# define HALFSHIFT 64 169117395Skan# endif 170117395Skan 171117395Skan# define pack_d __pack_t 172117395Skan# define unpack_d __unpack_t 173117395Skan# define __fpcmp_parts __fpcmp_parts_t 174117395Skan typedef UTItype fractype; 175117395Skan typedef UDItype halffractype; 176117395Skan typedef USItype qrtrfractype; 177117395Skan#define qrtrfractype qrtrfractype 178117395Skan typedef TFtype FLO_type; 179117395Skan typedef TItype intfrac; 180117395Skan#elif defined FLOAT 18190075Sobrien# define NGARDS 7L 18290075Sobrien# define GARDROUND 0x3f 18390075Sobrien# define GARDMASK 0x7f 18490075Sobrien# define GARDMSB 0x40 18590075Sobrien# define EXPBITS 8 18690075Sobrien# define EXPBIAS 127 18790075Sobrien# define FRACBITS 23 18890075Sobrien# define EXPMAX (0xff) 18990075Sobrien# define QUIET_NAN 0x100000L 19090075Sobrien# define FRAC_NBITS 32 19190075Sobrien# define FRACHIGH 0x80000000L 19290075Sobrien# define FRACHIGH2 0xc0000000L 19390075Sobrien# define pack_d __pack_f 19490075Sobrien# define unpack_d __unpack_f 19590075Sobrien# define __fpcmp_parts __fpcmp_parts_f 19690075Sobrien typedef USItype fractype; 19790075Sobrien typedef UHItype halffractype; 19890075Sobrien typedef SFtype FLO_type; 19990075Sobrien typedef SItype intfrac; 20090075Sobrien 20190075Sobrien#else 20290075Sobrien# define PREFIXFPDP dp 20390075Sobrien# define PREFIXSFDF df 20490075Sobrien# define NGARDS 8L 20590075Sobrien# define GARDROUND 0x7f 20690075Sobrien# define GARDMASK 0xff 20790075Sobrien# define GARDMSB 0x80 20890075Sobrien# define EXPBITS 11 20990075Sobrien# define EXPBIAS 1023 21090075Sobrien# define FRACBITS 52 21190075Sobrien# define EXPMAX (0x7ff) 21290075Sobrien# define QUIET_NAN 0x8000000000000LL 21390075Sobrien# define FRAC_NBITS 64 21490075Sobrien# define FRACHIGH 0x8000000000000000LL 21590075Sobrien# define FRACHIGH2 0xc000000000000000LL 21690075Sobrien# define pack_d __pack_d 21790075Sobrien# define unpack_d __unpack_d 21890075Sobrien# define __fpcmp_parts __fpcmp_parts_d 21990075Sobrien typedef UDItype fractype; 22090075Sobrien typedef USItype halffractype; 22190075Sobrien typedef DFtype FLO_type; 22290075Sobrien typedef DItype intfrac; 22390075Sobrien#endif /* FLOAT */ 22490075Sobrien 22590075Sobrien#ifdef US_SOFTWARE_GOFAST 226117395Skan# ifdef TFLOAT 227117395Skan# error "GOFAST TFmode not supported" 228117395Skan# elif defined FLOAT 22990075Sobrien# define add fpadd 23090075Sobrien# define sub fpsub 23190075Sobrien# define multiply fpmul 23290075Sobrien# define divide fpdiv 23390075Sobrien# define compare fpcmp 234117395Skan# define _unord_f2 __unordsf2 23590075Sobrien# define usi_to_float __floatunsisf 23690075Sobrien# define si_to_float sitofp 23790075Sobrien# define float_to_si fptosi 23890075Sobrien# define float_to_usi fptoui 23990075Sobrien# define negate __negsf2 24090075Sobrien# define sf_to_df fptodp 241117395Skan# define sf_to_tf __extendsftf2 242117395Skan# else 24390075Sobrien# define add dpadd 24490075Sobrien# define sub dpsub 24590075Sobrien# define multiply dpmul 24690075Sobrien# define divide dpdiv 24790075Sobrien# define compare dpcmp 248117395Skan# define _unord_f2 __unorddf2 24990075Sobrien# define usi_to_float __floatunsidf 25090075Sobrien# define si_to_float litodp 25190075Sobrien# define float_to_si dptoli 25290075Sobrien# define float_to_usi dptoul 25390075Sobrien# define negate __negdf2 25490075Sobrien# define df_to_sf dptofp 255117395Skan# define df_to_tf __extenddftf2 25690075Sobrien# endif /* FLOAT */ 25790075Sobrien#else 258117395Skan# ifdef TFLOAT 259117395Skan# define add __addtf3 260117395Skan# define sub __subtf3 261117395Skan# define multiply __multf3 262117395Skan# define divide __divtf3 263117395Skan# define compare __cmptf2 264117395Skan# define _eq_f2 __eqtf2 265117395Skan# define _ne_f2 __netf2 266117395Skan# define _gt_f2 __gttf2 267117395Skan# define _ge_f2 __getf2 268117395Skan# define _lt_f2 __lttf2 269117395Skan# define _le_f2 __letf2 270117395Skan# define _unord_f2 __unordtf2 271117395Skan# define usi_to_float __floatunsitf 272117395Skan# define si_to_float __floatsitf 273117395Skan# define float_to_si __fixtfsi 274117395Skan# define float_to_usi __fixunstfsi 275117395Skan# define negate __negtf2 276117395Skan# define tf_to_sf __trunctfsf2 277117395Skan# define tf_to_df __trunctfdf2 278117395Skan# elif defined FLOAT 27990075Sobrien# define add __addsf3 28090075Sobrien# define sub __subsf3 28190075Sobrien# define multiply __mulsf3 28290075Sobrien# define divide __divsf3 28390075Sobrien# define compare __cmpsf2 28490075Sobrien# define _eq_f2 __eqsf2 28590075Sobrien# define _ne_f2 __nesf2 28690075Sobrien# define _gt_f2 __gtsf2 28790075Sobrien# define _ge_f2 __gesf2 28890075Sobrien# define _lt_f2 __ltsf2 28990075Sobrien# define _le_f2 __lesf2 29090075Sobrien# define _unord_f2 __unordsf2 29190075Sobrien# define usi_to_float __floatunsisf 29290075Sobrien# define si_to_float __floatsisf 29390075Sobrien# define float_to_si __fixsfsi 29490075Sobrien# define float_to_usi __fixunssfsi 29590075Sobrien# define negate __negsf2 29690075Sobrien# define sf_to_df __extendsfdf2 297117395Skan# define sf_to_tf __extendsftf2 298117395Skan# else 29990075Sobrien# define add __adddf3 30090075Sobrien# define sub __subdf3 30190075Sobrien# define multiply __muldf3 30290075Sobrien# define divide __divdf3 30390075Sobrien# define compare __cmpdf2 30490075Sobrien# define _eq_f2 __eqdf2 30590075Sobrien# define _ne_f2 __nedf2 30690075Sobrien# define _gt_f2 __gtdf2 30790075Sobrien# define _ge_f2 __gedf2 30890075Sobrien# define _lt_f2 __ltdf2 30990075Sobrien# define _le_f2 __ledf2 31090075Sobrien# define _unord_f2 __unorddf2 31190075Sobrien# define usi_to_float __floatunsidf 31290075Sobrien# define si_to_float __floatsidf 31390075Sobrien# define float_to_si __fixdfsi 31490075Sobrien# define float_to_usi __fixunsdfsi 31590075Sobrien# define negate __negdf2 31690075Sobrien# define df_to_sf __truncdfsf2 317117395Skan# define df_to_tf __extenddftf2 31890075Sobrien# endif /* FLOAT */ 31990075Sobrien#endif /* US_SOFTWARE_GOFAST */ 32090075Sobrien 32190075Sobrien#ifndef INLINE 32290075Sobrien#define INLINE __inline__ 32390075Sobrien#endif 32490075Sobrien 32590075Sobrien/* Preserve the sticky-bit when shifting fractions to the right. */ 326169689Skan#define LSHIFT(a, s) { a = (a >> s) | !!(a & (((fractype) 1 << s) - 1)); } 32790075Sobrien 32890075Sobrien/* numeric parameters */ 32990075Sobrien/* F_D_BITOFF is the number of bits offset between the MSB of the mantissa 33090075Sobrien of a float and of a double. Assumes there are only two float types. 33190075Sobrien (double::FRAC_BITS+double::NGARDS-(float::FRAC_BITS-float::NGARDS)) 33290075Sobrien */ 33390075Sobrien#define F_D_BITOFF (52+8-(23+7)) 33490075Sobrien 335117395Skan#ifdef TMODES 336117395Skan# define F_T_BITOFF (__LDBL_MANT_DIG__-1+10-(23+7)) 337117395Skan# define D_T_BITOFF (__LDBL_MANT_DIG__-1+10-(52+8)) 338117395Skan#endif 33990075Sobrien 340117395Skan 34190075Sobrien#define NORMAL_EXPMIN (-(EXPBIAS)+1) 342117395Skan#define IMPLICIT_1 ((fractype)1<<(FRACBITS+NGARDS)) 343117395Skan#define IMPLICIT_2 ((fractype)1<<(FRACBITS+1+NGARDS)) 34490075Sobrien 34590075Sobrien/* common types */ 34690075Sobrien 34790075Sobrientypedef enum 34890075Sobrien{ 34990075Sobrien CLASS_SNAN, 35090075Sobrien CLASS_QNAN, 35190075Sobrien CLASS_ZERO, 35290075Sobrien CLASS_NUMBER, 35390075Sobrien CLASS_INFINITY 35490075Sobrien} fp_class_type; 35590075Sobrien 35690075Sobrientypedef struct 35790075Sobrien{ 35890075Sobrien#ifdef SMALL_MACHINE 35990075Sobrien char class; 36090075Sobrien unsigned char sign; 36190075Sobrien short normal_exp; 36290075Sobrien#else 36390075Sobrien fp_class_type class; 36490075Sobrien unsigned int sign; 36590075Sobrien int normal_exp; 36690075Sobrien#endif 36790075Sobrien 36890075Sobrien union 36990075Sobrien { 37090075Sobrien fractype ll; 37190075Sobrien halffractype l[2]; 37290075Sobrien } fraction; 37390075Sobrien} fp_number_type; 37490075Sobrien 37590075Sobrientypedef union 37690075Sobrien{ 37790075Sobrien FLO_type value; 37890075Sobrien fractype value_raw; 37990075Sobrien 38090075Sobrien#ifndef FLOAT 381117395Skan# ifdef qrtrfractype 382117395Skan qrtrfractype qwords[4]; 383117395Skan# else 38490075Sobrien halffractype words[2]; 385117395Skan# endif 38690075Sobrien#endif 38790075Sobrien 38890075Sobrien#ifdef FLOAT_BIT_ORDER_MISMATCH 38990075Sobrien struct 39090075Sobrien { 39190075Sobrien fractype fraction:FRACBITS __attribute__ ((packed)); 39290075Sobrien unsigned int exp:EXPBITS __attribute__ ((packed)); 39390075Sobrien unsigned int sign:1 __attribute__ ((packed)); 39490075Sobrien } 39590075Sobrien bits; 39690075Sobrien#endif 39790075Sobrien 39890075Sobrien#ifdef _DEBUG_BITFLOAT 39990075Sobrien struct 40090075Sobrien { 40190075Sobrien unsigned int sign:1 __attribute__ ((packed)); 40290075Sobrien unsigned int exp:EXPBITS __attribute__ ((packed)); 40390075Sobrien fractype fraction:FRACBITS __attribute__ ((packed)); 40490075Sobrien } 40590075Sobrien bits_big_endian; 40690075Sobrien 40790075Sobrien struct 40890075Sobrien { 40990075Sobrien fractype fraction:FRACBITS __attribute__ ((packed)); 41090075Sobrien unsigned int exp:EXPBITS __attribute__ ((packed)); 41190075Sobrien unsigned int sign:1 __attribute__ ((packed)); 41290075Sobrien } 41390075Sobrien bits_little_endian; 41490075Sobrien#endif 41590075Sobrien} 41690075SobrienFLO_union_type; 41790075Sobrien 41890075Sobrien/* Prototypes */ 41990075Sobrien 420117395Skan#if defined(L_pack_df) || defined(L_pack_sf) || defined(L_pack_tf) 42190075Sobrienextern FLO_type pack_d (fp_number_type *); 42290075Sobrien#endif 42390075Sobrien 42490075Sobrienextern void unpack_d (FLO_union_type *, fp_number_type *); 42590075Sobrien 426117395Skan#if defined(L_addsub_sf) || defined(L_addsub_df) || defined(L_addsub_tf) 42790075Sobrienextern FLO_type add (FLO_type, FLO_type); 42890075Sobrienextern FLO_type sub (FLO_type, FLO_type); 42990075Sobrien#endif 43090075Sobrien 431117395Skan#if defined(L_mul_sf) || defined(L_mul_df) || defined(L_mul_tf) 43290075Sobrienextern FLO_type multiply (FLO_type, FLO_type); 43390075Sobrien#endif 43490075Sobrien 435117395Skan#if defined(L_div_sf) || defined(L_div_df) || defined(L_div_tf) 43690075Sobrienextern FLO_type divide (FLO_type, FLO_type); 43790075Sobrien#endif 43890075Sobrien 43990075Sobrienextern int __fpcmp_parts (fp_number_type *, fp_number_type *); 44090075Sobrien 441117395Skan#if defined(L_compare_sf) || defined(L_compare_df) || defined(L_compare_tf) 44290075Sobrienextern CMPtype compare (FLO_type, FLO_type); 44390075Sobrien#endif 44490075Sobrien 44590075Sobrien#ifndef US_SOFTWARE_GOFAST 44690075Sobrien 447117395Skan#if defined(L_eq_sf) || defined(L_eq_df) || defined(L_eq_tf) 44890075Sobrienextern CMPtype _eq_f2 (FLO_type, FLO_type); 44990075Sobrien#endif 45090075Sobrien 451117395Skan#if defined(L_ne_sf) || defined(L_ne_df) || defined(L_ne_tf) 45290075Sobrienextern CMPtype _ne_f2 (FLO_type, FLO_type); 45390075Sobrien#endif 45490075Sobrien 455117395Skan#if defined(L_gt_sf) || defined(L_gt_df) || defined(L_gt_tf) 45690075Sobrienextern CMPtype _gt_f2 (FLO_type, FLO_type); 45790075Sobrien#endif 45890075Sobrien 459117395Skan#if defined(L_ge_sf) || defined(L_ge_df) || defined(L_ge_tf) 46090075Sobrienextern CMPtype _ge_f2 (FLO_type, FLO_type); 46190075Sobrien#endif 46290075Sobrien 463117395Skan#if defined(L_lt_sf) || defined(L_lt_df) || defined(L_lt_tf) 46490075Sobrienextern CMPtype _lt_f2 (FLO_type, FLO_type); 46590075Sobrien#endif 46690075Sobrien 467117395Skan#if defined(L_le_sf) || defined(L_le_df) || defined(L_le_tf) 46890075Sobrienextern CMPtype _le_f2 (FLO_type, FLO_type); 46990075Sobrien#endif 47090075Sobrien 471117395Skan#if defined(L_unord_sf) || defined(L_unord_df) || defined(L_unord_tf) 47290075Sobrienextern CMPtype _unord_f2 (FLO_type, FLO_type); 47390075Sobrien#endif 47490075Sobrien 47590075Sobrien#endif /* ! US_SOFTWARE_GOFAST */ 47690075Sobrien 477117395Skan#if defined(L_si_to_sf) || defined(L_si_to_df) || defined(L_si_to_tf) 47890075Sobrienextern FLO_type si_to_float (SItype); 47990075Sobrien#endif 48090075Sobrien 481117395Skan#if defined(L_sf_to_si) || defined(L_df_to_si) || defined(L_tf_to_si) 48290075Sobrienextern SItype float_to_si (FLO_type); 48390075Sobrien#endif 48490075Sobrien 485117395Skan#if defined(L_sf_to_usi) || defined(L_df_to_usi) || defined(L_tf_to_usi) 486117395Skan#if defined(US_SOFTWARE_GOFAST) || defined(L_tf_to_usi) 48790075Sobrienextern USItype float_to_usi (FLO_type); 48890075Sobrien#endif 48990075Sobrien#endif 49090075Sobrien 491117395Skan#if defined(L_usi_to_sf) || defined(L_usi_to_df) || defined(L_usi_to_tf) 49290075Sobrienextern FLO_type usi_to_float (USItype); 49390075Sobrien#endif 49490075Sobrien 495117395Skan#if defined(L_negate_sf) || defined(L_negate_df) || defined(L_negate_tf) 49690075Sobrienextern FLO_type negate (FLO_type); 49790075Sobrien#endif 49890075Sobrien 49990075Sobrien#ifdef FLOAT 50090075Sobrien#if defined(L_make_sf) 50190075Sobrienextern SFtype __make_fp (fp_class_type, unsigned int, int, USItype); 50290075Sobrien#endif 50390075Sobrien#ifndef FLOAT_ONLY 50490075Sobrienextern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); 50590075Sobrien#if defined(L_sf_to_df) 50690075Sobrienextern DFtype sf_to_df (SFtype); 50790075Sobrien#endif 508117395Skan#if defined(L_sf_to_tf) && defined(TMODES) 509117395Skanextern TFtype sf_to_tf (SFtype); 510117395Skan#endif 51190075Sobrien#endif /* ! FLOAT_ONLY */ 51290075Sobrien#endif /* FLOAT */ 51390075Sobrien 51490075Sobrien#ifndef FLOAT 51590075Sobrienextern SFtype __make_fp (fp_class_type, unsigned int, int, USItype); 51690075Sobrien#if defined(L_make_df) 51790075Sobrienextern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); 51890075Sobrien#endif 51990075Sobrien#if defined(L_df_to_sf) 52090075Sobrienextern SFtype df_to_sf (DFtype); 52190075Sobrien#endif 522117395Skan#if defined(L_df_to_tf) && defined(TMODES) 523117395Skanextern TFtype df_to_tf (DFtype); 524117395Skan#endif 52590075Sobrien#endif /* ! FLOAT */ 52690075Sobrien 527117395Skan#ifdef TMODES 528117395Skanextern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); 529117395Skanextern TFtype __make_tp (fp_class_type, unsigned int, int, UTItype); 530117395Skan#ifdef TFLOAT 531117395Skan#if defined(L_tf_to_sf) 532117395Skanextern SFtype tf_to_sf (TFtype); 533117395Skan#endif 534117395Skan#if defined(L_tf_to_df) 535117395Skanextern DFtype tf_to_df (TFtype); 536117395Skan#endif 537117395Skan#if defined(L_di_to_tf) 538117395Skanextern TFtype di_to_df (DItype); 539117395Skan#endif 540117395Skan#endif /* TFLOAT */ 541117395Skan#endif /* TMODES */ 542117395Skan 54390075Sobrien#endif /* ! GCC_FP_BIT_H */ 544