diff --git a/ChangeLog b/ChangeLog index c1e93ecea..186cea9ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2015-02-17 Paulo Andrade + + * include/lightning/jit_x86.h, lib/jit_x86-cpu.c, + lib/jit_x86-x87.c: No longer make st(7) available. + Need to keep one x87 slots empty to avoid exceptions. + This has the side effect of no longer needing the + hackish emms instruction before a function call. + 2015-02-16 Paulo Andrade * lib/lightning.c: Remove the jit_regno_patch bitfield diff --git a/include/lightning/jit_x86.h b/include/lightning/jit_x86.h index 307c38365..b53e1be84 100644 --- a/include/lightning/jit_x86.h +++ b/include/lightning/jit_x86.h @@ -27,7 +27,7 @@ * Types */ #define jit_sse2_p() jit_cpu.sse2 -#define jit_x87_reg_p(reg) ((reg) >= _ST0 && (reg) <= _ST7) +#define jit_x87_reg_p(reg) ((reg) >= _ST0 && (reg) <= _ST6) #if __WORDSIZE == 32 # if defined(__x86_64__) # define __X64_32 1 @@ -64,7 +64,6 @@ typedef enum { # define JIT_F4 (jit_sse2_p() ? _XMM4 : _ST4) # define JIT_F5 (jit_sse2_p() ? _XMM5 : _ST5) # define JIT_F6 (jit_sse2_p() ? _XMM6 : _ST6) -# define JIT_F7 (jit_sse2_p() ? _XMM7 : _ST7) _XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7, # define jit_sse_reg_p(reg) ((reg) >= _XMM0 && (reg) <= _XMM7) #else @@ -148,7 +147,7 @@ typedef enum { # define jit_sse_reg_p(reg) ((reg) >= _XMM8 && (reg) <= _XMM0) # endif #endif - _ST0, _ST1, _ST2, _ST3, _ST4, _ST5, _ST6, _ST7, + _ST0, _ST1, _ST2, _ST3, _ST4, _ST5, _ST6, # define JIT_NOREG _NOREG _NOREG, } jit_reg_t; diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c index fa4eade44..a26f32ade 100644 --- a/lib/jit_x86-cpu.c +++ b/lib/jit_x86-cpu.c @@ -3390,9 +3390,6 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) static void _callr(jit_state_t *_jit, jit_int32_t r0) { -#if __X32 - emms(); -#endif rex(0, 0, _NOREG, _NOREG, r0); ic(0xff); mrm(0x03, 0x02, r7(r0)); @@ -3411,7 +3408,6 @@ _calli(jit_state_t *_jit, jit_word_t i0) jit_unget_reg(reg); #else jit_word_t w; - emms(); ic(0xe8); w = i0 - (_jit->pc.w + 4); ii(w); diff --git a/lib/jit_x86-x87.c b/lib/jit_x86-x87.c index 5b45c26b3..075d3bc62 100644 --- a/lib/jit_x86-x87.c +++ b/lib/jit_x86-x87.c @@ -34,7 +34,6 @@ # define _ST4_REGNO 4 # define _ST5_REGNO 5 # define _ST6_REGNO 6 -# define _ST7_REGNO 7 # define x87rx(code, md, rb, ri, ms) _x87rx(_jit, code, md, rb, ri, ms) # define fldcwm(md, rb, ri, ms) x87rx(015, md, rb, ri, ms) # define fstcwm(md, rb, ri, ms) _fstcwm(_jit, md, rb, ri, ms)