1*1fd5a2e1SPrashanth Swaminathan /* -----------------------------------------------------------------*-C-*- 2*1fd5a2e1SPrashanth Swaminathan ffitarget.h - Copyright (c) 2012, 2014, 2018 Anthony Green 3*1fd5a2e1SPrashanth Swaminathan Copyright (c) 1996-2003, 2010 Red Hat, Inc. 4*1fd5a2e1SPrashanth Swaminathan Copyright (C) 2008 Free Software Foundation, Inc. 5*1fd5a2e1SPrashanth Swaminathan 6*1fd5a2e1SPrashanth Swaminathan Target configuration macros for x86 and x86-64. 7*1fd5a2e1SPrashanth Swaminathan 8*1fd5a2e1SPrashanth Swaminathan Permission is hereby granted, free of charge, to any person obtaining 9*1fd5a2e1SPrashanth Swaminathan a copy of this software and associated documentation files (the 10*1fd5a2e1SPrashanth Swaminathan ``Software''), to deal in the Software without restriction, including 11*1fd5a2e1SPrashanth Swaminathan without limitation the rights to use, copy, modify, merge, publish, 12*1fd5a2e1SPrashanth Swaminathan distribute, sublicense, and/or sell copies of the Software, and to 13*1fd5a2e1SPrashanth Swaminathan permit persons to whom the Software is furnished to do so, subject to 14*1fd5a2e1SPrashanth Swaminathan the following conditions: 15*1fd5a2e1SPrashanth Swaminathan 16*1fd5a2e1SPrashanth Swaminathan The above copyright notice and this permission notice shall be included 17*1fd5a2e1SPrashanth Swaminathan in all copies or substantial portions of the Software. 18*1fd5a2e1SPrashanth Swaminathan 19*1fd5a2e1SPrashanth Swaminathan THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, 20*1fd5a2e1SPrashanth Swaminathan EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21*1fd5a2e1SPrashanth Swaminathan MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22*1fd5a2e1SPrashanth Swaminathan NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23*1fd5a2e1SPrashanth Swaminathan HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24*1fd5a2e1SPrashanth Swaminathan WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25*1fd5a2e1SPrashanth Swaminathan OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 26*1fd5a2e1SPrashanth Swaminathan DEALINGS IN THE SOFTWARE. 27*1fd5a2e1SPrashanth Swaminathan 28*1fd5a2e1SPrashanth Swaminathan ----------------------------------------------------------------------- */ 29*1fd5a2e1SPrashanth Swaminathan 30*1fd5a2e1SPrashanth Swaminathan #ifndef LIBFFI_TARGET_H 31*1fd5a2e1SPrashanth Swaminathan #define LIBFFI_TARGET_H 32*1fd5a2e1SPrashanth Swaminathan 33*1fd5a2e1SPrashanth Swaminathan #ifndef LIBFFI_H 34*1fd5a2e1SPrashanth Swaminathan #error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." 35*1fd5a2e1SPrashanth Swaminathan #endif 36*1fd5a2e1SPrashanth Swaminathan 37*1fd5a2e1SPrashanth Swaminathan /* ---- System specific configurations ----------------------------------- */ 38*1fd5a2e1SPrashanth Swaminathan 39*1fd5a2e1SPrashanth Swaminathan /* For code common to all platforms on x86 and x86_64. */ 40*1fd5a2e1SPrashanth Swaminathan #define X86_ANY 41*1fd5a2e1SPrashanth Swaminathan 42*1fd5a2e1SPrashanth Swaminathan #if defined (X86_64) && defined (__i386__) 43*1fd5a2e1SPrashanth Swaminathan #undef X86_64 44*1fd5a2e1SPrashanth Swaminathan #define X86 45*1fd5a2e1SPrashanth Swaminathan #endif 46*1fd5a2e1SPrashanth Swaminathan 47*1fd5a2e1SPrashanth Swaminathan #ifdef X86_WIN64 48*1fd5a2e1SPrashanth Swaminathan #define FFI_SIZEOF_ARG 8 49*1fd5a2e1SPrashanth Swaminathan #define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ 50*1fd5a2e1SPrashanth Swaminathan #endif 51*1fd5a2e1SPrashanth Swaminathan 52*1fd5a2e1SPrashanth Swaminathan #define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION 53*1fd5a2e1SPrashanth Swaminathan #ifndef _MSC_VER 54*1fd5a2e1SPrashanth Swaminathan #define FFI_TARGET_HAS_COMPLEX_TYPE 55*1fd5a2e1SPrashanth Swaminathan #endif 56*1fd5a2e1SPrashanth Swaminathan 57*1fd5a2e1SPrashanth Swaminathan /* ---- Generic type definitions ----------------------------------------- */ 58*1fd5a2e1SPrashanth Swaminathan 59*1fd5a2e1SPrashanth Swaminathan #ifndef LIBFFI_ASM 60*1fd5a2e1SPrashanth Swaminathan #ifdef X86_WIN64 61*1fd5a2e1SPrashanth Swaminathan #ifdef _MSC_VER 62*1fd5a2e1SPrashanth Swaminathan typedef unsigned __int64 ffi_arg; 63*1fd5a2e1SPrashanth Swaminathan typedef __int64 ffi_sarg; 64*1fd5a2e1SPrashanth Swaminathan #else 65*1fd5a2e1SPrashanth Swaminathan typedef unsigned long long ffi_arg; 66*1fd5a2e1SPrashanth Swaminathan typedef long long ffi_sarg; 67*1fd5a2e1SPrashanth Swaminathan #endif 68*1fd5a2e1SPrashanth Swaminathan #else 69*1fd5a2e1SPrashanth Swaminathan #if defined __x86_64__ && defined __ILP32__ 70*1fd5a2e1SPrashanth Swaminathan #define FFI_SIZEOF_ARG 8 71*1fd5a2e1SPrashanth Swaminathan #define FFI_SIZEOF_JAVA_RAW 4 72*1fd5a2e1SPrashanth Swaminathan typedef unsigned long long ffi_arg; 73*1fd5a2e1SPrashanth Swaminathan typedef long long ffi_sarg; 74*1fd5a2e1SPrashanth Swaminathan #else 75*1fd5a2e1SPrashanth Swaminathan typedef unsigned long ffi_arg; 76*1fd5a2e1SPrashanth Swaminathan typedef signed long ffi_sarg; 77*1fd5a2e1SPrashanth Swaminathan #endif 78*1fd5a2e1SPrashanth Swaminathan #endif 79*1fd5a2e1SPrashanth Swaminathan 80*1fd5a2e1SPrashanth Swaminathan typedef enum ffi_abi { 81*1fd5a2e1SPrashanth Swaminathan #if defined(X86_WIN64) 82*1fd5a2e1SPrashanth Swaminathan FFI_FIRST_ABI = 0, 83*1fd5a2e1SPrashanth Swaminathan FFI_WIN64, /* sizeof(long double) == 8 - microsoft compilers */ 84*1fd5a2e1SPrashanth Swaminathan FFI_GNUW64, /* sizeof(long double) == 16 - GNU compilers */ 85*1fd5a2e1SPrashanth Swaminathan FFI_LAST_ABI, 86*1fd5a2e1SPrashanth Swaminathan #ifdef __GNUC__ 87*1fd5a2e1SPrashanth Swaminathan FFI_DEFAULT_ABI = FFI_GNUW64 88*1fd5a2e1SPrashanth Swaminathan #else 89*1fd5a2e1SPrashanth Swaminathan FFI_DEFAULT_ABI = FFI_WIN64 90*1fd5a2e1SPrashanth Swaminathan #endif 91*1fd5a2e1SPrashanth Swaminathan 92*1fd5a2e1SPrashanth Swaminathan #elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) 93*1fd5a2e1SPrashanth Swaminathan FFI_FIRST_ABI = 1, 94*1fd5a2e1SPrashanth Swaminathan FFI_UNIX64, 95*1fd5a2e1SPrashanth Swaminathan FFI_WIN64, 96*1fd5a2e1SPrashanth Swaminathan FFI_EFI64 = FFI_WIN64, 97*1fd5a2e1SPrashanth Swaminathan FFI_GNUW64, 98*1fd5a2e1SPrashanth Swaminathan FFI_LAST_ABI, 99*1fd5a2e1SPrashanth Swaminathan FFI_DEFAULT_ABI = FFI_UNIX64 100*1fd5a2e1SPrashanth Swaminathan 101*1fd5a2e1SPrashanth Swaminathan #elif defined(X86_WIN32) 102*1fd5a2e1SPrashanth Swaminathan FFI_FIRST_ABI = 0, 103*1fd5a2e1SPrashanth Swaminathan FFI_SYSV = 1, 104*1fd5a2e1SPrashanth Swaminathan FFI_STDCALL = 2, 105*1fd5a2e1SPrashanth Swaminathan FFI_THISCALL = 3, 106*1fd5a2e1SPrashanth Swaminathan FFI_FASTCALL = 4, 107*1fd5a2e1SPrashanth Swaminathan FFI_MS_CDECL = 5, 108*1fd5a2e1SPrashanth Swaminathan FFI_PASCAL = 6, 109*1fd5a2e1SPrashanth Swaminathan FFI_REGISTER = 7, 110*1fd5a2e1SPrashanth Swaminathan FFI_LAST_ABI, 111*1fd5a2e1SPrashanth Swaminathan FFI_DEFAULT_ABI = FFI_MS_CDECL 112*1fd5a2e1SPrashanth Swaminathan #else 113*1fd5a2e1SPrashanth Swaminathan FFI_FIRST_ABI = 0, 114*1fd5a2e1SPrashanth Swaminathan FFI_SYSV = 1, 115*1fd5a2e1SPrashanth Swaminathan FFI_THISCALL = 3, 116*1fd5a2e1SPrashanth Swaminathan FFI_FASTCALL = 4, 117*1fd5a2e1SPrashanth Swaminathan FFI_STDCALL = 5, 118*1fd5a2e1SPrashanth Swaminathan FFI_PASCAL = 6, 119*1fd5a2e1SPrashanth Swaminathan FFI_REGISTER = 7, 120*1fd5a2e1SPrashanth Swaminathan FFI_MS_CDECL = 8, 121*1fd5a2e1SPrashanth Swaminathan FFI_LAST_ABI, 122*1fd5a2e1SPrashanth Swaminathan FFI_DEFAULT_ABI = FFI_SYSV 123*1fd5a2e1SPrashanth Swaminathan #endif 124*1fd5a2e1SPrashanth Swaminathan } ffi_abi; 125*1fd5a2e1SPrashanth Swaminathan #endif 126*1fd5a2e1SPrashanth Swaminathan 127*1fd5a2e1SPrashanth Swaminathan /* ---- Definitions for closures ----------------------------------------- */ 128*1fd5a2e1SPrashanth Swaminathan 129*1fd5a2e1SPrashanth Swaminathan #define FFI_CLOSURES 1 130*1fd5a2e1SPrashanth Swaminathan #define FFI_GO_CLOSURES 1 131*1fd5a2e1SPrashanth Swaminathan 132*1fd5a2e1SPrashanth Swaminathan #define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) 133*1fd5a2e1SPrashanth Swaminathan #define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) 134*1fd5a2e1SPrashanth Swaminathan #define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) 135*1fd5a2e1SPrashanth Swaminathan #define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) 136*1fd5a2e1SPrashanth Swaminathan 137*1fd5a2e1SPrashanth Swaminathan #if defined (X86_64) || defined(X86_WIN64) \ 138*1fd5a2e1SPrashanth Swaminathan || (defined (__x86_64__) && defined (X86_DARWIN)) 139*1fd5a2e1SPrashanth Swaminathan # define FFI_TRAMPOLINE_SIZE 24 140*1fd5a2e1SPrashanth Swaminathan # define FFI_NATIVE_RAW_API 0 141*1fd5a2e1SPrashanth Swaminathan #else 142*1fd5a2e1SPrashanth Swaminathan # define FFI_TRAMPOLINE_SIZE 12 143*1fd5a2e1SPrashanth Swaminathan # define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ 144*1fd5a2e1SPrashanth Swaminathan #endif 145*1fd5a2e1SPrashanth Swaminathan 146*1fd5a2e1SPrashanth Swaminathan #endif 147*1fd5a2e1SPrashanth Swaminathan 148