diff --git a/ChangeLog b/ChangeLog index 79dbe9124..36a6b5a1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-12-02 Paolo Bonzini + + * lightning/i386/asm-i386.h: Add CVTTS?2SIL. + * lightning/i386/asm-64.h: Add CVTTS?2SIQ. + * lightning/i386/fp-64.h: Use it. + + * lightning/Makefile.am: Place files in nodist_lightning_HEADERS. + 2006-11-23 Paolo Bonzini * lightning/core-common.h: Add casts in "*i_p" variants. diff --git a/lightning/Makefile.am b/lightning/Makefile.am index cce56d701..657099305 100644 --- a/lightning/Makefile.am +++ b/lightning/Makefile.am @@ -10,14 +10,14 @@ EXTRA_DIST = i386/Makefile.frag \ @lightning_frag@ -LIGHTNING_FILES = funcs-common.h core-common.h fp-common.h asm-common.h \ - asm.h core.h funcs.h fp.h $(LIGHTNING_TARGET_FILES) +LIGHTNING_COMMON_FILES = funcs-common.h core-common.h fp-common.h asm-common.h if LIGHTNING_MAIN lightningdir = $(includedir)/lightning dist_pkgdata_DATA = Makefile.am -dist_lightning_HEADERS = $(LIGHTNING_FILES) +dist_lightning_HEADERS = $(LIGHTNING_COMMON_FILES) +nodist_lightning_HEADERS = asm.h core.h funcs.h fp.h $(LIGHTNING_TARGET_FILES) else all-am: diff --git a/lightning/i386/asm-64.h b/lightning/i386/asm-64.h index 9f5431cf1..553259732 100644 --- a/lightning/i386/asm-64.h +++ b/lightning/i386/asm-64.h @@ -349,6 +349,11 @@ #define _SSEQrm(PX,OP,RS,RSA,MD,MB,MI,MS) (_jit_B(PX), __SSEQrm(OP, RS, RSA, MD, MB, MI, MS)) #define _SSEQ1rm(PX,OP,RS,RSA,MD,MB,MI,MS) (_jit_B(PX), __SSEQ1rm(OP, RS, RSA, MD, MB, MI, MS)) +#define CVTTSS2SIQrr(RS, RD) _SSEQrr(0xf3, X86_SSE_CVTTSI, RS,_rX, RD,_r8) +#define CVTTSS2SIQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf3, X86_SSE_CVTTSI, MD, MB, MI, MS, RD,_r8) +#define CVTTSD2SIQrr(RS, RD) _SSEQrr(0xf2, X86_SSE_CVTTSI, RS,_rX, RD,_r8) +#define CVTTSD2SIQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf2, X86_SSE_CVTTSI, MD, MB, MI, MS, RD,_r8) + #define CVTSS2SIQrr(RS, RD) _SSEQrr(0xf3, X86_SSE_CVTSI, RS,_rX, RD,_r8) #define CVTSS2SIQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf3, X86_SSE_CVTSI, MD, MB, MI, MS, RD,_r8) #define CVTSD2SIQrr(RS, RD) _SSEQrr(0xf2, X86_SSE_CVTSI, RS,_rX, RD,_r8) diff --git a/lightning/i386/asm-i386.h b/lightning/i386/asm-i386.h index 67f44a2c6..51c45e36f 100644 --- a/lightning/i386/asm-i386.h +++ b/lightning/i386/asm-i386.h @@ -1311,6 +1311,7 @@ enum { X86_SSE_MOVHP = 0x16, X86_SSE_MOVA = 0x28, X86_SSE_CVTIS = 0x2a, + X86_SSE_CVTTSI = 0x2c, X86_SSE_CVTSI = 0x2d, X86_SSE_UCOMI = 0x2e, X86_SSE_COMI = 0x2f, @@ -1532,6 +1533,11 @@ enum { #define CVTSD2SSrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTSD, RS,_rX, RD,_rX) #define CVTSD2SSmr(MD, MB, MI, MS, RD) _SSELmr(0xf2, X86_SSE_CVTSD, MD, MB, MI, MS, RD,_rX) +#define CVTTSS2SILrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTTSI, RS,_rX, RD,_r4) +#define CVTTSS2SILmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTTSI, MD, MB, MI, MS, RD,_r4) +#define CVTTSD2SILrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTTSI, RS,_rX, RD,_r4) +#define CVTTSD2SILmr(MD, MB, MI, MS, RD) _SSELmr(0xf2, X86_SSE_CVTTSI, MD, MB, MI, MS, RD,_r4) + #define CVTSS2SILrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTSI, RS,_rX, RD,_r4) #define CVTSS2SILmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTSI, MD, MB, MI, MS, RD,_r4) #define CVTSD2SILrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTSI, RS,_rX, RD,_r4) diff --git a/lightning/i386/fp-64.h b/lightning/i386/fp-64.h index 74cdfecce..e851f84da 100644 --- a/lightning/i386/fp-64.h +++ b/lightning/i386/fp-64.h @@ -167,6 +167,10 @@ union jit_double_imm { #define jit_roundr_f_i(rd, rs) CVTSS2SILrr((rs), (rd)) #define jit_roundr_d_l(rd, rs) CVTSD2SIQrr((rs), (rd)) #define jit_roundr_f_l(rd, rs) CVTSS2SIQrr((rs), (rd)) +#define jit_truncr_d_i(rd, rs) CVTTSD2SILrr((rs), (rd)) +#define jit_truncr_f_i(rd, rs) CVTTSS2SILrr((rs), (rd)) +#define jit_truncr_d_l(rd, rs) CVTTSD2SIQrr((rs), (rd)) +#define jit_truncr_f_l(rd, rs) CVTTSS2SIQrr((rs), (rd)) #define jit_ceilr_f_i(rd, rs) do { \ @@ -183,26 +187,16 @@ union jit_double_imm { ADCLir (0, (rd)); \ } while (0) -#define jit_truncr_f_i(rd, rs) do { \ - jit_roundr_f_i ((rd), (rs)); \ - jit_extr_i_f (JIT_FPTMP, (rd)); \ - TESTLrr ((rd), (rd)); \ - JSm (_jit.x.pc + 9); \ - UCOMISSrr (JIT_FPTMP, (rs)); \ - SBBLir (0, (rd)); \ - JMPSm (_jit.x.pc + 7); \ +#define jit_ceilr_f_l(rd, rs) do { \ + jit_roundr_f_l ((rd), (rs)); \ + jit_extr_l_f (JIT_FPTMP, (rd)); \ UCOMISSrr ((rs), JIT_FPTMP); \ ADCLir (0, (rd)); \ } while (0) -#define jit_truncr_d_i(rd, rs) do { \ - jit_roundr_d_i ((rd), (rs)); \ - jit_extr_i_d (JIT_FPTMP, (rd)); \ - TESTLrr ((rd), (rd)); \ - JSm (_jit.x.pc + 9); \ - UCOMISDrr (JIT_FPTMP, (rs)); \ - SBBLir (0, (rd)); \ - JMPSm (_jit.x.pc + 7); \ +#define jit_ceilr_d_l(rd, rs) do { \ + jit_roundr_d_l ((rd), (rs)); \ + jit_extr_l_d (JIT_FPTMP, (rd)); \ UCOMISDrr ((rs), JIT_FPTMP); \ ADCLir (0, (rd)); \ } while (0) @@ -221,6 +215,20 @@ union jit_double_imm { SBBLir (0, (rd)); \ } while (0) +#define jit_floorr_f_l(rd, rs) do { \ + jit_roundr_f_l ((rd), (rs)); \ + jit_extr_l_f (JIT_FPTMP, (rd)); \ + UCOMISSrr (JIT_FPTMP, (rs)); \ + SBBLir (0, (rd)); \ + } while (0) + +#define jit_floorr_d_l(rd, rs) do { \ + jit_roundr_d_l ((rd), (rs)); \ + jit_extr_l_d (JIT_FPTMP, (rd)); \ + UCOMISDrr (JIT_FPTMP, (rs)); \ + SBBLir (0, (rd)); \ + } while (0) + #define jit_bltr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JAm ((d))) #define jit_bler_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JAEm ((d))) #define jit_beqr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), _OO (0x7a06), JEm ((d)))