diff options
Diffstat (limited to 'lightening/x86.h')
-rw-r--r-- | lightening/x86.h | 272 |
1 files changed, 152 insertions, 120 deletions
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 */ |