mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-06 20:20:20 +02:00
X86: No longer make st7 available as a temporary
* 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.
This commit is contained in:
parent
2597bf3c13
commit
9f72e66116
4 changed files with 10 additions and 8 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2015-02-17 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
|
* 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 <pcpa@gnu.org>
|
2015-02-16 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
* lib/lightning.c: Remove the jit_regno_patch bitfield
|
* lib/lightning.c: Remove the jit_regno_patch bitfield
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
* Types
|
* Types
|
||||||
*/
|
*/
|
||||||
#define jit_sse2_p() jit_cpu.sse2
|
#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 __WORDSIZE == 32
|
||||||
# if defined(__x86_64__)
|
# if defined(__x86_64__)
|
||||||
# define __X64_32 1
|
# define __X64_32 1
|
||||||
|
@ -64,7 +64,6 @@ typedef enum {
|
||||||
# define JIT_F4 (jit_sse2_p() ? _XMM4 : _ST4)
|
# define JIT_F4 (jit_sse2_p() ? _XMM4 : _ST4)
|
||||||
# define JIT_F5 (jit_sse2_p() ? _XMM5 : _ST5)
|
# define JIT_F5 (jit_sse2_p() ? _XMM5 : _ST5)
|
||||||
# define JIT_F6 (jit_sse2_p() ? _XMM6 : _ST6)
|
# define JIT_F6 (jit_sse2_p() ? _XMM6 : _ST6)
|
||||||
# define JIT_F7 (jit_sse2_p() ? _XMM7 : _ST7)
|
|
||||||
_XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7,
|
_XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7,
|
||||||
# define jit_sse_reg_p(reg) ((reg) >= _XMM0 && (reg) <= _XMM7)
|
# define jit_sse_reg_p(reg) ((reg) >= _XMM0 && (reg) <= _XMM7)
|
||||||
#else
|
#else
|
||||||
|
@ -148,7 +147,7 @@ typedef enum {
|
||||||
# define jit_sse_reg_p(reg) ((reg) >= _XMM8 && (reg) <= _XMM0)
|
# define jit_sse_reg_p(reg) ((reg) >= _XMM8 && (reg) <= _XMM0)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
_ST0, _ST1, _ST2, _ST3, _ST4, _ST5, _ST6, _ST7,
|
_ST0, _ST1, _ST2, _ST3, _ST4, _ST5, _ST6,
|
||||||
# define JIT_NOREG _NOREG
|
# define JIT_NOREG _NOREG
|
||||||
_NOREG,
|
_NOREG,
|
||||||
} jit_reg_t;
|
} jit_reg_t;
|
||||||
|
|
|
@ -3390,9 +3390,6 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1)
|
||||||
static void
|
static void
|
||||||
_callr(jit_state_t *_jit, jit_int32_t r0)
|
_callr(jit_state_t *_jit, jit_int32_t r0)
|
||||||
{
|
{
|
||||||
#if __X32
|
|
||||||
emms();
|
|
||||||
#endif
|
|
||||||
rex(0, 0, _NOREG, _NOREG, r0);
|
rex(0, 0, _NOREG, _NOREG, r0);
|
||||||
ic(0xff);
|
ic(0xff);
|
||||||
mrm(0x03, 0x02, r7(r0));
|
mrm(0x03, 0x02, r7(r0));
|
||||||
|
@ -3411,7 +3408,6 @@ _calli(jit_state_t *_jit, jit_word_t i0)
|
||||||
jit_unget_reg(reg);
|
jit_unget_reg(reg);
|
||||||
#else
|
#else
|
||||||
jit_word_t w;
|
jit_word_t w;
|
||||||
emms();
|
|
||||||
ic(0xe8);
|
ic(0xe8);
|
||||||
w = i0 - (_jit->pc.w + 4);
|
w = i0 - (_jit->pc.w + 4);
|
||||||
ii(w);
|
ii(w);
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
# define _ST4_REGNO 4
|
# define _ST4_REGNO 4
|
||||||
# define _ST5_REGNO 5
|
# define _ST5_REGNO 5
|
||||||
# define _ST6_REGNO 6
|
# define _ST6_REGNO 6
|
||||||
# define _ST7_REGNO 7
|
|
||||||
# define x87rx(code, md, rb, ri, ms) _x87rx(_jit, code, md, rb, ri, ms)
|
# 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 fldcwm(md, rb, ri, ms) x87rx(015, md, rb, ri, ms)
|
||||||
# define fstcwm(md, rb, ri, ms) _fstcwm(_jit, md, rb, ri, ms)
|
# define fstcwm(md, rb, ri, ms) _fstcwm(_jit, md, rb, ri, ms)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue