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