summaryrefslogtreecommitdiff
path: root/lightening/x86.h
diff options
context:
space:
mode:
Diffstat (limited to 'lightening/x86.h')
-rw-r--r--lightening/x86.h272
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 */