xref: /aosp_15_r20/external/libffi/src/x86/ffitarget.h (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
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