gcc/libgcc/config/libbid/bid_gcc_intrinsics.h
Rainer Orth 852b75ed97 Move libgcc_tm_file to toplevel libgcc
gcc:
	* configure.ac (libgcc_tm_file_list, libgcc_tm_include_list):
	Remove.
	* configure: Regenerate.
	* Makefile.in (libgcc_tm_file_list, libgcc_tm_include_list): Remove.
	(TM_H): Remove libgcc_tm.h, $(libgcc_tm_file_list).
	(libgcc_tm.h, cs-libgcc_tm.h): Remove.
	(clean): Remove libgcc_tm.h
	* mkconfig.sh: Don't include libgcc_tm.h in tm.h.
	* config.gcc (libgcc_tm_file): Remove.
	(arm*-*-linux*): Remove libgcc_tm_file for arm*-*-linux-*eabi.
	(arm*-*-uclinux*): Remove libgcc_tm_file for arm*-*-uclinux*eabi.
	(arm*-*-eabi*, arm*-*-symbianelf*): Remove libgcc_tm_file.
	(avr-*-rtems*): Likewise.
	(avr-*-*): Likewise.
	(frv-*-elf): Likewise.
	(frv-*-*linux*): Likewise.
	(h8300-*-rtems*): Likewise.
	(h8300-*-elf*): Likewise.
	(i[34567]86-*-darwin*): Likewise.
	(x86_64-*-darwin*): Likewise.
	(rx-*-elf*): Likewise.
	(tic6x-*-elf): Likewise.
	(tic6x-*-uclinux): Likewise.
	(i[34567]86-*-linux*, x86_64-*-linux*): Likewise.

	libgcc:
	* configure.ac (tm_file_): New variable.
	Determine from tm_file.
	(tm_file, tm_defines): Substitute.
	* configure: Regenerate.
	* mkheader.sh: New file.
	* Makefile.in (clean): Remove libgcc_tm.h.
	($(objects)): Depend on libgcc_tm.h.
	(libgcc_tm_defines, libgcc_tm_file): New variables.
	(libgcc_tm.h, libgcc_tm.stamp): New targets.
	($(libgcc-objects), $(libgcc-s-objects), $(libgcc-eh-objects))
	($(libgcov-objects), $(libunwind-objects), $(libunwind-s-objects))
	($(extra-parts)): Depend on libgcc_tm.h.
	* config.host (tm_defines, tm_file): New variable.
	(arm*-*-linux*): Set tm_file for arm*-*-linux-*eabi.
	(arm*-*-uclinux*): Set tm_file for arm*-*-uclinux*eabi.
	(arm*-*-eabi*, arm*-*-symbianelf*): Set tm_file.
	(avr-*-rtems*): Likewise.
	(avr-*-*): Likewise.
	(frv-*-elf): Likewise.
	(frv-*-*linux*): Likewise.
	(h8300-*-rtems*): Likewise.
	(h8300-*-elf*): Likewise.
	(i[34567]86-*-darwin*): Likewise.
	(x86_64-*-darwin*): Likewise.
	(rx-*-elf): Likewise.
	(tic6x-*-uclinux): Likewise.
	(tic6x-*-elf): Likewise.
	(i[34567]86-*-linux*, x86_64-*-linux*): Likewise.
	* config/alpha/gthr-posix.c: Include libgcc_tm.h.
	* config/i386/cygming-crtbegin.c: Likewise.
	* config/i386/cygming-crtend.c: Likewise.
	* config/ia64/fde-vms.c: Likewise.
	* config/ia64/unwind-ia64.c: Likewise.
	* config/libbid/bid_gcc_intrinsics.h: Likewise.
	* config/rs6000/darwin-fallback.c: Likewise.
	* config/stormy16/lib2funcs.c: Likewise.
	* config/xtensa/unwind-dw2-xtensa.c: Likewise.
	* crtstuff.c: Likewise.
	* dfp-bit.h: Likewise.
	* emutls.c: Likewise.
	* fixed-bit.c: Likewise.
	* fp-bit.c: Likewise.
	* generic-morestack-thread.c: Likewise.
	* generic-morestack.c: Likewise.
	* libgcc2.c: Likewise.
	* libgcov.c: Likewise.
	* unwind-dw2-fde-dip.c: Likewise.
	* unwind-dw2-fde.c: Likewise.
	* unwind-dw2.c: Likewise.
	* unwind-sjlj.c: Likewise.

Co-Authored-By: Paolo Bonzini <bonzini@gnu.org>

From-SVN: r180775
2011-11-02 15:26:35 +00:00

289 lines
8.6 KiB
C

/* Copyright (C) 2007, 2009, 2010, 2011 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"
#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 */