Viewing file: bid_gcc_intrinsics.h (8.42 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Copyright (C) 2007-2022 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */
#ifndef _BID_GCC_INTRINSICS_H #define _BID_GCC_INTRINSICS_H
#ifdef IN_LIBGCC2
#include "tconfig.h" #include "coretypes.h" #include "tm.h" #include "libgcc_tm.h"
#ifdef __LIBGCC_HAS_XF_MODE__ #define LIBGCC2_HAS_XF_MODE 1 #else #define LIBGCC2_HAS_XF_MODE 0 #endif
#ifdef __LIBGCC_HAS_TF_MODE__ #define LIBGCC2_HAS_TF_MODE 1 #else #define LIBGCC2_HAS_TF_MODE 0 #endif
#ifndef BID_HAS_XF_MODE #define BID_HAS_XF_MODE LIBGCC2_HAS_XF_MODE #endif
#ifndef BID_HAS_TF_MODE #define BID_HAS_TF_MODE LIBGCC2_HAS_TF_MODE #endif
/* Some handy typedefs. */
typedef float SFtype __attribute__ ((mode (SF))); typedef float DFtype __attribute__ ((mode (DF))); #if LIBGCC2_HAS_XF_MODE typedef float XFtype __attribute__ ((mode (XF))); #endif /* LIBGCC2_HAS_XF_MODE */ #if LIBGCC2_HAS_TF_MODE typedef float TFtype __attribute__ ((mode (TF))); #endif /* LIBGCC2_HAS_XF_MODE */
typedef int SItype __attribute__ ((mode (SI))); typedef int DItype __attribute__ ((mode (DI))); typedef unsigned int USItype __attribute__ ((mode (SI))); typedef unsigned int UDItype __attribute__ ((mode (DI)));
/* The type of the result of a decimal float comparison. This must match `word_mode' in GCC for the target. */
typedef int CMPtype __attribute__ ((mode (word)));
typedef int SINT8 __attribute__ ((mode (QI))); typedef unsigned int UINT8 __attribute__ ((mode (QI))); typedef USItype UINT32; typedef SItype SINT32; typedef UDItype UINT64; typedef DItype SINT64;
/* It has to be identical to the one defined in bid_functions.h. */ typedef __attribute__ ((aligned(16))) struct { UINT64 w[2]; } UINT128; #else /* if not IN_LIBGCC2 */
#ifndef BID_HAS_XF_MODE #define BID_HAS_XF_MODE 1 #endif
#ifndef BID_HAS_TF_MODE #if defined __i386__ #define BID_HAS_TF_MODE 0 #else #define BID_HAS_TF_MODE 1 #endif #endif
#ifndef SFtype #define SFtype float #endif
#ifndef DFtype #define DFtype double #endif
#if BID_HAS_XF_MODE #ifndef XFtype #define XFtype long double #endif
#endif /* IN_LIBGCC2 */
#if BID_HAS_TF_MODE #ifndef TFtype #define TFtype __float128 #endif #endif
#ifndef SItype #define SItype SINT32 #endif
#ifndef DItype #define DItype SINT64 #endif
#ifndef USItype #define USItype UINT32 #endif
#ifndef UDItype #define UDItype UINT64 #endif
#ifndef CMPtype #define CMPtype long #endif #endif /* IN_LIBGCC2 */
#if BID_HAS_GCC_DECIMAL_INTRINSICS /* Prototypes for gcc instrinsics */
extern _Decimal64 __bid_adddd3 (_Decimal64, _Decimal64); extern _Decimal64 __bid_subdd3 (_Decimal64, _Decimal64); extern _Decimal32 __bid_addsd3 (_Decimal32, _Decimal32); extern _Decimal32 __bid_subsd3 (_Decimal32, _Decimal32); extern _Decimal128 __bid_addtd3 (_Decimal128, _Decimal128); extern _Decimal128 __bid_subtd3 (_Decimal128, _Decimal128); extern DFtype __bid_truncdddf (_Decimal64); extern DItype __bid_fixdddi (_Decimal64); extern _Decimal32 __bid_truncddsd2 (_Decimal64); extern SFtype __bid_truncddsf (_Decimal64); extern SItype __bid_fixddsi (_Decimal64); extern _Decimal128 __bid_extendddtd2 (_Decimal64); #if BID_HAS_TF_MODE extern TFtype __bid_extendddtf (_Decimal64); #endif extern UDItype __bid_fixunsdddi (_Decimal64); extern USItype __bid_fixunsddsi (_Decimal64); #if BID_HAS_XF_MODE extern XFtype __bid_extendddxf (_Decimal64); #endif extern _Decimal64 __bid_extenddfdd (DFtype); extern _Decimal32 __bid_truncdfsd (DFtype); extern _Decimal128 __bid_extenddftd (DFtype); extern _Decimal64 __bid_floatdidd (DItype); extern _Decimal32 __bid_floatdisd (DItype); extern _Decimal128 __bid_floatditd (DItype); extern _Decimal64 __bid_divdd3 (_Decimal64, _Decimal64); extern _Decimal32 __bid_divsd3 (_Decimal32, _Decimal32); extern _Decimal128 __bid_divtd3 (_Decimal128, _Decimal128); extern CMPtype __bid_eqdd2 (_Decimal64, _Decimal64); extern CMPtype __bid_eqsd2 (_Decimal32, _Decimal32); extern CMPtype __bid_eqtd2 (_Decimal128, _Decimal128); extern CMPtype __bid_gedd2 (_Decimal64, _Decimal64); extern CMPtype __bid_gesd2 (_Decimal32, _Decimal32); extern CMPtype __bid_getd2 (_Decimal128, _Decimal128); extern CMPtype __bid_gtdd2 (_Decimal64, _Decimal64); extern CMPtype __bid_gtsd2 (_Decimal32, _Decimal32); extern CMPtype __bid_gttd2 (_Decimal128, _Decimal128); extern CMPtype __bid_ledd2 (_Decimal64, _Decimal64); extern CMPtype __bid_lesd2 (_Decimal32, _Decimal32); extern CMPtype __bid_letd2 (_Decimal128, _Decimal128); extern CMPtype __bid_ltdd2 (_Decimal64, _Decimal64); extern CMPtype __bid_ltsd2 (_Decimal32, _Decimal32); extern CMPtype __bid_lttd2 (_Decimal128, _Decimal128); extern CMPtype __bid_nedd2 (_Decimal64, _Decimal64); extern CMPtype __bid_nesd2 (_Decimal32, _Decimal32); extern CMPtype __bid_netd2 (_Decimal128, _Decimal128); extern CMPtype __bid_unorddd2 (_Decimal64, _Decimal64); extern CMPtype __bid_unordsd2 (_Decimal32, _Decimal32); extern CMPtype __bid_unordtd2 (_Decimal128, _Decimal128); extern _Decimal64 __bid_muldd3 (_Decimal64, _Decimal64); extern _Decimal32 __bid_mulsd3 (_Decimal32, _Decimal32); extern _Decimal128 __bid_multd3 (_Decimal128, _Decimal128); extern _Decimal64 __bid_extendsddd2 (_Decimal32); extern DFtype __bid_extendsddf (_Decimal32); extern DItype __bid_fixsddi (_Decimal32); extern SFtype __bid_truncsdsf (_Decimal32); extern SItype __bid_fixsdsi (_Decimal32); extern _Decimal128 __bid_extendsdtd2 (_Decimal32); #if BID_HAS_TF_MODE extern TFtype __bid_extendsdtf (_Decimal32); #endif extern UDItype __bid_fixunssddi (_Decimal32); extern USItype __bid_fixunssdsi (_Decimal32); #if BID_HAS_XF_MODE extern XFtype __bid_extendsdxf (_Decimal32); #endif extern _Decimal64 __bid_extendsfdd (SFtype); extern _Decimal32 __bid_extendsfsd (SFtype); extern _Decimal128 __bid_extendsftd (SFtype); extern _Decimal64 __bid_floatsidd (SItype); extern _Decimal32 __bid_floatsisd (SItype); extern _Decimal128 __bid_floatsitd (SItype); extern _Decimal64 __bid_trunctddd2 (_Decimal128); extern DFtype __bid_trunctddf (_Decimal128); extern DItype __bid_fixtddi (_Decimal128); extern _Decimal32 __bid_trunctdsd2 (_Decimal128); extern SFtype __bid_trunctdsf (_Decimal128); extern SItype __bid_fixtdsi (_Decimal128); #if BID_HAS_TF_MODE extern TFtype __bid_trunctdtf (_Decimal128); #endif extern UDItype __bid_fixunstddi (_Decimal128); extern USItype __bid_fixunstdsi (_Decimal128); #if BID_HAS_XF_MODE extern XFtype __bid_trunctdxf (_Decimal128); #endif #if BID_HAS_TF_MODE extern _Decimal64 __bid_trunctfdd (TFtype); extern _Decimal32 __bid_trunctfsd (TFtype); extern _Decimal128 __bid_extendtftd (TFtype); #endif extern _Decimal64 __bid_floatunsdidd (UDItype); extern _Decimal32 __bid_floatunsdisd (UDItype); extern _Decimal128 __bid_floatunsditd (UDItype); extern _Decimal64 __bid_floatunssidd (USItype); extern _Decimal32 __bid_floatunssisd (USItype); extern _Decimal128 __bid_floatunssitd (USItype); #if BID_HAS_XF_MODE extern _Decimal64 __bid_truncxfdd (XFtype); extern _Decimal32 __bid_truncxfsd (XFtype); extern _Decimal128 __bid_extendxftd (XFtype); #endif extern int isinfd32 (_Decimal32); extern int isinfd64 (_Decimal64); extern int isinfd128 (_Decimal128); #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
extern void __dfp_set_round (int); extern int __dfp_get_round (void); extern void __dfp_clear_except (void); extern int __dfp_test_except (int); extern void __dfp_raise_except (int);
#if BID_HAS_GCC_DECIMAL_INTRINSICS /* Used by gcc intrinsics. We have to define them after UINT128 is defined. */ union decimal32 { _Decimal32 d; UINT32 i; }; union decimal64 { _Decimal64 d; UINT64 i; }; union decimal128 { _Decimal128 d; UINT128 i; }; #if BID_HAS_TF_MODE union float128 { TFtype f; UINT128 i; }; #endif #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
#endif /* _BID_GCC_INTRINSICS_H */
|