// Detect if we're using arm-*-*-gnueabihf
#if defined(__arm__) && \
    defined(__ARM_ARCH_7A__) && defined(__ARM_EABI__) && \
    defined(__ARM_FP) && (__ARM_FP >= 0x04)
  #define ARM_GNUEABIHF
#endif

#if !defined(__x86_64__)  && \
    !defined(__aarch64__) && \
    !defined(__i386__)    && \
    !defined(ARM_GNUEABIHF)
  #error The only platforms that are currently supported are x86_64, i386, arm-gnueabihf, and aarch64.
#endif

#if defined(__x86_64__) || defined(__i386__)
  #define GLOBAL_X86
#endif

#if __SIZEOF_POINTER__ >= 8
  #define GLOBAL_64BIT
#else
  #define GLOBAL_32BIT
#endif

GCC_3.0 {
  __absvdi2;    __absvsi2;    __addvdi3; __addvsi3; __clear_cache; __ffsdi2;
  __fixunsdfdi; __fixunssfdi; __mulvdi3; __mulvsi3; __negvdi2;     __negvsi2;
  __subvdi3;    __subvsi3;
  _Unwind_DeleteException;
  _Unwind_ForcedUnwind;
  _Unwind_GetDataRelBase;
  _Unwind_GetLanguageSpecificData;
  _Unwind_GetRegionStart;
  _Unwind_GetTextRelBase;
  _Unwind_RaiseException;
  _Unwind_Resume;
};

GCC_3.3   { _Unwind_GetCFA; _Unwind_Resume_or_Rethrow;                    };
GCC_3.3.1 { __gcc_personality_v0;                                         };
GCC_3.4   { __clzdi2; __ctzdi2; __paritydi2; __popcountdi2;               };
GCC_3.4.2 { __enable_execute_stack;                                       };
GCC_4.0.0 { __divdc3; __divsc3; __muldc3; __mulsc3; __powidf2; __powisf2; };
GCC_4.3.0 { __bswapdi2; __bswapsi2; __emutls_get_address;                 };

#if defined(GLOBAL_32BIT)
  GCC_3.0 {
    __ashldi3;    __ashrdi3;   __cmpdi2;    __fixdfdi; __fixsfdi; __fixunsdfsi;
    __fixunssfsi; __floatdidf; __floatdisf; __lshrdi3; __muldi3;  __negdi2;
    __ucmpdi2;    __udivmoddi4;
  };

  GCC_3.4   { __clzsi2;      __ctzsi2;      __paritysi2; __popcountsi2; };
  GCC_4.2.0 { __floatundidf; __floatundisf;                             };
  GCC_4.3.0 { __ffssi2;                                                 };
  GCC_7.0.0 { __divmoddi4;                                              };
  GLIBC_2.0 { __divdi3;     __moddi3;       __udivdi3; __umoddi3;       };
#elif defined(GLOBAL_64BIT)
  GCC_3.0 {
    __ashlti3; __ashrti3;    __cmpti2;     __divti3;  __ffsti2;  __fixdfti;
    __fixsfti; __fixunssfti; __floattidf;  __lshrti3; __modti3;  __multi3;
    __negti2;  __ucmpti2;    __udivmodti4; __udivti3; __umodti3; __fixunsdfti;
    __floattisf;
  };

  GCC_3.4   { __clzti2;      __ctzti2;  __parityti2; __popcountti2;           };
  GCC_3.4.4 { __absvti2;     __addvti3; __mulvti3;   __negvti2;    __subvti3; };
  GCC_4.2.0 { __floatuntidf; __floatuntisf;                                   };
  GCC_7.0.0 { __divmodti4;                                                    };
#endif

#if defined(GLOBAL_X86)
  GCC_3.0 { __fixunsxfdi; };
  GCC_4.0.0 { __divxc3; __mulxc3; __powixf2; };
  GCC_4.8.0 { __cpu_indicator_init;          };
#endif

#if !defined(ARM_GNUEABIHF)
  GCC_3.0 {
    _Unwind_Find_FDE; _Unwind_GetGR; _Unwind_GetIP; _Unwind_SetGR; _Unwind_SetIP;
  };

  GCC_3.3   { _Unwind_Backtrace; _Unwind_FindEnclosingFunction; };
  GCC_4.2.0 { _Unwind_GetIPInfo; };
#else // defined(ARM_GNUEABIHF)
  GCC_3.0 {
    __adddf3;  __addsf3;      __divdf3;  __divsf3;    __divsi3;    __eqdf2;
    __eqsf2;   __extendsfdf2; __fixdfsi; __fixsfsi;   __floatsidf; __floatsisf;
    __gedf2;   __gesf2;       __gtdf2;   __gtsf2;     __ledf2;     __lesf2;
    __ltdf2;   __ltsf2;       __modsi3;  __muldf3;    __mulsf3;    __nedf2;
    __negdf2;  __negsf2;      __nesf2;   __subdf3;    __subsf3;    __truncdfsf2;
    __udivsi3; __umodsi3;
  };

  GCC_3.3.4 { __unorddf2; __unordsf2; };

  GCC_3.5 {
    __aeabi_cdcmpeq; __aeabi_cdcmple;  __aeabi_cdrcmple;       __aeabi_cfcmpeq;
    __aeabi_cfcmple; __aeabi_cfrcmple; __aeabi_d2f;            __aeabi_d2iz;
    __aeabi_d2lz;    __aeabi_d2uiz;    __aeabi_d2ulz;          __aeabi_dadd;
    __aeabi_dcmpeq;  __aeabi_dcmpge;   __aeabi_dcmpgt;         __aeabi_dcmple;
    __aeabi_dcmplt;  __aeabi_dcmpun;   __aeabi_ddiv;           __aeabi_dmul;
    __aeabi_dneg;    __aeabi_drsub;    __aeabi_dsub;           __aeabi_f2d;
    __aeabi_f2iz;    __aeabi_f2lz;     __aeabi_f2uiz;          __aeabi_f2ulz;
    __aeabi_fadd;    __aeabi_fcmpeq;   __aeabi_fcmpge;         __aeabi_fcmpgt;
    __aeabi_fcmple;  __aeabi_fcmplt;   __aeabi_fcmpun;         __aeabi_fdiv;
    __aeabi_fmul;    __aeabi_fneg;     __aeabi_frsub;          __aeabi_fsub;
    __aeabi_i2d;     __aeabi_i2f;      __aeabi_idiv;           __aeabi_idiv0;
    __aeabi_idivmod; __aeabi_l2d;      __aeabi_l2f;            __aeabi_lasr;
    __aeabi_lcmp;    __aeabi_ldiv0;    __aeabi_ldivmod;        __aeabi_llsl;
    __aeabi_llsr;    __aeabi_lmul;     __aeabi_ui2d;           __aeabi_ui2f;
    __aeabi_uidiv;   __aeabi_uidivmod; __aeabi_ul2d;           __aeabi_ul2f;
    __aeabi_ulcmp;   __aeabi_uldivmod; __aeabi_unwind_cpp_pr0;
    __aeabi_unwind_cpp_pr1;            __aeabi_unwind_cpp_pr2;
    __gnu_unwind_frame;
    _Unwind_Complete;
    _Unwind_VRS_Get;
    _Unwind_VRS_Pop;
    _Unwind_VRS_Set;
  };

  GCC_4.2.0 { __floatunsidf; __floatunsisf; };
  GCC_4.3.0 { _Unwind_Backtrace;            };
#endif

#if defined(__aarch64__)
  GCC_3.0 {
    __addtf3;     __divtf3;     __eqtf2;     __extenddftf2; __extendsftf2;
    __fixtfdi;    __fixtfsi;    __fixtfti;   __fixunstfdi;  __fixunstfsi;
    __fixunstfti; __floatditf;  __floatsitf; __floattitf;   __getf2;
    __gttf2;      __letf2;      __lttf2;     __multf3;      __netf2;
    __subtf3;     __trunctfdf2; __trunctfsf2;
  };

  GCC_4.0.0 { __powitf2;     __divtc3;      __multc3; };
  GCC_4.2.0 { __floatunditf; __floatunsitf; __floatuntitf; };
  GCC_4.5.0 { __unordtf2; };
#endif

#if defined(__aarch64__) || defined(__i386__)
  GLIBC_2.0 { __deregister_frame; __register_frame; };
#endif

#if defined(__i386__)
  GCC_3.0   { __fixunsxfsi; __fixxfdi; __floatdixf; };
  GCC_4.2.0 { __floatundixf; };
#endif

#if defined(__x86_64__)
  GCC_3.0 {
    __deregister_frame;    __register_frame;
    __fixunsxfti;          __fixxfti;                   __floattixf;
  };

  GCC_4.2.0 { __floatuntixf; };
  GCC_4.3.0 { __divtc3; __multc3; };
#endif
