1d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* -----------------------------------------------------------------*-C-*- 246ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith ffitarget.h - Copyright (c) 2012 Anthony Green 346ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith Copyright (c) 1996-2003 Red Hat, Inc. 4d4c9320412177895f598a93d73a0e654db27c351Thomas Heller Target configuration macros for MIPS. 5d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 6d4c9320412177895f598a93d73a0e654db27c351Thomas Heller Permission is hereby granted, free of charge, to any person obtaining 7d4c9320412177895f598a93d73a0e654db27c351Thomas Heller a copy of this software and associated documentation files (the 8d4c9320412177895f598a93d73a0e654db27c351Thomas Heller ``Software''), to deal in the Software without restriction, including 9d4c9320412177895f598a93d73a0e654db27c351Thomas Heller without limitation the rights to use, copy, modify, merge, publish, 10d4c9320412177895f598a93d73a0e654db27c351Thomas Heller distribute, sublicense, and/or sell copies of the Software, and to 11d4c9320412177895f598a93d73a0e654db27c351Thomas Heller permit persons to whom the Software is furnished to do so, subject to 12d4c9320412177895f598a93d73a0e654db27c351Thomas Heller the following conditions: 13d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 14d4c9320412177895f598a93d73a0e654db27c351Thomas Heller The above copyright notice and this permission notice shall be included 15d4c9320412177895f598a93d73a0e654db27c351Thomas Heller in all copies or substantial portions of the Software. 16d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 178bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, 188bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 198bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 208bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 218bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 228bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 238bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 248bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller DEALINGS IN THE SOFTWARE. 25d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 26d4c9320412177895f598a93d73a0e654db27c351Thomas Heller ----------------------------------------------------------------------- */ 27d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 28d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#ifndef LIBFFI_TARGET_H 29d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define LIBFFI_TARGET_H 30d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 3146ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#ifndef LIBFFI_H 3246ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." 3346ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#endif 3446ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith 358bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller#ifdef linux 36817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# include <asm/sgidefs.h> 3746ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#elif defined(__rtems__) 3846ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith/* 3946ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith * Subprogram calling convention - copied from sgidefs.h 4046ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith */ 4146ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#define _MIPS_SIM_ABI32 1 4246ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#define _MIPS_SIM_NABI32 2 4346ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#define _MIPS_SIM_ABI64 3 4446ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith#elif !defined(__OpenBSD__) 45817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# include <sgidefs.h> 46817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#endif 4746ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith 488bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# ifndef _ABIN32 498bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define _ABIN32 _MIPS_SIM_NABI32 508bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# endif 518bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# ifndef _ABI64 528bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define _ABI64 _MIPS_SIM_ABI64 538bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# endif 548bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# ifndef _ABIO32 558bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define _ABIO32 _MIPS_SIM_ABI32 568bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# endif 578bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller 58d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#if !defined(_MIPS_SIM) 5946ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith# error -- something is very wrong -- 60d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else 61d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64)) 62d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# define FFI_MIPS_N32 63d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# else 64d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# if (_MIPS_SIM==_ABIO32 && defined(_ABIO32)) 65d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# define FFI_MIPS_O32 66d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# else 6746ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith# error -- this is an unsupported platform -- 68d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# endif 69d4c9320412177895f598a93d73a0e654db27c351Thomas Heller# endif 70d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif 71d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 72d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#ifdef FFI_MIPS_O32 73d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* O32 stack frames have 32bit integer args */ 748bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define FFI_SIZEOF_ARG 4 75d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else 76d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* N32 and N64 frames have 64bit integer args */ 778bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define FFI_SIZEOF_ARG 8 788bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# if _MIPS_SIM == _ABIN32 798bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define FFI_SIZEOF_JAVA_RAW 4 808bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# endif 81d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif 82d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 83d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_FLAG_BITS 2 84d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 85d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* SGI's strange assembler requires that we multiply by 4 rather 86d4c9320412177895f598a93d73a0e654db27c351Thomas Heller than shift left by FFI_FLAG_BITS */ 87d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 88d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_ARGS_D FFI_TYPE_DOUBLE 89d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_ARGS_F FFI_TYPE_FLOAT 90d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_ARGS_DD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_DOUBLE 91d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_ARGS_FF FFI_TYPE_FLOAT * 4 + FFI_TYPE_FLOAT 92d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_ARGS_FD FFI_TYPE_DOUBLE * 4 + FFI_TYPE_FLOAT 93d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_ARGS_DF FFI_TYPE_FLOAT * 4 + FFI_TYPE_DOUBLE 94d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 95d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* Needed for N32 structure returns */ 96d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_SMALLSTRUCT FFI_TYPE_UINT8 97d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_SMALLSTRUCT2 FFI_TYPE_SINT8 98d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 99d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#if 0 100d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* The SGI assembler can't handle this.. */ 101d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_DD (( FFI_ARGS_DD ) << 4) + FFI_TYPE_STRUCT 102d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* (and so on) */ 103d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else 104d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* ...so we calculate these by hand! */ 105d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_D 61 106d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_F 45 107d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_DD 253 108d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_FF 173 109d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_FD 237 110d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_DF 189 111d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_SMALL 93 112d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TYPE_STRUCT_SMALL2 109 113817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose 114817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose/* and for n32 soft float, add 16 * 2^4 */ 115817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#define FFI_TYPE_STRUCT_D_SOFT 317 116817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#define FFI_TYPE_STRUCT_F_SOFT 301 117817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#define FFI_TYPE_STRUCT_DD_SOFT 509 118817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#define FFI_TYPE_STRUCT_FF_SOFT 429 119817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#define FFI_TYPE_STRUCT_FD_SOFT 493 120817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#define FFI_TYPE_STRUCT_DF_SOFT 445 121817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#define FFI_TYPE_STRUCT_SOFT 16 122d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif 123d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 124d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#ifdef LIBFFI_ASM 125d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define v0 $2 126d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define v1 $3 127d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a0 $4 128d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a1 $5 129d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a2 $6 130d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a3 $7 131d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a4 $8 132d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a5 $9 133d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a6 $10 134d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define a7 $11 135d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t0 $8 136d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t1 $9 137d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t2 $10 138d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t3 $11 139d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t4 $12 140d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t5 $13 141d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t6 $14 142d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t7 $15 143d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t8 $24 144d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define t9 $25 145d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define ra $31 146d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 147d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#ifdef FFI_MIPS_O32 1488bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define REG_L lw 1498bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define REG_S sw 1508bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define SUBU subu 1518bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define ADDU addu 1528bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define SRL srl 1538bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define LI li 154d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else /* !FFI_MIPS_O32 */ 1558bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define REG_L ld 1568bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define REG_S sd 1578bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define SUBU dsubu 1588bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define ADDU daddu 1598bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define SRL dsrl 1608bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define LI dli 1618bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# if (_MIPS_SIM==_ABI64) 1628bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define LA dla 1638bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define EH_FRAME_ALIGN 3 1648bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define FDE_ADDR_BYTES .8byte 1658bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# else 1668bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define LA la 1678bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define EH_FRAME_ALIGN 2 1688bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define FDE_ADDR_BYTES .4byte 1698bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# endif /* _MIPS_SIM==_ABI64 */ 170d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif /* !FFI_MIPS_O32 */ 171d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else /* !LIBFFI_ASM */ 172817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# ifdef __GNUC__ 173817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# ifdef FFI_MIPS_O32 174d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* O32 stack frames have 32bit integer args */ 175d4c9320412177895f598a93d73a0e654db27c351Thomas Hellertypedef unsigned int ffi_arg __attribute__((__mode__(__SI__))); 176d4c9320412177895f598a93d73a0e654db27c351Thomas Hellertypedef signed int ffi_sarg __attribute__((__mode__(__SI__))); 177d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else 178d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* N32 and N64 frames have 64bit integer args */ 179d4c9320412177895f598a93d73a0e654db27c351Thomas Hellertypedef unsigned int ffi_arg __attribute__((__mode__(__DI__))); 180d4c9320412177895f598a93d73a0e654db27c351Thomas Hellertypedef signed int ffi_sarg __attribute__((__mode__(__DI__))); 181817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# endif 182817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# else 183817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# ifdef FFI_MIPS_O32 184817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose/* O32 stack frames have 32bit integer args */ 185817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klosetypedef __uint32_t ffi_arg; 186817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klosetypedef __int32_t ffi_sarg; 187817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# else 188817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose/* N32 and N64 frames have 64bit integer args */ 189817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klosetypedef __uint64_t ffi_arg; 190817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klosetypedef __int64_t ffi_sarg; 191817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# endif 192817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# endif /* __GNUC__ */ 193d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 194d4c9320412177895f598a93d73a0e654db27c351Thomas Hellertypedef enum ffi_abi { 195d4c9320412177895f598a93d73a0e654db27c351Thomas Heller FFI_FIRST_ABI = 0, 196d4c9320412177895f598a93d73a0e654db27c351Thomas Heller FFI_O32, 197d4c9320412177895f598a93d73a0e654db27c351Thomas Heller FFI_N32, 198d4c9320412177895f598a93d73a0e654db27c351Thomas Heller FFI_N64, 199d4c9320412177895f598a93d73a0e654db27c351Thomas Heller FFI_O32_SOFT_FLOAT, 200817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose FFI_N32_SOFT_FLOAT, 201817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose FFI_N64_SOFT_FLOAT, 20246ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith FFI_LAST_ABI, 203d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 204d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#ifdef FFI_MIPS_O32 205d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#ifdef __mips_soft_float 20646ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith FFI_DEFAULT_ABI = FFI_O32_SOFT_FLOAT 207d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else 20846ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith FFI_DEFAULT_ABI = FFI_O32 209d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif 210d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else 2118bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# if _MIPS_SIM==_ABI64 212817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# ifdef __mips_soft_float 21346ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT 214817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# else 21546ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith FFI_DEFAULT_ABI = FFI_N64 216817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# endif 2178bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# else 218817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# ifdef __mips_soft_float 21946ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT 220817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# else 22146ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith FFI_DEFAULT_ABI = FFI_N32 222817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose# endif 2238bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# endif 224d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif 225d4c9320412177895f598a93d73a0e654db27c351Thomas Heller} ffi_abi; 226d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 227d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_EXTRA_CIF_FIELDS unsigned rstruct_flag 228d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif /* !LIBFFI_ASM */ 229d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 230d4c9320412177895f598a93d73a0e654db27c351Thomas Heller/* ---- Definitions for closures ----------------------------------------- */ 231d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 232d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#if defined(FFI_MIPS_O32) 233d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_CLOSURES 1 234d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_TRAMPOLINE_SIZE 20 235d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#else 2368bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller/* N32/N64. */ 2378bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller# define FFI_CLOSURES 1 2388bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller#if _MIPS_SIM==_ABI64 2398bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller#define FFI_TRAMPOLINE_SIZE 52 2408bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller#else 2418bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller#define FFI_TRAMPOLINE_SIZE 20 2428bdf81d2df388ce06088193f95c992a7ee1eb553Thomas Heller#endif 243d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif /* FFI_MIPS_O32 */ 244d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#define FFI_NATIVE_RAW_API 0 245d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 246d4c9320412177895f598a93d73a0e654db27c351Thomas Heller#endif 247d4c9320412177895f598a93d73a0e654db27c351Thomas Heller 248