mirror of
https://github.com/HackerN64/HackerOoT.git
synced 2026-01-21 10:37:37 -08:00
Support building for multiple MIPS ABIs: o32 (default), n32 and eabi32 (#135)
* Support building for multiple MIPS ABIs: o32 (default), n32 and eabi32 * Default is EABI32 * Try fix mgu register name error * Restore comment * Make o32 default again, warn about bad emulators
This commit is contained in:
@@ -108,12 +108,19 @@
|
||||
.set x, y
|
||||
#endif
|
||||
|
||||
#if !defined(_MIPS_SIM) || _MIPS_SIM != _ABIO32
|
||||
.set $t4, $ta0
|
||||
.set $t5, $ta1
|
||||
.set $t6, $ta2
|
||||
.set $t7, $ta3
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Stack Alignment
|
||||
*/
|
||||
#if (_MIPS_SIM == _ABIO32)
|
||||
#if defined(_MIPS_SIM) && (_MIPS_SIM == _ABIO32)
|
||||
#define NARGSAVE 4 /* space for 4 args must be allocated */
|
||||
#define ALSZ (8-1)
|
||||
#define ALMASK ~(8-1)
|
||||
|
||||
@@ -7,7 +7,92 @@
|
||||
#define _MIPS_SIM_ABI64 _ABI64
|
||||
#endif
|
||||
|
||||
#if (_MIPS_SIM == _MIPS_SIM_ABI32)
|
||||
#if !defined(_MIPS_SIM) /* EABI32 */
|
||||
|
||||
#define zero $0
|
||||
#define AT $at
|
||||
#define v0 $2
|
||||
#define v1 $3
|
||||
#define a0 $4
|
||||
#define a1 $5
|
||||
#define a2 $6
|
||||
#define a3 $7
|
||||
#define t0 $8
|
||||
#define a4 $8
|
||||
#define t1 $9
|
||||
#define a5 $9
|
||||
#define t2 $10
|
||||
#define a6 $10
|
||||
#define t3 $11
|
||||
#define a7 $11
|
||||
#define t4 $12
|
||||
#define ta0 $12
|
||||
#define t5 $13
|
||||
#define ta1 $13
|
||||
#define t6 $14
|
||||
#define ta2 $14
|
||||
#define t7 $15
|
||||
#define ta3 $15
|
||||
#define s0 $16
|
||||
#define s1 $17
|
||||
#define s2 $18
|
||||
#define s3 $19
|
||||
#define s4 $20
|
||||
#define s5 $21
|
||||
#define s6 $22
|
||||
#define s7 $23
|
||||
#define t8 $24
|
||||
#define t9 $25
|
||||
#define jp $25
|
||||
#define k0 $26
|
||||
#define k1 $27
|
||||
#define GP $28
|
||||
#define sp $29
|
||||
#define fp $30
|
||||
#define s8 $30
|
||||
#define ra $31
|
||||
|
||||
#define fv0 $f0
|
||||
#define fv0f $f1
|
||||
#define fv1 $f2
|
||||
#define fv1f $f3
|
||||
#define ft0 $f4
|
||||
#define ft0f $f5
|
||||
#define ft1 $f6
|
||||
#define ft1f $f7
|
||||
#define ft2 $f8
|
||||
#define ft2f $f9
|
||||
#define ft3 $f10
|
||||
#define ft3f $f11
|
||||
#define fa0 $f12
|
||||
#define fa0f $f13
|
||||
#define fa1 $f14
|
||||
#define fa1f $f15
|
||||
#define fa2 $f16
|
||||
#define fa2f $f17
|
||||
#define ft4 $f16
|
||||
#define ft4f $f17
|
||||
#define fa3 $f18
|
||||
#define fa3f $f19
|
||||
#define ft5 $f16
|
||||
#define ft5f $f17
|
||||
#define fs0 $f20
|
||||
#define fs0f $f21
|
||||
#define fs1 $f22
|
||||
#define fs1f $f23
|
||||
#define fs2 $f24
|
||||
#define fs2f $f25
|
||||
#define fs3 $f26
|
||||
#define fs3f $f27
|
||||
#define fs4 $f28
|
||||
#define fs4f $f29
|
||||
#define fs5 $f30
|
||||
#define fs5f $f31
|
||||
|
||||
#else
|
||||
|
||||
#if (_MIPS_SIM == _MIPS_SIM_ABI32) /* O32 */
|
||||
|
||||
#define zero $0
|
||||
#define AT $at
|
||||
#define v0 $2
|
||||
@@ -41,14 +126,130 @@
|
||||
#define jp $25
|
||||
#define k0 $26
|
||||
#define k1 $27
|
||||
#define gp $28
|
||||
#define GP $28
|
||||
#define sp $29
|
||||
#define fp $30
|
||||
#define s8 $30
|
||||
#define ra $31
|
||||
|
||||
#define fv0 $f0
|
||||
#define fv0f $f1
|
||||
#define fv1 $f2
|
||||
#define fv1f $f3
|
||||
#define fa0 $f12
|
||||
#define fa0f $f13
|
||||
#define fa1 $f14
|
||||
#define fa1f $f15
|
||||
#define ft0 $f4
|
||||
#define ft0f $f5
|
||||
#define ft1 $f6
|
||||
#define ft1f $f7
|
||||
#define ft2 $f8
|
||||
#define ft2f $f9
|
||||
#define ft3 $f10
|
||||
#define ft3f $f11
|
||||
#define ft4 $f16
|
||||
#define ft4f $f17
|
||||
#define ft5 $f18
|
||||
#define ft5f $f19
|
||||
#define fs0 $f20
|
||||
#define fs0f $f21
|
||||
#define fs1 $f22
|
||||
#define fs1f $f23
|
||||
#define fs2 $f24
|
||||
#define fs2f $f25
|
||||
#define fs3 $f26
|
||||
#define fs3f $f27
|
||||
#define fs4 $f28
|
||||
#define fs4f $f29
|
||||
#define fs5 $f30
|
||||
#define fs5f $f31
|
||||
|
||||
#endif
|
||||
|
||||
#if (_MIPS_SIM == _MIPS_SIM_ABI64)
|
||||
#if (_MIPS_SIM == _MIPS_SIM_NABI32) /* N32 */
|
||||
|
||||
#define zero $0
|
||||
#define AT $1
|
||||
#define v0 $2
|
||||
#define v1 $3
|
||||
#define a0 $4
|
||||
#define a1 $5
|
||||
#define a2 $6
|
||||
#define a3 $7
|
||||
#define a4 $8
|
||||
#define t0 $8
|
||||
#define ta0 $8
|
||||
#define a5 $9
|
||||
#define t1 $9
|
||||
#define ta1 $9
|
||||
#define a6 $10
|
||||
#define t2 $10
|
||||
#define ta2 $10
|
||||
#define a7 $11
|
||||
#define t3 $11
|
||||
#define ta3 $11
|
||||
#define t4 $12
|
||||
#define t5 $13
|
||||
#define t6 $14
|
||||
#define t7 $15
|
||||
#define s0 $16
|
||||
#define s1 $17
|
||||
#define s2 $18
|
||||
#define s3 $19
|
||||
#define s4 $20
|
||||
#define s5 $21
|
||||
#define s6 $22
|
||||
#define s7 $23
|
||||
#define t8 $24
|
||||
#define t9 $25
|
||||
#define k0 $26
|
||||
#define kt0 $26
|
||||
#define k1 $27
|
||||
#define kt1 $27
|
||||
#define GP $28
|
||||
#define sp $29
|
||||
#define s8 $30
|
||||
#define fp $30
|
||||
#define ra $31
|
||||
|
||||
#define fv0 $f0
|
||||
#define ft14 $f1
|
||||
#define fv1 $f2
|
||||
#define ft15 $f3
|
||||
#define ft0 $f4
|
||||
#define ft1 $f5
|
||||
#define ft2 $f6
|
||||
#define ft3 $f7
|
||||
#define ft4 $f8
|
||||
#define ft5 $f9
|
||||
#define ft6 $f10
|
||||
#define ft7 $f11
|
||||
#define fa0 $f12
|
||||
#define fa1 $f13
|
||||
#define fa2 $f14
|
||||
#define fa3 $f15
|
||||
#define fa4 $f16
|
||||
#define fa5 $f17
|
||||
#define fa6 $f18
|
||||
#define fa7 $f19
|
||||
#define fs0 $f20
|
||||
#define ft8 $f21
|
||||
#define fs1 $f22
|
||||
#define ft9 $f23
|
||||
#define fs2 $f24
|
||||
#define ft10 $f25
|
||||
#define fs3 $f26
|
||||
#define ft11 $f27
|
||||
#define fs4 $f28
|
||||
#define ft12 $f29
|
||||
#define fs5 $f30
|
||||
#define ft13 $f31
|
||||
|
||||
#endif
|
||||
|
||||
#if (_MIPS_SIM == _MIPS_SIM_ABI64) /* O64 */
|
||||
|
||||
#define zero $0
|
||||
#define AT $at
|
||||
#define v0 $2
|
||||
@@ -82,49 +283,12 @@
|
||||
#define jp $25
|
||||
#define k0 $26
|
||||
#define k1 $27
|
||||
#define gp $28
|
||||
#define GP $28
|
||||
#define sp $29
|
||||
#define fp $30
|
||||
#define s8 $30
|
||||
#define ra $31
|
||||
#endif
|
||||
|
||||
#if (_MIPS_SIM == _MIPS_SIM_ABI32)
|
||||
#define fv0 $f0
|
||||
#define fv0f $f1
|
||||
#define fv1 $f2
|
||||
#define fv1f $f3
|
||||
#define fa0 $f12
|
||||
#define fa0f $f13
|
||||
#define fa1 $f14
|
||||
#define fa1f $f15
|
||||
#define ft0 $f4
|
||||
#define ft0f $f5
|
||||
#define ft1 $f6
|
||||
#define ft1f $f7
|
||||
#define ft2 $f8
|
||||
#define ft2f $f9
|
||||
#define ft3 $f10
|
||||
#define ft3f $f11
|
||||
#define ft4 $f16
|
||||
#define ft4f $f17
|
||||
#define ft5 $f18
|
||||
#define ft5f $f19
|
||||
#define fs0 $f20
|
||||
#define fs0f $f21
|
||||
#define fs1 $f22
|
||||
#define fs1f $f23
|
||||
#define fs2 $f24
|
||||
#define fs2f $f25
|
||||
#define fs3 $f26
|
||||
#define fs3f $f27
|
||||
#define fs4 $f28
|
||||
#define fs4f $f29
|
||||
#define fs5 $f30
|
||||
#define fs5f $f31
|
||||
#endif
|
||||
|
||||
#if (_MIPS_SIM == _MIPS_SIM_ABI64)
|
||||
#define fv0 $f0
|
||||
#define fv1 $f2
|
||||
#define fa0 $f12
|
||||
@@ -157,6 +321,9 @@
|
||||
#define fs5 $f29
|
||||
#define fs6 $f30
|
||||
#define fs7 $f31
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#define fcr31 $31
|
||||
|
||||
@@ -43,8 +43,15 @@ typedef struct __OSThreadContext {
|
||||
/* 0x0E8 */ u64 lo, hi;
|
||||
/* 0x0F8 */ u32 sr, pc, cause, badvaddr, rcp;
|
||||
/* 0x10C */ u32 fpcsr;
|
||||
#if !defined(_MIPS_SIM) || _MIPS_SIM != _ABIN32
|
||||
/* 0x110 */ __OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
|
||||
/* 0x150 */ __OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
|
||||
#else
|
||||
__OSfp fp0, fp1, fp2, fp3, fp4, fp5, fp6, fp7;
|
||||
__OSfp fp8, fp9, fp10, fp11, fp12, fp13, fp14, fp15;
|
||||
__OSfp fp16, fp17, fp18, fp19, fp20, fp21, fp22, fp23;
|
||||
__OSfp fp24, fp25, fp26, fp27, fp28, fp29, fp30, fp31;
|
||||
#endif
|
||||
} __OSThreadContext; // size = 0x190
|
||||
|
||||
typedef struct __OSThreadprofile {
|
||||
@@ -122,6 +129,7 @@ typedef struct __OSThreadTail {
|
||||
#define THREAD_BADVADDR (THREAD_CONTEXT + 0x104)
|
||||
#define THREAD_RCP (THREAD_CONTEXT + 0x108)
|
||||
#define THREAD_FPCSR (THREAD_CONTEXT + 0x10C)
|
||||
#if !defined(_MIPS_SIM) || _MIPS_SIM != _ABIN32
|
||||
#define THREAD_FP0 (THREAD_CONTEXT + 0x110)
|
||||
#define THREAD_FP2 (THREAD_CONTEXT + 0x118)
|
||||
#define THREAD_FP4 (THREAD_CONTEXT + 0x120)
|
||||
@@ -138,6 +146,40 @@ typedef struct __OSThreadTail {
|
||||
#define THREAD_FP26 (THREAD_CONTEXT + 0x178)
|
||||
#define THREAD_FP28 (THREAD_CONTEXT + 0x180)
|
||||
#define THREAD_FP30 (THREAD_CONTEXT + 0x188)
|
||||
#else
|
||||
#define THREAD_FP0 (THREAD_CONTEXT + 0x110)
|
||||
#define THREAD_FP1 (THREAD_CONTEXT + 0x118)
|
||||
#define THREAD_FP2 (THREAD_CONTEXT + 0x120)
|
||||
#define THREAD_FP3 (THREAD_CONTEXT + 0x128)
|
||||
#define THREAD_FP4 (THREAD_CONTEXT + 0x130)
|
||||
#define THREAD_FP5 (THREAD_CONTEXT + 0x138)
|
||||
#define THREAD_FP6 (THREAD_CONTEXT + 0x140)
|
||||
#define THREAD_FP7 (THREAD_CONTEXT + 0x148)
|
||||
#define THREAD_FP8 (THREAD_CONTEXT + 0x150)
|
||||
#define THREAD_FP9 (THREAD_CONTEXT + 0x158)
|
||||
#define THREAD_FP10 (THREAD_CONTEXT + 0x160)
|
||||
#define THREAD_FP11 (THREAD_CONTEXT + 0x168)
|
||||
#define THREAD_FP12 (THREAD_CONTEXT + 0x170)
|
||||
#define THREAD_FP13 (THREAD_CONTEXT + 0x178)
|
||||
#define THREAD_FP14 (THREAD_CONTEXT + 0x180)
|
||||
#define THREAD_FP15 (THREAD_CONTEXT + 0x188)
|
||||
#define THREAD_FP16 (THREAD_CONTEXT + 0x190)
|
||||
#define THREAD_FP17 (THREAD_CONTEXT + 0x198)
|
||||
#define THREAD_FP18 (THREAD_CONTEXT + 0x1A0)
|
||||
#define THREAD_FP19 (THREAD_CONTEXT + 0x1A8)
|
||||
#define THREAD_FP20 (THREAD_CONTEXT + 0x1B0)
|
||||
#define THREAD_FP21 (THREAD_CONTEXT + 0x1B8)
|
||||
#define THREAD_FP22 (THREAD_CONTEXT + 0x1C0)
|
||||
#define THREAD_FP23 (THREAD_CONTEXT + 0x1C8)
|
||||
#define THREAD_FP24 (THREAD_CONTEXT + 0x1D0)
|
||||
#define THREAD_FP25 (THREAD_CONTEXT + 0x1D8)
|
||||
#define THREAD_FP26 (THREAD_CONTEXT + 0x1E0)
|
||||
#define THREAD_FP27 (THREAD_CONTEXT + 0x1E8)
|
||||
#define THREAD_FP28 (THREAD_CONTEXT + 0x1F0)
|
||||
#define THREAD_FP29 (THREAD_CONTEXT + 0x1F8)
|
||||
#define THREAD_FP30 (THREAD_CONTEXT + 0x200)
|
||||
#define THREAD_FP31 (THREAD_CONTEXT + 0x208)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
#include "stdarg.h"
|
||||
|
||||
// IDO doesn't support long double types, improve portability for compilers supporting them
|
||||
#ifdef __sgi
|
||||
// Also make N32/N64 ABIs use double, TODO support long double in these ABIs (128-bit float)
|
||||
#if defined(__sgi) || (defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32)
|
||||
#define LONG_DOUBLE_TYPE double
|
||||
#else
|
||||
#define LONG_DOUBLE_TYPE long double
|
||||
|
||||
Reference in New Issue
Block a user