coarray_43.f90: Add "-latomic" option if libatomic_available.
[gcc.git] / libgcc / libgcc2.h
index 98bb2742582b3a3b6c7fba5a02ce52e2ec65ef6f..097d28161bb4142a79600017a3aea77c554188b9 100644 (file)
@@ -1,5 +1,5 @@
 /* Header file for libgcc2.c.  */
-/* Copyright (C) 2000-2015 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2017 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -34,6 +34,12 @@ extern void __clear_cache (char *, char *);
 extern void __eprintf (const char *, const char *, unsigned int, const char *)
   __attribute__ ((__noreturn__));
 
+#ifdef __LIBGCC_HAS_HF_MODE__
+#define LIBGCC2_HAS_HF_MODE 1
+#else
+#define LIBGCC2_HAS_HF_MODE 0
+#endif
+
 #ifdef __LIBGCC_HAS_SF_MODE__
 #define LIBGCC2_HAS_SF_MODE 1
 #else
@@ -133,6 +139,10 @@ typedef unsigned int UTItype       __attribute__ ((mode (TI)));
 #endif
 #endif
 
+#if LIBGCC2_HAS_HF_MODE
+typedef                float HFtype    __attribute__ ((mode (HF)));
+typedef _Complex float HCtype  __attribute__ ((mode (HC)));
+#endif
 #if LIBGCC2_HAS_SF_MODE
 typedef        float SFtype    __attribute__ ((mode (SF)));
 typedef _Complex float SCtype  __attribute__ ((mode (SC)));
@@ -178,7 +188,7 @@ typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__)));
    if it existed.  */
 
 #if LIBGCC2_UNITS_PER_WORD == 8
-#define W_TYPE_SIZE (8 * BITS_PER_UNIT)
+#define W_TYPE_SIZE (8 * __CHAR_BIT__)
 #define Wtype  DItype
 #define UWtype UDItype
 #define HWtype DItype
@@ -194,7 +204,7 @@ typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__)));
 #endif
 #define COMPAT_SIMODE_TRAPPING_ARITHMETIC
 #elif LIBGCC2_UNITS_PER_WORD == 4
-#define W_TYPE_SIZE (4 * BITS_PER_UNIT)
+#define W_TYPE_SIZE (4 * __CHAR_BIT__)
 #define Wtype  SItype
 #define UWtype USItype
 #define HWtype SItype
@@ -209,7 +219,7 @@ typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__)));
 #define __NDW(a,b)     __ ## a ## di ## b
 #endif
 #elif LIBGCC2_UNITS_PER_WORD == 2
-#define W_TYPE_SIZE (2 * BITS_PER_UNIT)
+#define W_TYPE_SIZE (2 * __CHAR_BIT__)
 #define Wtype  HItype
 #define UWtype UHItype
 #define HWtype HItype
@@ -224,7 +234,7 @@ typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__)));
 #define __NDW(a,b)     __ ## a ## si ## b
 #endif
 #else
-#define W_TYPE_SIZE BITS_PER_UNIT
+#define W_TYPE_SIZE __CHAR_BIT__
 #define Wtype  QItype
 #define UWtype  UQItype
 #define HWtype QItype
@@ -271,6 +281,7 @@ typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__)));
 #define __ashrdi3      __NDW(ashr,3)
 #define __cmpdi2       __NDW(cmp,2)
 #define __ucmpdi2      __NDW(ucmp,2)
+#define __divmoddi4    __NDW(divmod,4)
 #define __udivmoddi4   __NDW(udivmod,4)
 #define __fixunstfDI   __NDW(fixunstf,)
 #define __fixtfdi      __NDW(fixtf,)
@@ -366,10 +377,12 @@ extern DWtype __divdi3 (DWtype, DWtype);
 extern UDWtype __udivdi3 (UDWtype, UDWtype);
 extern UDWtype __umoddi3 (UDWtype, UDWtype);
 extern DWtype __moddi3 (DWtype, DWtype);
+extern DWtype __divmoddi4 (DWtype, DWtype, DWtype *);
 
 /* __udivmoddi4 is static inline when building other libgcc2 portions.  */
 #if (!defined (L_udivdi3) && !defined (L_divdi3) && \
-     !defined (L_umoddi3) && !defined (L_moddi3))
+     !defined (L_umoddi3) && !defined (L_moddi3) && \
+     !defined (L_divmoddi4))
 extern UDWtype __udivmoddi4 (UDWtype, UDWtype, UDWtype *);
 #endif
 
@@ -424,6 +437,10 @@ extern SItype __negvsi2 (SItype);
 #endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */
 
 #undef int
+#if LIBGCC2_HAS_HF_MODE
+extern HCtype __divhc3 (HFtype, HFtype, HFtype, HFtype);
+extern HCtype __mulhc3 (HFtype, HFtype, HFtype, HFtype);
+#endif
 #if LIBGCC2_HAS_SF_MODE
 extern DWtype __fixsfdi (SFtype);
 extern SFtype __floatdisf (DWtype);