public/jit/x86/x86_macros.h
changeset 739 d22243bb5864
parent 706 fea5148668d9
child 831 1995c0dd5c04
     1.1 --- a/public/jit/x86/x86_macros.h	Fri May 04 21:21:55 2007 +0000
     1.2 +++ b/public/jit/x86/x86_macros.h	Fri May 04 21:39:05 2007 +0000
     1.3 @@ -92,6 +92,8 @@
     1.4  #define	IA32_MOV_RM8_REG		0x88	// encoding is /r
     1.5  #define	IA32_MOV_RM_REG			0x89	// encoding is /r
     1.6  #define	IA32_MOV_REG_MEM		0x8B	// encoding is /r
     1.7 +#define IA32_MOV_REG8_RM8		0x8A	// encoding is /r
     1.8 +#define IA32_MOV_RM8_REG8		0x88	// encoding is /r
     1.9  #define IA32_MOV_RM_IMM32		0xC7	// encoding is /0
    1.10  #define IA32_CMP_RM_IMM32		0x81	// encoding is /7 <imm32>
    1.11  #define IA32_CMP_RM_IMM8		0x83	// encoding is /7 <imm8>
    1.12 @@ -149,6 +151,10 @@
    1.13  #define IA32_POPAD				0x61	// no extra encoding
    1.14  #define IA32_NOP				0x90	// no extra encoding
    1.15  #define IA32_INT3				0xCC	// no extra encoding
    1.16 +#define IA32_FSTP_MEM32			0xD9	// encoding is /3
    1.17 +#define IA32_FSTP_MEM64			0xDD	// encoding is /3
    1.18 +#define IA32_FLD_MEM32			0xD9	// encoding is /0
    1.19 +#define IA32_FLD_MEM64			0xDD	// encoding is /0
    1.20  
    1.21  inline jit_uint8_t ia32_modrm(jit_uint8_t mode, jit_uint8_t reg, jit_uint8_t rm)
    1.22  {
    1.23 @@ -629,6 +635,19 @@
    1.24  	jit->write_byte(val);
    1.25  }
    1.26  
    1.27 +inline void IA32_Lea_Reg_DispRegMultImm32(JitWriter *jit, 
    1.28 +										 jit_uint8_t dest, 
    1.29 +										 jit_uint8_t src_base, 
    1.30 +										 jit_uint8_t src_index, 
    1.31 +										 jit_uint8_t scale, 
    1.32 +										 jit_int32_t val)
    1.33 +{
    1.34 +	jit->write_ubyte(IA32_LEA_REG_MEM);
    1.35 +	jit->write_ubyte(ia32_modrm(MOD_DISP32, dest, REG_SIB));
    1.36 +	jit->write_ubyte(ia32_sib(scale, src_index, src_base));
    1.37 +	jit->write_int32(val);
    1.38 +}
    1.39 +
    1.40  inline void IA32_Lea_Reg_RegMultImm32(JitWriter *jit, 
    1.41  										jit_uint8_t dest, 
    1.42  										jit_uint8_t src_index, 
    1.43 @@ -716,6 +735,12 @@
    1.44  	jit->write_ubyte(ia32_modrm(mode, dest, src));
    1.45  }
    1.46  
    1.47 +inline void IA32_Mov_Reg8_Rm8(JitWriter *jit, jit_uint8_t dest, jit_uint8_t src, jit_uint8_t mode)
    1.48 +{
    1.49 +	jit->write_ubyte(IA32_MOV_REG8_RM8);
    1.50 +	jit->write_ubyte(ia32_modrm(mode, dest, src));
    1.51 +}
    1.52 +
    1.53  inline void IA32_Mov_Reg_Rm_Disp8(JitWriter *jit, jit_uint8_t dest, jit_uint8_t src, jit_int8_t disp)
    1.54  {
    1.55  	jit->write_ubyte(IA32_MOV_REG_MEM);
    1.56 @@ -723,6 +748,13 @@
    1.57  	jit->write_byte(disp);
    1.58  }
    1.59  
    1.60 +inline void IA32_Mov_Reg8_Rm8_Disp8(JitWriter *jit, jit_uint8_t dest, jit_uint8_t src, jit_int8_t disp)
    1.61 +{
    1.62 +	jit->write_ubyte(IA32_MOV_REG8_RM8);
    1.63 +	jit->write_ubyte(ia32_modrm(MOD_DISP8, dest, src));
    1.64 +	jit->write_byte(disp);
    1.65 +}
    1.66 +
    1.67  inline void IA32_Mov_Reg_Esp_Disp8(JitWriter *jit, jit_uint8_t dest, jit_int8_t disp)
    1.68  {
    1.69  	jit->write_ubyte(IA32_MOV_REG_MEM);
    1.70 @@ -738,6 +770,13 @@
    1.71  	jit->write_int32(disp);
    1.72  }
    1.73  
    1.74 +inline void IA32_Mov_Reg8_Rm8_Disp32(JitWriter *jit, jit_uint8_t dest, jit_uint8_t src, jit_int32_t disp)
    1.75 +{
    1.76 +	jit->write_ubyte(IA32_MOV_REG8_RM8);
    1.77 +	jit->write_ubyte(ia32_modrm(MOD_DISP32, dest, src));
    1.78 +	jit->write_int32(disp);
    1.79 +}
    1.80 +
    1.81  inline void IA32_Mov_Reg_Rm_Disp_Reg(JitWriter *jit, 
    1.82  							jit_uint8_t dest, 
    1.83  							jit_uint8_t src_base, 
    1.84 @@ -784,6 +823,12 @@
    1.85  	jit->write_ubyte(ia32_modrm(mode, src, dest));
    1.86  }
    1.87  
    1.88 +inline void IA32_Mov_Rm8_Reg8(JitWriter *jit, jit_uint8_t dest, jit_uint8_t src, jit_uint8_t mode)
    1.89 +{
    1.90 +	jit->write_ubyte(IA32_MOV_RM8_REG8);
    1.91 +	jit->write_ubyte(ia32_modrm(mode, src, dest));
    1.92 +}
    1.93 +
    1.94  inline void IA32_Mov_Rm_Reg_Disp8(JitWriter *jit, jit_uint8_t dest, jit_uint8_t src, jit_int8_t disp)
    1.95  {
    1.96  	jit->write_ubyte(IA32_MOV_RM_REG);
    1.97 @@ -891,6 +936,52 @@
    1.98  }
    1.99  
   1.100  /**
   1.101 +* Floating Point Instructions
   1.102 +*/
   1.103 +
   1.104 +inline void IA32_Fstp_Mem32(JitWriter *jit, jit_uint8_t dest_base, jit_uint8_t dest_index, jit_uint8_t dest_scale)
   1.105 +{
   1.106 +	jit->write_ubyte(IA32_FSTP_MEM32);
   1.107 +	jit->write_ubyte(ia32_modrm(MOD_MEM_REG, 3, REG_SIB));
   1.108 +	jit->write_ubyte(ia32_sib(dest_scale, dest_index, dest_base));
   1.109 +}
   1.110 +
   1.111 +inline void IA32_Fstp_Mem64(JitWriter *jit, jit_uint8_t dest_base, jit_uint8_t dest_index, jit_uint8_t dest_scale)
   1.112 +{
   1.113 +	jit->write_ubyte(IA32_FSTP_MEM64);
   1.114 +	jit->write_ubyte(ia32_modrm(MOD_MEM_REG, 3, REG_SIB));
   1.115 +	jit->write_ubyte(ia32_sib(dest_scale, dest_index, dest_base));
   1.116 +}
   1.117 +
   1.118 +inline void IA32_Fld_Mem32_Disp8(JitWriter *jit, jit_uint8_t dest, jit_int8_t val)
   1.119 +{
   1.120 +	jit->write_ubyte(IA32_FLD_MEM32);
   1.121 +	jit->write_ubyte(ia32_modrm(MOD_DISP8, 0, dest));
   1.122 +	jit->write_byte(val);
   1.123 +}
   1.124 +
   1.125 +inline void IA32_Fld_Mem64_Disp8(JitWriter *jit, jit_uint8_t dest, jit_int8_t val)
   1.126 +{
   1.127 +	jit->write_ubyte(IA32_FLD_MEM64);
   1.128 +	jit->write_ubyte(ia32_modrm(MOD_DISP8, 0, dest));
   1.129 +	jit->write_byte(val);
   1.130 +}
   1.131 +
   1.132 +inline void IA32_Fld_Mem32_Disp32(JitWriter *jit, jit_uint8_t dest, jit_int32_t val)
   1.133 +{
   1.134 +	jit->write_ubyte(IA32_FLD_MEM32);
   1.135 +	jit->write_ubyte(ia32_modrm(MOD_DISP32, 0, dest));
   1.136 +	jit->write_int32(val);
   1.137 +}
   1.138 +
   1.139 +inline void IA32_Fld_Mem64_Disp32(JitWriter *jit, jit_uint8_t dest, jit_int32_t val)
   1.140 +{
   1.141 +	jit->write_ubyte(IA32_FLD_MEM64);
   1.142 +	jit->write_ubyte(ia32_modrm(MOD_DISP32, 0, dest));
   1.143 +	jit->write_int32(val);
   1.144 +}
   1.145 +
   1.146 +/**
   1.147   * Branching/Jumping
   1.148   */
   1.149