mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-06 04:00:26 +02:00
Simplify register representation even more
The register structures just contain the regno. Since the only flag is the callee-save flag, we can punt that to a separate per-backend, per-target predicate.
This commit is contained in:
parent
2602f17fb4
commit
e29977a82b
2 changed files with 80 additions and 110 deletions
48
lightening.h
48
lightening.h
|
@ -43,44 +43,26 @@ typedef ptrdiff_t jit_off_t;
|
|||
typedef intptr_t jit_imm_t;
|
||||
typedef uintptr_t jit_uimm_t;
|
||||
|
||||
typedef struct jit_gpr { uint8_t bits; } jit_gpr_t;
|
||||
typedef struct jit_fpr { uint8_t bits; } jit_fpr_t;
|
||||
|
||||
enum jit_register_flags
|
||||
{
|
||||
JIT_REGISTER_CALLEE_SAVE = 0x40
|
||||
};
|
||||
typedef struct jit_gpr { uint8_t regno; } jit_gpr_t;
|
||||
typedef struct jit_fpr { uint8_t regno; } jit_fpr_t;
|
||||
|
||||
// Precondition: regno between 0 and 63, inclusive.
|
||||
#define JIT_GPR(regno) ((jit_gpr_t) { regno })
|
||||
#define JIT_FPR(regno) ((jit_fpr_t) { regno })
|
||||
#define JIT_CALLEE_SAVE_GPR(regno) \
|
||||
((jit_gpr_t) { (regno) | JIT_REGISTER_CALLEE_SAVE })
|
||||
#define JIT_CALLEE_SAVE_FPR(regno) \
|
||||
((jit_fpr_t) { (regno) | JIT_REGISTER_CALLEE_SAVE })
|
||||
|
||||
static inline uint8_t jit_gpr_regno (jit_gpr_t reg) { return reg.regno; }
|
||||
static inline uint8_t jit_fpr_regno (jit_fpr_t reg) { return reg.regno; }
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_gpr_is_callee_save (jit_gpr_t reg)
|
||||
jit_same_gprs (jit_gpr_t a, jit_gpr_t b)
|
||||
{
|
||||
return reg.bits & JIT_REGISTER_CALLEE_SAVE;
|
||||
return jit_gpr_regno (a) == jit_gpr_regno (b);
|
||||
}
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_fpr_is_callee_save (jit_fpr_t reg)
|
||||
jit_same_fprs (jit_fpr_t a, jit_fpr_t b)
|
||||
{
|
||||
return reg.bits & JIT_REGISTER_CALLEE_SAVE;
|
||||
}
|
||||
|
||||
static inline uint8_t
|
||||
jit_gpr_regno (jit_gpr_t reg)
|
||||
{
|
||||
return reg.bits & 0x3f;
|
||||
}
|
||||
|
||||
static inline uint8_t
|
||||
jit_fpr_regno (jit_fpr_t reg)
|
||||
{
|
||||
return reg.bits & 0x3f;
|
||||
return jit_fpr_regno (a) == jit_fpr_regno (b);
|
||||
}
|
||||
|
||||
enum jit_reloc_kind
|
||||
|
@ -128,18 +110,6 @@ typedef struct jit_reloc
|
|||
# include "lightening/alpha.h"
|
||||
#endif
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_same_gprs (jit_gpr_t a, jit_gpr_t b)
|
||||
{
|
||||
return a.bits == b.bits;
|
||||
}
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_same_fprs (jit_fpr_t a, jit_fpr_t b)
|
||||
{
|
||||
return a.bits == b.bits;
|
||||
}
|
||||
|
||||
typedef struct jit_state jit_state_t;
|
||||
|
||||
enum jit_operand_abi
|
||||
|
|
142
lightening/x86.h
142
lightening/x86.h
|
@ -44,81 +44,33 @@
|
|||
# define __X32 0
|
||||
#endif
|
||||
|
||||
#if __X32
|
||||
# define _RAX JIT_GPR(0)
|
||||
# define _RCX JIT_GPR(1)
|
||||
# define _RDX JIT_GPR(2)
|
||||
# define _RBX JIT_CALLEE_SAVE_GPR(3)
|
||||
# define _RSP JIT_CALLEE_SAVE_GPR(4)
|
||||
# define _RBP JIT_CALLEE_SAVE_GPR(5)
|
||||
# define _RSI JIT_CALLEE_SAVE_GPR(6)
|
||||
# define _RDI JIT_CALLEE_SAVE_GPR(7)
|
||||
# define _XMM0 JIT_FPR(0)
|
||||
# define _XMM1 JIT_FPR(1)
|
||||
# define _XMM2 JIT_FPR(2)
|
||||
# define _XMM3 JIT_FPR(3)
|
||||
# define _XMM4 JIT_FPR(4)
|
||||
# define _XMM5 JIT_FPR(5)
|
||||
# define _XMM6 JIT_FPR(6)
|
||||
# define _XMM7 JIT_FPR(7)
|
||||
#elif __CYGWIN__
|
||||
# define _RAX JIT_GPR(0)
|
||||
# define _RCX JIT_GPR(1)
|
||||
# define _RDX JIT_GPR(2)
|
||||
# define _RBX JIT_CALLEE_SAVE_GPR(3)
|
||||
# define _RSP JIT_CALLEE_SAVE_GPR(4)
|
||||
# define _RBP JIT_CALLEE_SAVE_GPR(5)
|
||||
# define _RSI JIT_CALLEE_SAVE_GPR(6)
|
||||
# define _RDI JIT_CALLEE_SAVE_GPR(7)
|
||||
#define _RAX JIT_GPR(0)
|
||||
#define _RCX JIT_GPR(1)
|
||||
#define _RDX JIT_GPR(2)
|
||||
#define _RBX JIT_GPR(3)
|
||||
#define _RSP JIT_GPR(4)
|
||||
#define _RBP JIT_GPR(5)
|
||||
#define _RSI JIT_GPR(6)
|
||||
#define _RDI JIT_GPR(7)
|
||||
|
||||
#define _XMM0 JIT_FPR(0)
|
||||
#define _XMM1 JIT_FPR(1)
|
||||
#define _XMM2 JIT_FPR(2)
|
||||
#define _XMM3 JIT_FPR(3)
|
||||
#define _XMM4 JIT_FPR(4)
|
||||
#define _XMM5 JIT_FPR(5)
|
||||
#define _XMM6 JIT_FPR(6)
|
||||
#define _XMM7 JIT_FPR(7)
|
||||
|
||||
#if __X64
|
||||
# define _R8 JIT_GPR(8)
|
||||
# define _R9 JIT_GPR(9)
|
||||
# define _R10 JIT_GPR(10)
|
||||
# define _R11 JIT_GPR(11)
|
||||
# define _R12 JIT_CALLEE_SAVE_GPR(12)
|
||||
# define _R13 JIT_CALLEE_SAVE_GPR(13)
|
||||
# define _R14 JIT_CALLEE_SAVE_GPR(14)
|
||||
# define _R15 JIT_CALLEE_SAVE_GPR(15)
|
||||
# define _XMM0 JIT_FPR(0)
|
||||
# define _XMM1 JIT_FPR(1)
|
||||
# define _XMM2 JIT_FPR(2)
|
||||
# define _XMM3 JIT_FPR(3)
|
||||
# define _XMM4 JIT_FPR(4)
|
||||
# define _XMM5 JIT_FPR(5)
|
||||
# define _XMM6 JIT_CALLEE_SAVE_FPR(6)
|
||||
# define _XMM7 JIT_CALLEE_SAVE_FPR(7)
|
||||
# define _XMM8 JIT_CALLEE_SAVE_FPR(8)
|
||||
# define _XMM9 JIT_CALLEE_SAVE_FPR(9)
|
||||
# define _XMM10 JIT_CALLEE_SAVE_FPR(10)
|
||||
# define _XMM11 JIT_CALLEE_SAVE_FPR(11)
|
||||
# define _XMM12 JIT_CALLEE_SAVE_FPR(12)
|
||||
# define _XMM13 JIT_CALLEE_SAVE_FPR(13)
|
||||
# define _XMM14 JIT_CALLEE_SAVE_FPR(14)
|
||||
# define _XMM15 JIT_CALLEE_SAVE_FPR(15)
|
||||
#else
|
||||
# define _RAX JIT_GPR(0)
|
||||
# define _RCX JIT_GPR(1)
|
||||
# define _RDX JIT_GPR(2)
|
||||
# define _RBX JIT_CALLEE_SAVE_GPR(3)
|
||||
# define _RSP JIT_CALLEE_SAVE_GPR(4)
|
||||
# define _RBP JIT_CALLEE_SAVE_GPR(5)
|
||||
# define _RSI JIT_GPR(6)
|
||||
# define _RDI JIT_GPR(7)
|
||||
# define _R8 JIT_GPR(8)
|
||||
# define _R9 JIT_GPR(9)
|
||||
# define _R10 JIT_GPR(10)
|
||||
# define _R11 JIT_GPR(11)
|
||||
# define _R12 JIT_CALLEE_SAVE_GPR(12)
|
||||
# define _R13 JIT_CALLEE_SAVE_GPR(13)
|
||||
# define _R14 JIT_CALLEE_SAVE_GPR(14)
|
||||
# define _R15 JIT_CALLEE_SAVE_GPR(15)
|
||||
# define _XMM0 JIT_FPR(0)
|
||||
# define _XMM1 JIT_FPR(1)
|
||||
# define _XMM2 JIT_FPR(2)
|
||||
# define _XMM3 JIT_FPR(3)
|
||||
# define _XMM4 JIT_FPR(4)
|
||||
# define _XMM5 JIT_FPR(5)
|
||||
# define _XMM6 JIT_FPR(6)
|
||||
# define _XMM7 JIT_FPR(7)
|
||||
# define _R12 JIT_GPR(12)
|
||||
# define _R13 JIT_GPR(13)
|
||||
# define _R14 JIT_GPR(14)
|
||||
# define _R15 JIT_GPR(15)
|
||||
# define _XMM8 JIT_FPR(8)
|
||||
# define _XMM9 JIT_FPR(9)
|
||||
# define _XMM10 JIT_FPR(10)
|
||||
|
@ -129,6 +81,54 @@
|
|||
# define _XMM15 JIT_FPR(15)
|
||||
#endif
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_gpr_is_callee_save (jit_gpr_t reg)
|
||||
{
|
||||
#if __X32
|
||||
return jit_same_gprs (reg, _RBX) ||
|
||||
jit_same_gprs (reg, _RBP) ||
|
||||
jit_same_gprs (reg, _RSI) ||
|
||||
jit_same_gprs (reg, _RDI);
|
||||
#elif __CYGWIN__
|
||||
return jit_same_gprs (reg, _RBX) ||
|
||||
jit_same_gprs (reg, _RBP) ||
|
||||
jit_same_gprs (reg, _RSI) ||
|
||||
jit_same_gprs (reg, _RDI) ||
|
||||
jit_same_gprs (reg, _R12) ||
|
||||
jit_same_gprs (reg, _R13) ||
|
||||
jit_same_gprs (reg, _R14) ||
|
||||
jit_same_gprs (reg, _R15);
|
||||
#else
|
||||
return jit_same_gprs (reg, _RBX) ||
|
||||
jit_same_gprs (reg, _RBP) ||
|
||||
jit_same_gprs (reg, _R12) ||
|
||||
jit_same_gprs (reg, _R13) ||
|
||||
jit_same_gprs (reg, _R14) ||
|
||||
jit_same_gprs (reg, _R15);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_fpr_is_callee_save (jit_fpr_t reg)
|
||||
{
|
||||
#if __X32
|
||||
return 0;
|
||||
#elif __CYGWIN__
|
||||
return jit_same_fprs (reg, _XMM6) ||
|
||||
jit_same_fprs (reg, _XMM7) ||
|
||||
jit_same_fprs (reg, _XMM8) ||
|
||||
jit_same_fprs (reg, _XMM9) ||
|
||||
jit_same_fprs (reg, _XMM10) ||
|
||||
jit_same_fprs (reg, _XMM11) ||
|
||||
jit_same_fprs (reg, _XMM12) ||
|
||||
jit_same_fprs (reg, _XMM13) ||
|
||||
jit_same_fprs (reg, _XMM14) ||
|
||||
jit_same_fprs (reg, _XMM15);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define JIT_SP _RSP
|
||||
#define JIT_FP _RBP
|
||||
#if __X32
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue