summaryrefslogtreecommitdiff
path: root/ext/ffi_c/libffi/src/x86/ffitarget.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ffi_c/libffi/src/x86/ffitarget.h')
-rw-r--r--ext/ffi_c/libffi/src/x86/ffitarget.h39
1 files changed, 34 insertions, 5 deletions
diff --git a/ext/ffi_c/libffi/src/x86/ffitarget.h b/ext/ffi_c/libffi/src/x86/ffitarget.h
index 542e6d4..a236677 100644
--- a/ext/ffi_c/libffi/src/x86/ffitarget.h
+++ b/ext/ffi_c/libffi/src/x86/ffitarget.h
@@ -1,6 +1,7 @@
/* -----------------------------------------------------------------*-C-*-
- ffitarget.h - Copyright (c) 1996-2003, 2010 Red Hat, Inc.
- Copyright (C) 2008 Free Software Foundation, Inc.
+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green
+ Copyright (c) 1996-2003, 2010 Red Hat, Inc.
+ Copyright (C) 2008 Free Software Foundation, Inc.
Target configuration macros for x86 and x86-64.
@@ -29,6 +30,10 @@
#ifndef LIBFFI_TARGET_H
#define LIBFFI_TARGET_H
+#ifndef LIBFFI_H
+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
+#endif
+
/* ---- System specific configurations ----------------------------------- */
/* For code common to all platforms on x86 and x86_64. */
@@ -44,6 +49,9 @@
#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */
#endif
+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION
+#define FFI_TARGET_HAS_COMPLEX_TYPE
+
/* ---- Generic type definitions ----------------------------------------- */
#ifndef LIBFFI_ASM
@@ -56,9 +64,16 @@ typedef unsigned long long ffi_arg;
typedef long long ffi_sarg;
#endif
#else
+#if defined __x86_64__ && defined __ILP32__
+#define FFI_SIZEOF_ARG 8
+#define FFI_SIZEOF_JAVA_RAW 4
+typedef unsigned long long ffi_arg;
+typedef long long ffi_sarg;
+#else
typedef unsigned long ffi_arg;
typedef signed long ffi_sarg;
#endif
+#endif
typedef enum ffi_abi {
FFI_FIRST_ABI = 0,
@@ -67,9 +82,17 @@ typedef enum ffi_abi {
#ifdef X86_WIN32
FFI_SYSV,
FFI_STDCALL,
+ FFI_THISCALL,
+ FFI_FASTCALL,
+ FFI_MS_CDECL,
+ FFI_PASCAL,
+ FFI_REGISTER,
FFI_LAST_ABI,
- /* TODO: Add fastcall support for the sake of completeness */
+#ifdef _MSC_VER
+ FFI_DEFAULT_ABI = FFI_MS_CDECL
+#else
FFI_DEFAULT_ABI = FFI_SYSV
+#endif
#elif defined(X86_WIN64)
FFI_WIN64,
@@ -80,6 +103,11 @@ typedef enum ffi_abi {
/* ---- Intel x86 and AMD x86-64 - */
FFI_SYSV,
FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */
+ FFI_THISCALL,
+ FFI_FASTCALL,
+ FFI_STDCALL,
+ FFI_PASCAL,
+ FFI_REGISTER,
FFI_LAST_ABI,
#if defined(__i386__) || defined(__i386)
FFI_DEFAULT_ABI = FFI_SYSV
@@ -96,13 +124,14 @@ typedef enum ffi_abi {
#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1)
#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2)
#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3)
+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4)
#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN))
#define FFI_TRAMPOLINE_SIZE 24
#define FFI_NATIVE_RAW_API 0
#else
#ifdef X86_WIN32
-#define FFI_TRAMPOLINE_SIZE 13
+#define FFI_TRAMPOLINE_SIZE 52
#else
#ifdef X86_WIN64
#define FFI_TRAMPOLINE_SIZE 29
@@ -113,7 +142,7 @@ typedef enum ffi_abi {
#endif
#endif
#ifndef X86_WIN64
-#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */
+#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */
#endif
#endif