diff --git a/lightening.h b/lightening.h index 4fcec669b..4747a7149 100644 --- a/lightening.h +++ b/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) diff --git a/lightening/lightening.c b/lightening/lightening.c index d3494fd14..c2d55bd2b 100644 --- a/lightening/lightening.c +++ b/lightening/lightening.c @@ -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__) diff --git a/lightening/x86-cpu.c b/lightening/x86-cpu.c index c8bb9c8b9..901d4ea4e 100644 --- a/lightening/x86-cpu.c +++ b/lightening/x86-cpu.c @@ -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 } diff --git a/lightening/x86-sse.c b/lightening/x86-sse.c index 44d990545..4e0a414b6 100644 --- a/lightening/x86-sse.c +++ b/lightening/x86-sse.c @@ -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 diff --git a/lightening/x86.c b/lightening/x86.c index c9676fe5a..7b0c4a16c 100644 --- a/lightening/x86.c +++ b/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, "" }, -}; #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); } diff --git a/lightening/x86.h b/lightening/x86.h index b275e5e8b..7c7aab972 100644 --- a/lightening/x86.h +++ b/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 */