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