X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=libgcc%2Fconfig%2Flibbid%2Fbid_gcc_intrinsics.h;fp=libgcc%2Fconfig%2Flibbid%2Fbid_gcc_intrinsics.h;h=f5bd8d04a968e086278db69ba886977d26517ef3;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=0000000000000000000000000000000000000000;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libgcc/config/libbid/bid_gcc_intrinsics.h b/libgcc/config/libbid/bid_gcc_intrinsics.h new file mode 100644 index 00000000..f5bd8d04 --- /dev/null +++ b/libgcc/config/libbid/bid_gcc_intrinsics.h @@ -0,0 +1,295 @@ +/* Copyright (C) 2007, 2009 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 +. */ + +#ifndef _BID_GCC_INTRINSICS_H +#define _BID_GCC_INTRINSICS_H + +#ifdef IN_LIBGCC2 + +#include "tconfig.h" +#include "coretypes.h" +#include "tm.h" + +#ifndef LIBGCC2_WORDS_BIG_ENDIAN +#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN +#endif + +#ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN +#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN LIBGCC2_WORDS_BIG_ENDIAN +#endif + +#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE +#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE +#endif + +#ifndef LIBGCC2_HAS_XF_MODE +#define LIBGCC2_HAS_XF_MODE \ + (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80) +#endif + +#ifndef LIBGCC2_HAS_TF_MODE +#define LIBGCC2_HAS_TF_MODE \ + (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128) +#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 */