mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 04:10:18 +02:00
Simplify register representation
Instead of JIT_R0 being a wrapped index into a table which then gives the regno and class, just have JIT_R0 be the wrapped regno and class.
This commit is contained in:
parent
b34e230413
commit
ddd66a2f34
6 changed files with 206 additions and 342 deletions
11
lightening.h
11
lightening.h
|
@ -95,18 +95,7 @@ typedef struct jit_reloc
|
|||
# include "lightening/alpha.h"
|
||||
#endif
|
||||
|
||||
#define JIT_R(index) JIT_GPR(jit_r(index))
|
||||
#define JIT_V(index) JIT_GPR(jit_v(index))
|
||||
#define JIT_F(index) JIT_FPR(jit_f(index))
|
||||
#define JIT_R_NUM jit_r_num()
|
||||
#define JIT_V_NUM jit_v_num()
|
||||
#define JIT_F_NUM jit_f_num()
|
||||
|
||||
#define jit_class_chk 0x02000000 /* just checking */
|
||||
#define jit_class_arg 0x08000000 /* argument register */
|
||||
#define jit_class_sav 0x10000000 /* callee save */
|
||||
#define jit_class_gpr 0x20000000 /* general purpose */
|
||||
#define jit_class_fpr 0x40000000 /* float */
|
||||
#define jit_class(bits) ((bits) & 0xffff0000)
|
||||
#define jit_regno(bits) ((bits) & 0x00007fff)
|
||||
|
||||
|
|
|
@ -35,89 +35,73 @@
|
|||
# define maybe_unused /**/
|
||||
#endif
|
||||
|
||||
#define _NOREG 0xffff
|
||||
#define rc(value) jit_class_##value
|
||||
#define rn(reg) (jit_regno(_rvs[jit_regno(reg.bits)].spec))
|
||||
#define rn(reg) jit_regno(reg.bits)
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
# define JIT_SP JIT_GPR(_RSP)
|
||||
# define JIT_RET JIT_GPR(_RAX)
|
||||
# define JIT_RET _RAX
|
||||
# if __X32
|
||||
# define JIT_FRET JIT_FPR(_ST0)
|
||||
# define JIT_FRET _ST0
|
||||
# else
|
||||
# if __CYGWIN__
|
||||
# define JIT_RA0 JIT_GPR(_RCX)
|
||||
# define JIT_RA0 _RCX
|
||||
# else
|
||||
# define JIT_RA0 JIT_GPR(_RDI)
|
||||
# define JIT_RA0 _RDI
|
||||
# endif
|
||||
# define JIT_FA0 JIT_FPR(_XMM0)
|
||||
# define JIT_FRET JIT_FPR(_XMM0)
|
||||
# define JIT_FA0 _XMM0
|
||||
# define JIT_FRET _XMM0
|
||||
# endif
|
||||
#elif defined(__mips__)
|
||||
# define JIT_RA0 JIT_GPR(_A0)
|
||||
# define JIT_FA0 JIT_FPR(_F12)
|
||||
# define JIT_SP JIT_GPR(_SP)
|
||||
# define JIT_RET JIT_GPR(_V0)
|
||||
# define JIT_FRET JIT_FPR(_F0)
|
||||
# define JIT_RA0 _A0
|
||||
# define JIT_FA0 _F12
|
||||
# define JIT_SP _SP
|
||||
# define JIT_RET _V0
|
||||
# define JIT_FRET _F0
|
||||
#elif defined(__arm__)
|
||||
# define JIT_RA0 JIT_GPR(_R0)
|
||||
# define JIT_FA0 JIT_FPR(_D0)
|
||||
# define JIT_SP JIT_GPR(_R13)
|
||||
# define JIT_RET JIT_GPR(_R0)
|
||||
# define JIT_RA0 _R0
|
||||
# define JIT_FA0 _D0
|
||||
# define JIT_SP _R13
|
||||
# define JIT_RET _R0
|
||||
# if defined(__ARM_PCS_VFP)
|
||||
# define JIT_FRET JIT_FPR(_D0)
|
||||
# define JIT_FRET _D0
|
||||
# else
|
||||
# define JIT_FRET JIT_FPR(_R0)
|
||||
# define JIT_FRET _R0
|
||||
# endif
|
||||
#elif defined(__ppc__) || defined(__powerpc__)
|
||||
# define JIT_RA0 JIT_GPR(_R3)
|
||||
# define JIT_FA0 JIT_FPR(_F1)
|
||||
# define JIT_SP JIT_GPR(_R1)
|
||||
# define JIT_RET JIT_GPR(_R3)
|
||||
# define JIT_FRET JIT_FPR(_F1)
|
||||
# define JIT_RA0 _R3
|
||||
# define JIT_FA0 _F1
|
||||
# define JIT_SP _R1
|
||||
# define JIT_RET _R3
|
||||
# define JIT_FRET _F1
|
||||
#elif defined(__sparc__)
|
||||
# define JIT_SP JIT_GPR(_SP)
|
||||
# define JIT_RET JIT_GPR(_I0)
|
||||
# define JIT_FRET JIT_FPR(_F0)
|
||||
# define JIT_SP _SP
|
||||
# define JIT_RET _I0
|
||||
# define JIT_FRET _F0
|
||||
#elif defined(__ia64__)
|
||||
# define JIT_SP JIT_GPR(_R12)
|
||||
# define JIT_RET JIT_GPR(_R8)
|
||||
# define JIT_FRET JIT_FPR(_F8)
|
||||
# define JIT_SP _R12
|
||||
# define JIT_RET _R8
|
||||
# define JIT_FRET _F8
|
||||
#elif defined(__hppa__)
|
||||
# define JIT_SP JIT_GPR(_R30)
|
||||
# define JIT_RET JIT_GPR(_R28)
|
||||
# define JIT_FRET JIT_FPR(_F4)
|
||||
# define JIT_SP _R30
|
||||
# define JIT_RET _R28
|
||||
# define JIT_FRET _F4
|
||||
#elif defined(__aarch64__)
|
||||
# define JIT_RA0 JIT_GPR(_R0)
|
||||
# define JIT_FA0 JIT_FPR(_V0)
|
||||
# define JIT_SP JIT_GPR(_SP)
|
||||
# define JIT_RET JIT_GPR(_R0)
|
||||
# define JIT_FRET JIT_FPR(_V0)
|
||||
# define JIT_RA0 _R0
|
||||
# define JIT_FA0 _V0
|
||||
# define JIT_SP _SP
|
||||
# define JIT_RET _R0
|
||||
# define JIT_FRET _V0
|
||||
#elif defined(__s390__) || defined(__s390x__)
|
||||
# define JIT_SP JIT_GPR(_R15)
|
||||
# define JIT_RET JIT_GPR(_R2)
|
||||
# define JIT_FRET JIT_FPR(_F0)
|
||||
# define JIT_SP _R15
|
||||
# define JIT_RET _R2
|
||||
# define JIT_FRET _F0
|
||||
#elif defined(__alpha__)
|
||||
# define JIT_SP JIT_GPR(_SP)
|
||||
# define JIT_RET JIT_GPR(_V0)
|
||||
# define JIT_FRET JIT_FPR(_F0)
|
||||
# define JIT_SP _SP
|
||||
# define JIT_RET _V0
|
||||
# define JIT_FRET _F0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Private jit_class bitmasks
|
||||
*/
|
||||
#define jit_class_named 0x00400000 /* hit must be the named reg */
|
||||
#define jit_class_nospill 0x00800000 /* hint to fail if need spill */
|
||||
#define jit_class_sft 0x01000000 /* not a hardware register */
|
||||
#define jit_class_rg8 0x04000000 /* x86 8 bits */
|
||||
#define jit_class_xpr 0x80000000 /* float / vector */
|
||||
/* Used on sparc64 where %f0-%f31 can be encode for single float
|
||||
* but %f32 to %f62 only as double precision */
|
||||
#define jit_class_sng 0x10000000 /* Single precision float */
|
||||
#define jit_class_dbl 0x20000000 /* Only double precision float */
|
||||
#define jit_regno_patch 0x00008000 /* this is a register
|
||||
* returned by a "user" call
|
||||
* to jit_get_reg() */
|
||||
|
||||
union jit_pc
|
||||
{
|
||||
uint8_t *uc;
|
||||
|
@ -146,20 +130,6 @@ enum jit_reloc_flags
|
|||
JIT_RELOC_CAN_SHORTEN = 1<<0
|
||||
};
|
||||
|
||||
struct jit_register
|
||||
{
|
||||
jit_reg_t spec;
|
||||
char *name;
|
||||
};
|
||||
|
||||
typedef struct jit_register jit_register_t;
|
||||
|
||||
static const jit_register_t _rvs[];
|
||||
|
||||
#define jit_regload_reload 0 /* convert to reload */
|
||||
#define jit_regload_delete 1 /* just remove node */
|
||||
#define jit_regload_isdead 2 /* delete and unset live bit */
|
||||
|
||||
#define ASSERT(x) do { if (!(x)) abort(); } while (0)
|
||||
#if defined(__GNUC__)
|
||||
# define UNLIKELY(exprn) __builtin_expect(exprn, 0)
|
||||
|
@ -406,13 +376,13 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr)
|
|||
jit_bool_t
|
||||
jit_gpr_is_callee_save (jit_state_t *_jit, jit_gpr_t reg)
|
||||
{
|
||||
return jit_class(_rvs[jit_regno(reg.bits)].spec) & jit_class_sav;
|
||||
return jit_class(reg.bits) & jit_class_sav;
|
||||
}
|
||||
|
||||
jit_bool_t
|
||||
jit_fpr_is_callee_save (jit_state_t *_jit, jit_fpr_t reg)
|
||||
{
|
||||
return jit_class(_rvs[jit_regno(reg.bits)].spec) & jit_class_sav;
|
||||
return jit_class(reg.bits) & jit_class_sav;
|
||||
}
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
|
|
|
@ -272,9 +272,9 @@ get_temp_gpr(jit_state_t *_jit)
|
|||
_jit->temp_gpr_saved = 1;
|
||||
#if __X32
|
||||
pushr(_jit, _RBP_REGNO);
|
||||
return JIT_GPR(_RBP);
|
||||
return _RBP;
|
||||
#else
|
||||
return JIT_GPR(_R8);
|
||||
return _R8;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -193,7 +193,7 @@ get_temp_xpr(jit_state_t *_jit)
|
|||
/* Reserve XMM7 for the JIT. */
|
||||
ASSERT(!_jit->temp_fpr_saved);
|
||||
_jit->temp_fpr_saved = 1;
|
||||
return JIT_FPR(_XMM7);
|
||||
return _XMM7;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
137
lightening/x86.c
137
lightening/x86.c
|
@ -17,45 +17,6 @@
|
|||
* Paulo Cesar Pereira de Andrade
|
||||
*/
|
||||
|
||||
#if __X32
|
||||
# define jit_arg_reg_p(i) 0
|
||||
# define jit_arg_f_reg_p(i) 0
|
||||
# define stack_framesize 20
|
||||
# define stack_adjust 12
|
||||
# define CVT_OFFSET -12
|
||||
# define REAL_WORDSIZE 4
|
||||
# define va_gp_increment 4
|
||||
# define va_fp_increment 8
|
||||
#else
|
||||
# if __CYGWIN__
|
||||
# define jit_arg_reg_p(i) ((i) >= 0 && (i) < 4)
|
||||
# define jit_arg_f_reg_p(i) jit_arg_reg_p(i)
|
||||
# define stack_framesize 152
|
||||
# define va_fp_increment 8
|
||||
# else
|
||||
# define jit_arg_reg_p(i) ((i) >= 0 && (i) < 6)
|
||||
# define jit_arg_f_reg_p(i) ((i) >= 0 && (i) < 8)
|
||||
# define stack_framesize 56
|
||||
# define first_gp_argument rdi
|
||||
# define first_gp_offset offsetof(jit_va_list_t, rdi)
|
||||
# define first_gp_from_offset(gp) ((gp) / 8)
|
||||
# define last_gp_argument r9
|
||||
# define va_gp_max_offset \
|
||||
(offsetof(jit_va_list_t, r9) - offsetof(jit_va_list_t, rdi) + 8)
|
||||
# define first_fp_argument xmm0
|
||||
# define first_fp_offset offsetof(jit_va_list_t, xmm0)
|
||||
# define last_fp_argument xmm7
|
||||
# define va_fp_max_offset \
|
||||
(offsetof(jit_va_list_t, xmm7) - offsetof(jit_va_list_t, rdi) + 16)
|
||||
# define va_fp_increment 16
|
||||
# define first_fp_from_offset(fp) (((fp) - va_gp_max_offset) / 16)
|
||||
# endif
|
||||
# define va_gp_increment 8
|
||||
# define stack_adjust 8
|
||||
# define CVT_OFFSET -8
|
||||
# define REAL_WORDSIZE 8
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Types
|
||||
*/
|
||||
|
@ -94,94 +55,6 @@ typedef struct jit_va_list {
|
|||
#endif
|
||||
|
||||
jit_cpu_t jit_cpu;
|
||||
static const jit_register_t _rvs[] = {
|
||||
#if __X32
|
||||
{ rc(gpr) | rc(rg8) | 0, "%eax" },
|
||||
{ rc(gpr) | rc(rg8) | 1, "%ecx" },
|
||||
{ rc(gpr) | rc(rg8) | 2, "%edx" },
|
||||
{ rc(sav) | rc(rg8) | rc(gpr) | 3, "%ebx" },
|
||||
{ rc(sav) | rc(gpr) | 6, "%esi" },
|
||||
{ rc(sav) | rc(gpr) | 7, "%edi" },
|
||||
{ rc(sav) | 4, "%esp" },
|
||||
{ rc(sav) | 5, "%ebp" },
|
||||
{ rc(xpr) | rc(fpr) | 0, "%xmm0" },
|
||||
{ rc(xpr) | rc(fpr) | 1, "%xmm1" },
|
||||
{ rc(xpr) | rc(fpr) | 2, "%xmm2" },
|
||||
{ rc(xpr) | rc(fpr) | 3, "%xmm3" },
|
||||
{ rc(xpr) | rc(fpr) | 4, "%xmm4" },
|
||||
{ rc(xpr) | rc(fpr) | 5, "%xmm5" },
|
||||
{ rc(xpr) | rc(fpr) | 6, "%xmm6" },
|
||||
{ rc(xpr) | rc(fpr) | 7, "%xmm7" },
|
||||
#elif __CYGWIN__
|
||||
{ rc(gpr) | rc(rg8) | 0, "%rax" },
|
||||
{ rc(gpr) | rc(rg8) | rc(rg8) | 10, "%r10" },
|
||||
{ rc(gpr) | rc(rg8) | rc(rg8) | 11, "%r11" },
|
||||
{ rc(sav) | rc(rg8) | rc(gpr) | 3, "%rbx" },
|
||||
{ rc(sav) | rc(gpr) | 7, "%rdi" },
|
||||
{ rc(sav) | rc(gpr) | 6, "%rsi" },
|
||||
{ rc(sav) | rc(gpr) | 12, "%r12" },
|
||||
{ rc(sav) | rc(gpr) | 13, "%r13" },
|
||||
{ rc(sav) | rc(gpr) | 14, "%r14" },
|
||||
{ rc(sav) | rc(gpr) | 15, "%r15" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 9, "%r9" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 8, "%r8" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 2, "%rdx" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 1, "%rcx" },
|
||||
{ rc(sav) | 4, "%rsp" },
|
||||
{ rc(sav) | 5, "%rbp" },
|
||||
{ rc(xpr) | rc(fpr) | 4, "%xmm4" },
|
||||
{ rc(xpr) | rc(fpr) | 5, "%xmm5" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 6, "%xmm6" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 7, "%xmm7" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 8, "%xmm8" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 9, "%xmm9" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 10, "%xmm10" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 11, "%xmm11" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 12, "%xmm12" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 13, "%xmm13" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 14, "%xmm14" },
|
||||
{ rc(sav) | rc(xpr) | rc(fpr) | 15, "%xmm15" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 3, "%xmm3" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 2, "%xmm2" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 1, "%xmm1" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 0, "%xmm0" },
|
||||
#else
|
||||
/* %rax is a pseudo flag argument for varargs functions */
|
||||
{ rc(arg) | rc(gpr) | rc(rg8) | 0, "%rax" },
|
||||
{ rc(gpr) | rc(rg8) | 10, "%r10" },
|
||||
{ rc(gpr) | rc(rg8) | 11, "%r11" },
|
||||
{ rc(gpr) | rc(rg8) | 12, "%r12" },
|
||||
{ rc(sav) | rc(rg8) | rc(gpr) | 3, "%rbx" },
|
||||
{ rc(sav) | rc(rg8) | rc(gpr) | 13, "%r13" },
|
||||
{ rc(sav) | rc(rg8) | rc(gpr) | 14, "%r14" },
|
||||
{ rc(sav) | rc(rg8) | rc(gpr) | 15, "%r15" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 9, "%r9" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 8, "%r8" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 1, "%rcx" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 2, "%rdx" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 6, "%rsi" },
|
||||
{ rc(arg) | rc(rg8) | rc(gpr) | 7, "%rdi" },
|
||||
{ rc(sav) | 4, "%rsp" },
|
||||
{ rc(sav) | 5, "%rbp" },
|
||||
{ rc(xpr) | rc(fpr) | 8, "%xmm8" },
|
||||
{ rc(xpr) | rc(fpr) | 9, "%xmm9" },
|
||||
{ rc(xpr) | rc(fpr) | 10, "%xmm10" },
|
||||
{ rc(xpr) | rc(fpr) | 11, "%xmm11" },
|
||||
{ rc(xpr) | rc(fpr) | 12, "%xmm12" },
|
||||
{ rc(xpr) | rc(fpr) | 13, "%xmm13" },
|
||||
{ rc(xpr) | rc(fpr) | 14, "%xmm14" },
|
||||
{ rc(xpr) | rc(fpr) | 15, "%xmm15" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 7, "%xmm7" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 6, "%xmm6" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 5, "%xmm5" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 4, "%xmm4" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 3, "%xmm3" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 2, "%xmm2" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 1, "%xmm1" },
|
||||
{ rc(xpr) | rc(arg) | rc(fpr) | 0, "%xmm0" },
|
||||
#endif
|
||||
{ _NOREG, "<none>" },
|
||||
};
|
||||
|
||||
#include "x86-cpu.c"
|
||||
#include "x86-sse.c"
|
||||
|
@ -800,9 +673,9 @@ static const jit_gpr_t abi_gpr_args[] = {
|
|||
#if __X32
|
||||
/* No GPRs in args. */
|
||||
#elif __CYGWIN__
|
||||
JIT_GPR(_RCX), JIT_GPR(_RDX), JIT_GPR(_R8), JIT_GPR(_R9)
|
||||
_RCX, _RDX, _R8, _R9
|
||||
#else
|
||||
JIT_GPR(_RDI), JIT_GPR(_RSI), JIT_GPR(_RDX), JIT_GPR(_RCX), JIT_GPR(_R8), JIT_GPR(_R9)
|
||||
_RDI, _RSI, _RDX, _RCX, _R8, _R9
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -810,9 +683,9 @@ static const jit_fpr_t abi_fpr_args[] = {
|
|||
#if __X32
|
||||
/* No FPRs in args. */
|
||||
#elif __CYGWIN__
|
||||
JIT_FPR(_XMM0), JIT_FPR(_XMM1), JIT_FPR(_XMM2), JIT_FPR(_XMM3)
|
||||
_XMM0, _XMM1, _XMM2, _XMM3
|
||||
#else
|
||||
JIT_FPR(_XMM0), JIT_FPR(_XMM1), JIT_FPR(_XMM2), JIT_FPR(_XMM3), JIT_FPR(_XMM4), JIT_FPR(_XMM5), JIT_FPR(_XMM6), JIT_FPR(_XMM7)
|
||||
_XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -890,7 +763,7 @@ next_abi_arg(struct abi_arg_iterator *iter, jit_operand_t *arg)
|
|||
iter->gpr_idx++;
|
||||
#endif
|
||||
} else {
|
||||
*arg = jit_operand_mem (abi, JIT_GPR(_RSP), iter->stack_size);
|
||||
*arg = jit_operand_mem (abi, JIT_SP, iter->stack_size);
|
||||
size_t bytes = jit_operand_abi_sizeof (abi);
|
||||
iter->stack_size += round_size_up_to_words (bytes);
|
||||
}
|
||||
|
|
272
lightening/x86.h
272
lightening/x86.h
|
@ -44,129 +44,161 @@
|
|||
# define __X32 0
|
||||
#endif
|
||||
|
||||
#define JIT_FP JIT_GPR(_RBP)
|
||||
typedef enum {
|
||||
#if __X32
|
||||
# define jit_r(i) (_RAX + (i))
|
||||
# define jit_r_num() 3
|
||||
# define jit_v(i) (_RBX + (i))
|
||||
# define jit_v_num() 3
|
||||
# define jit_f(i) (jit_cpu.sse2 ? _XMM0 + (i) : _ST0 + (i))
|
||||
# define jit_f_num() (jit_cpu.sse2 ? 8 : 6)
|
||||
# define JIT_R0 JIT_GPR(_RAX)
|
||||
# define JIT_R1 JIT_GPR(_RCX)
|
||||
# define JIT_R2 JIT_GPR(_RDX)
|
||||
_RAX, _RCX, _RDX,
|
||||
# define JIT_V0 JIT_GPR(_RBX)
|
||||
# define JIT_V1 JIT_GPR(_RSI)
|
||||
# define JIT_V2 JIT_GPR(_RDI)
|
||||
_RBX, _RSI, _RDI,
|
||||
_RSP, _RBP,
|
||||
# define JIT_F0 JIT_FPR(_XMM0)
|
||||
# define JIT_F1 JIT_FPR(_XMM1)
|
||||
# define JIT_F2 JIT_FPR(_XMM2)
|
||||
# define JIT_F3 JIT_FPR(_XMM3)
|
||||
# define JIT_F4 JIT_FPR(_XMM4)
|
||||
# define JIT_F5 JIT_FPR(_XMM5)
|
||||
# define JIT_F6 JIT_FPR(_XMM6)
|
||||
_XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7,
|
||||
# define jit_sse_reg_p(reg) ((reg) >= _XMM0 && (reg) <= _XMM7)
|
||||
# define _RAX JIT_GPR(0)
|
||||
# define _RCX JIT_GPR(1)
|
||||
# define _RDX JIT_GPR(2)
|
||||
# define _RBX JIT_GPR(3 | jit_class_sav)
|
||||
# define _RSP JIT_GPR(4 | jit_class_sav)
|
||||
# define _RBP JIT_GPR(5 | jit_class_sav)
|
||||
# define _RSI JIT_GPR(6 | jit_class_sav)
|
||||
# define _RDI JIT_GPR(7 | jit_class_sav)
|
||||
# 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_GPR(3 | jit_class_sav)
|
||||
# define _RSP JIT_GPR(4 | jit_class_sav)
|
||||
# define _RBP JIT_GPR(5 | jit_class_sav)
|
||||
# define _RSI JIT_GPR(6 | jit_class_sav)
|
||||
# define _RDI JIT_GPR(7 | jit_class_sav)
|
||||
# define _R8 JIT_GPR(8)
|
||||
# define _R9 JIT_GPR(9)
|
||||
# define _R10 JIT_GPR(10)
|
||||
# define _R11 JIT_GPR(11)
|
||||
# define _R12 JIT_GPR(12 | jit_class_sav)
|
||||
# define _R13 JIT_GPR(13 | jit_class_sav)
|
||||
# define _R14 JIT_GPR(14 | jit_class_sav)
|
||||
# define _R15 JIT_GPR(15 | jit_class_sav)
|
||||
# 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 | jit_class_sav)
|
||||
# define _XMM7 JIT_FPR(7 | jit_class_sav)
|
||||
# define _XMM8 JIT_FPR(8 | jit_class_sav)
|
||||
# define _XMM9 JIT_FPR(9 | jit_class_sav)
|
||||
# define _XMM10 JIT_FPR(10 | jit_class_sav)
|
||||
# define _XMM11 JIT_FPR(11 | jit_class_sav)
|
||||
# define _XMM12 JIT_FPR(12 | jit_class_sav)
|
||||
# define _XMM13 JIT_FPR(13 | jit_class_sav)
|
||||
# define _XMM14 JIT_FPR(14 | jit_class_sav)
|
||||
# define _XMM15 JIT_FPR(15 | jit_class_sav)
|
||||
#else
|
||||
# if __CYGWIN__
|
||||
# define jit_r(i) (_RAX + (i))
|
||||
# define jit_r_num() 3
|
||||
# define jit_v(i) (_RBX + (i))
|
||||
# define jit_v_num() 7
|
||||
# define jit_f(index) (_XMM4 + (index))
|
||||
# define jit_f_num() 12
|
||||
# define JIT_R0 JIT_GPR(_RAX)
|
||||
# define JIT_R1 JIT_GPR(_R10)
|
||||
# define JIT_R2 JIT_GPR(_R11)
|
||||
# define JIT_V0 JIT_GPR(_RBX)
|
||||
# define JIT_V1 JIT_GPR(_RDI)
|
||||
# define JIT_V2 JIT_GPR(_RSI)
|
||||
# define JIT_V3 JIT_GPR(_R12)
|
||||
# define JIT_V4 JIT_GPR(_R13)
|
||||
# define JIT_V5 JIT_GPR(_R14)
|
||||
# define JIT_V6 JIT_GPR(_R15)
|
||||
/* Volatile - Return value register */
|
||||
_RAX,
|
||||
/* Volatile */
|
||||
_R10, _R11,
|
||||
/* Nonvolatile */
|
||||
_RBX, _RDI, _RSI,
|
||||
_R12, _R13, _R14, _R15,
|
||||
/* Volatile - Integer arguments (4 to 1) */
|
||||
_R9, _R8, _RDX, _RCX,
|
||||
/* Nonvolatile */
|
||||
_RSP, _RBP,
|
||||
# define JIT_F0 JIT_FPR(_XMM0)
|
||||
# define JIT_F1 JIT_FPR(_XMM1)
|
||||
# define JIT_F2 JIT_FPR(_XMM2)
|
||||
# define JIT_F3 JIT_FPR(_XMM3)
|
||||
# define JIT_F4 JIT_FPR(_XMM4)
|
||||
# define JIT_F5 JIT_FPR(_XMM5)
|
||||
# define JIT_F6 JIT_FPR(_XMM6)
|
||||
# define JIT_F7 JIT_FPR(_XMM7)
|
||||
# define JIT_F8 JIT_FPR(_XMM8)
|
||||
# define JIT_F9 JIT_FPR(_XMM9)
|
||||
# define JIT_F10 JIT_FPR(_XMM10)
|
||||
# define JIT_F11 JIT_FPR(_XMM11)
|
||||
# define JIT_F12 JIT_FPR(_XMM12)
|
||||
# define JIT_F13 JIT_FPR(_XMM13)
|
||||
# define JIT_F14 JIT_FPR(_XMM14)
|
||||
# define JIT_F15 JIT_FPR(_XMM15)
|
||||
/* Volatile */
|
||||
_XMM4, _XMM5,
|
||||
/* Nonvolatile */
|
||||
_XMM6, _XMM7, _XMM8, _XMM9, _XMM10,
|
||||
_XMM11, _XMM12, _XMM13, _XMM14, _XMM15,
|
||||
/* Volatile - FP arguments (4 to 1) */
|
||||
_XMM3, _XMM2, _XMM1, _XMM0,
|
||||
# define jit_sse_reg_p(reg) ((reg) >= _XMM4 && (reg) <= _XMM0)
|
||||
# else
|
||||
# define jit_r(i) (_RAX + (i))
|
||||
# define jit_r_num() 4
|
||||
# define jit_v(i) (_RBX + (i))
|
||||
# define jit_v_num() 4
|
||||
# define jit_f(index) (_XMM8 + (index))
|
||||
# define jit_f_num() 8
|
||||
# define JIT_R0 JIT_GPR(_RAX)
|
||||
# define JIT_R1 JIT_GPR(_R10)
|
||||
# define JIT_R2 JIT_GPR(_R11)
|
||||
# define JIT_R3 JIT_GPR(_R12)
|
||||
_RAX, _R10, _R11, _R12,
|
||||
# define JIT_V0 JIT_GPR(_RBX)
|
||||
# define JIT_V1 JIT_GPR(_R13)
|
||||
# define JIT_V2 JIT_GPR(_R14)
|
||||
# define JIT_V3 JIT_GPR(_R15)
|
||||
_RBX, _R13, _R14, _R15,
|
||||
_R9, _R8, _RCX, _RDX, _RSI, _RDI,
|
||||
_RSP, _RBP,
|
||||
# define JIT_F0 JIT_FPR(_XMM0)
|
||||
# define JIT_F1 JIT_FPR(_XMM1)
|
||||
# define JIT_F2 JIT_FPR(_XMM2)
|
||||
# define JIT_F3 JIT_FPR(_XMM3)
|
||||
# define JIT_F4 JIT_FPR(_XMM4)
|
||||
# define JIT_F5 JIT_FPR(_XMM5)
|
||||
# define JIT_F6 JIT_FPR(_XMM6)
|
||||
# define JIT_F7 JIT_FPR(_XMM7)
|
||||
# define JIT_F8 JIT_FPR(_XMM8)
|
||||
# define JIT_F9 JIT_FPR(_XMM9)
|
||||
# define JIT_F10 JIT_FPR(_XMM10)
|
||||
# define JIT_F11 JIT_FPR(_XMM11)
|
||||
# define JIT_F12 JIT_FPR(_XMM12)
|
||||
# define JIT_F13 JIT_FPR(_XMM13)
|
||||
# define JIT_F14 JIT_FPR(_XMM14)
|
||||
# define JIT_F15 JIT_FPR(_XMM15)
|
||||
_XMM8, _XMM9, _XMM10, _XMM11, _XMM12, _XMM13, _XMM14, _XMM15,
|
||||
_XMM7, _XMM6, _XMM5, _XMM4, _XMM3, _XMM2, _XMM1, _XMM0,
|
||||
# define jit_sse_reg_p(reg) ((reg) >= _XMM8 && (reg) <= _XMM0)
|
||||
# endif
|
||||
# define _RAX JIT_GPR(0)
|
||||
# define _RCX JIT_GPR(1)
|
||||
# define _RDX JIT_GPR(2)
|
||||
# define _RBX JIT_GPR(3 | jit_class_sav)
|
||||
# define _RSP JIT_GPR(4 | jit_class_sav)
|
||||
# define _RBP JIT_GPR(5 | jit_class_sav)
|
||||
# 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_GPR(12 | jit_class_sav)
|
||||
# define _R13 JIT_GPR(13 | jit_class_sav)
|
||||
# define _R14 JIT_GPR(14 | jit_class_sav)
|
||||
# define _R15 JIT_GPR(15 | jit_class_sav)
|
||||
# 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 _XMM8 JIT_FPR(8)
|
||||
# define _XMM9 JIT_FPR(9)
|
||||
# define _XMM10 JIT_FPR(10)
|
||||
# define _XMM11 JIT_FPR(11)
|
||||
# define _XMM12 JIT_FPR(12)
|
||||
# define _XMM13 JIT_FPR(13)
|
||||
# define _XMM14 JIT_FPR(14)
|
||||
# define _XMM15 JIT_FPR(15)
|
||||
#endif
|
||||
|
||||
#define JIT_SP _RSP
|
||||
#define JIT_FP _RBP
|
||||
#if __X32
|
||||
# define JIT_R0 _RAX
|
||||
# define JIT_R1 _RCX
|
||||
# define JIT_R2 _RDX
|
||||
# define JIT_V0 _RBX
|
||||
# define JIT_V1 _RSI
|
||||
# define JIT_V2 _RDI
|
||||
# define JIT_F0 _XMM0
|
||||
# define JIT_F1 _XMM1
|
||||
# define JIT_F2 _XMM2
|
||||
# define JIT_F3 _XMM3
|
||||
# define JIT_F4 _XMM4
|
||||
# define JIT_F5 _XMM5
|
||||
# define JIT_F6 _XMM6
|
||||
# define JIT_F7 _XMM6
|
||||
#elif __CYGWIN__
|
||||
# define JIT_R0 _RAX
|
||||
# define JIT_R1 _R10
|
||||
# define JIT_R2 _R11
|
||||
# define JIT_V0 _RBX
|
||||
# define JIT_V1 _RDI
|
||||
# define JIT_V2 _RSI
|
||||
# define JIT_V3 _R12
|
||||
# define JIT_V4 _R13
|
||||
# define JIT_V5 _R14
|
||||
# define JIT_V6 _R15
|
||||
# define JIT_F0 _XMM0
|
||||
# define JIT_F1 _XMM1
|
||||
# define JIT_F2 _XMM2
|
||||
# define JIT_F3 _XMM3
|
||||
# define JIT_F4 _XMM4
|
||||
# define JIT_F5 _XMM5
|
||||
# define JIT_F6 _XMM6
|
||||
# define JIT_F7 _XMM7
|
||||
# define JIT_F8 _XMM8
|
||||
# define JIT_F9 _XMM9
|
||||
# define JIT_F10 _XMM10
|
||||
# define JIT_F11 _XMM11
|
||||
# define JIT_F12 _XMM12
|
||||
# define JIT_F13 _XMM13
|
||||
# define JIT_F14 _XMM14
|
||||
# define JIT_F15 _XMM15
|
||||
#else
|
||||
# define JIT_R0 _RAX
|
||||
# define JIT_R1 _R10
|
||||
# define JIT_R2 _R11
|
||||
# define JIT_R3 _R12
|
||||
# define JIT_V0 _RBX
|
||||
# define JIT_V1 _R13
|
||||
# define JIT_V2 _R14
|
||||
# define JIT_V3 _R15
|
||||
# define JIT_F0 _XMM0
|
||||
# define JIT_F1 _XMM1
|
||||
# define JIT_F2 _XMM2
|
||||
# define JIT_F3 _XMM3
|
||||
# define JIT_F4 _XMM4
|
||||
# define JIT_F5 _XMM5
|
||||
# define JIT_F6 _XMM6
|
||||
# define JIT_F7 _XMM7
|
||||
# define JIT_F8 _XMM8
|
||||
# define JIT_F9 _XMM9
|
||||
# define JIT_F10 _XMM10
|
||||
# define JIT_F11 _XMM11
|
||||
# define JIT_F12 _XMM12
|
||||
# define JIT_F13 _XMM13
|
||||
# define JIT_F14 _XMM14
|
||||
# define JIT_F15 _XMM15
|
||||
#endif
|
||||
# define JIT_NOREG _NOREG
|
||||
_NOREG,
|
||||
} jit_reg_t;
|
||||
|
||||
typedef struct {
|
||||
/* x87 present */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue