Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:30:55

0001 
0002 // (C) Copyright Tobias Schwinger
0003 //
0004 // Use modification and distribution are subject to the boost Software License,
0005 // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
0006 
0007 //------------------------------------------------------------------------------
0008 
0009 #ifndef BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED
0010 #define BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED
0011 
0012 #include <boost/config.hpp>
0013 #include <boost/detail/workaround.hpp>
0014 
0015 #if defined(BOOST_MSVC)
0016 
0017 #   if BOOST_MSVC < 1310
0018 #     error "unsupported compiler version"
0019 #   endif
0020 
0021 #   ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS
0022 
0023       // enable clrcall calling covention (call to .NET managed code) when
0024       // compiling with /clr 
0025 #     if BOOST_MSVC >= 1400 && defined(__cplusplus_cli)
0026 #       ifndef BOOST_FT_CC_CLRCALL
0027 #       define BOOST_FT_CC_CLRCALL callable_builtin
0028 #       endif
0029 #     endif
0030 
0031       // Intel x86 architecture specific calling conventions
0032 #     ifdef _M_IX86
0033 #       define BOOST_FT_COMMON_X86_CCs callable_builtin
0034 #       if BOOST_MSVC < 1400
0035           // version 7.1 is missing a keyword to specify the thiscall cc ...
0036 #         ifndef BOOST_FT_CC_IMPLICIT_THISCALL
0037 #         define BOOST_FT_CC_IMPLICIT_THISCALL non_variadic|member|callable_builtin
0038 #         ifndef BOOST_FT_CONFIG_OK
0039 #           pragma message("INFO| /Gd /Gr /Gz will compiler options will cause")
0040 #           pragma message("INFO| a compile error.")
0041 #           pragma message("INFO| Reconfigure Boost.FunctionTypes in this case.")
0042 #           pragma message("INFO| This message can be suppressed by defining")
0043 #           pragma message("INFO| BOOST_FT_CONFIG_OK.")
0044 #         endif
0045 #         endif
0046 #       else 
0047           // ...introduced in version 8
0048 #         ifndef BOOST_FT_CC_THISCALL
0049 #         define BOOST_FT_CC_THISCALL non_variadic|member|callable_builtin
0050 #         endif
0051 #       endif
0052 #     endif
0053 #   endif
0054 
0055 #elif defined(__GNUC__) && !defined(BOOST_INTEL_LINUX)
0056 
0057 #   if __GNUC__ < 3
0058 #     error "unsupported compiler version"
0059 #   endif
0060 
0061 #   ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS
0062 
0063 #     if defined(__i386__)
0064 #       // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20439
0065 #       // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29328
0066 #       if BOOST_WORKAROUND(__GNUC__,BOOST_TESTED_AT(4))
0067 #         ifndef BOOST_FT_CC_IMPLICIT 
0068 #         define BOOST_FT_CC_IMPLICIT member|callable_builtin
0069 #         endif
0070 #         define BOOST_FT_COMMON_X86_CCs non_member|callable_builtin
0071 #       else
0072 #         define BOOST_FT_COMMON_X86_CCs callable_builtin
0073 #       endif
0074 #     else
0075 #       ifndef BOOST_FT_CC_IMPLICIT
0076 #       define BOOST_FT_CC_IMPLICIT callable_builtin
0077 #       endif
0078 #     endif
0079 #   endif
0080 
0081 #   if (defined(BOOST_FT_CC_CDECL) || defined(BOOST_FT_COMMON_X86_CCs)) \
0082         && !defined(__cdecl)
0083 #     define __cdecl __attribute__((__cdecl__))
0084 #   endif
0085 #   if (defined(BOOST_FT_CC_STDCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \
0086         && !defined(__stdcall)
0087 #     define __stdcall __attribute__((__stdcall__))
0088 #   endif
0089 #   if (defined(BOOST_FT_CC_FASTCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \
0090         && !defined(__fastcall)
0091 #     define __fastcall __attribute__((__fastcall__))
0092 #   endif
0093 
0094 #elif defined(BOOST_BORLANDC)
0095 
0096 #   if BOOST_BORLANDC < 0x550
0097 #     error "unsupported compiler version"
0098 #   elif BOOST_BORLANDC > 0x565
0099 #     pragma message("WARNING: library untested with this compiler version")
0100 #   endif
0101 
0102 #   ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS
0103 #     define BOOST_FT_COMMON_X86_CCs callable_builtin
0104 #   endif
0105 
0106     // syntactic specialities of cc specifier
0107 #   define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \
0108                         result() cc_spec() lparen() type_mod() name() rparen()
0109 #else
0110     // only enable default calling convention
0111 #   define BOOST_FT_CC_IMPLICIT callable_builtin
0112 #endif
0113 
0114 
0115 #endif
0116