From: twisti Date: Thu, 21 Apr 2005 16:40:28 +0000 (+0000) Subject: - bugfix in i386_mov_membase32_reg X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=13f87d63bf4133b07ed62031f27b58e43ea31135;p=cacao.git - bugfix in i386_mov_membase32_reg - added some membase32 functions --- diff --git a/src/vm/jit/i386/emitfuncs.c b/src/vm/jit/i386/emitfuncs.c index 80f038809..fbc3bd091 100644 --- a/src/vm/jit/i386/emitfuncs.c +++ b/src/vm/jit/i386/emitfuncs.c @@ -26,7 +26,7 @@ Authors: Christian Thalinger - $Id: emitfuncs.c 2211 2005-04-04 10:39:36Z christian $ + $Id: emitfuncs.c 2316 2005-04-21 16:40:28Z twisti $ */ @@ -395,8 +395,9 @@ void i386_mov_membase32_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg) { COUNT(count_mov_mem_reg); *(cd->mcodeptr++) = 0x8b; - i386_address_byte(2, (reg), (basereg)); - i386_emit_imm32((disp)); +/* i386_address_byte(2,(reg),(basereg)); */ +/* i386_emit_imm32((disp)); */ + i386_emit_membase32((basereg),(disp),(reg)); } @@ -408,6 +409,14 @@ void i386_mov_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp) } +void i386_mov_reg_membase32(codegendata *cd, s4 reg, s4 basereg, s4 disp) +{ + COUNT(count_mov_reg_mem); + *(cd->mcodeptr++) = 0x89; + i386_emit_membase32((basereg),(disp),(reg)); +} + + void i386_mov_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg) { COUNT(count_mov_mem_reg); @@ -473,6 +482,14 @@ void i386_mov_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp) } +void i386_mov_imm_membase32(codegendata *cd, s4 imm, s4 basereg, s4 disp) +{ + *(cd->mcodeptr++) = 0xc7; + i386_emit_membase32((basereg),(disp),0); + i386_emit_imm32((imm)); +} + + void i386_movb_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp) { *(cd->mcodeptr++) = 0xc6; @@ -945,6 +962,13 @@ void i386_flds_membase(codegendata *cd, s4 basereg, s4 disp) } +void i386_flds_membase32(codegendata *cd, s4 basereg, s4 disp) +{ + *(cd->mcodeptr++) = 0xd9; + i386_emit_membase32((basereg),(disp),0); +} + + void i386_fldl_membase(codegendata *cd, s4 basereg, s4 disp) { *(cd->mcodeptr++) = 0xdd; @@ -952,6 +976,13 @@ void i386_fldl_membase(codegendata *cd, s4 basereg, s4 disp) } +void i386_fldl_membase32(codegendata *cd, s4 basereg, s4 disp) +{ + *(cd->mcodeptr++) = 0xdd; + i386_emit_membase32((basereg),(disp),0); +} + + void i386_fldt_membase(codegendata *cd, s4 basereg, s4 disp) { *(cd->mcodeptr++) = 0xdb; @@ -1050,6 +1081,13 @@ void i386_fstps_membase(codegendata *cd, s4 basereg, s4 disp) } +void i386_fstps_membase32(codegendata *cd, s4 basereg, s4 disp) +{ + *(cd->mcodeptr++) = 0xd9; + i386_emit_membase32((basereg),(disp),3); +} + + void i386_fstpl_membase(codegendata *cd, s4 basereg, s4 disp) { *(cd->mcodeptr++) = 0xdd; @@ -1057,6 +1095,13 @@ void i386_fstpl_membase(codegendata *cd, s4 basereg, s4 disp) } +void i386_fstpl_membase32(codegendata *cd, s4 basereg, s4 disp) +{ + *(cd->mcodeptr++) = 0xdd; + i386_emit_membase32((basereg),(disp),3); +} + + void i386_fstpt_membase(codegendata *cd, s4 basereg, s4 disp) { *(cd->mcodeptr++) = 0xdb; diff --git a/src/vm/jit/i386/emitfuncs.h b/src/vm/jit/i386/emitfuncs.h index 4ce1283e5..bcfb1f6e4 100644 --- a/src/vm/jit/i386/emitfuncs.h +++ b/src/vm/jit/i386/emitfuncs.h @@ -1,4 +1,4 @@ -/* vm/jit/i386/emitfuncs.h - emit function prototypes +/* src/vm/jit/i386/emitfuncs.h - emit function prototypes Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, @@ -26,7 +26,9 @@ Authors: Christian Thalinger - $Id: emitfuncs.h 2042 2005-03-20 13:42:54Z twisti $ + Changes: + + $Id: emitfuncs.h 2316 2005-04-21 16:40:28Z twisti $ */ @@ -56,6 +58,7 @@ void i386_movb_imm_reg(codegendata *cd, s4 imm, s4 dreg); void i386_mov_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg); void i386_mov_membase32_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg); void i386_mov_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp); +void i386_mov_reg_membase32(codegendata *cd, s4 reg, s4 basereg, s4 disp); void i386_mov_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg); void i386_mov_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale); void i386_movw_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale); @@ -64,6 +67,7 @@ void i386_mov_reg_mem(codegendata *cd, s4 reg, s4 mem); void i386_mov_mem_reg(codegendata *cd, s4 mem, s4 dreg); void i386_mov_imm_mem(codegendata *cd, s4 imm, s4 mem); void i386_mov_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp); +void i386_mov_imm_membase32(codegendata *cd, s4 imm, s4 basereg, s4 disp); void i386_movb_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp); void i386_movsbl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg); void i386_movswl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg); @@ -123,7 +127,9 @@ void i386_fld1(codegendata *cd); void i386_fldz(codegendata *cd); void i386_fld_reg(codegendata *cd, s4 reg); void i386_flds_membase(codegendata *cd, s4 basereg, s4 disp); +void i386_flds_membase32(codegendata *cd, s4 basereg, s4 disp); void i386_fldl_membase(codegendata *cd, s4 basereg, s4 disp); +void i386_fldl_membase32(codegendata *cd, s4 basereg, s4 disp); void i386_fldt_membase(codegendata *cd, s4 basereg, s4 disp); void i386_flds_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale); void i386_fldl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale); @@ -138,7 +144,9 @@ void i386_fsts_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 sc void i386_fstl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale); void i386_fstp_reg(codegendata *cd, s4 reg); void i386_fstps_membase(codegendata *cd, s4 basereg, s4 disp); +void i386_fstps_membase32(codegendata *cd, s4 basereg, s4 disp); void i386_fstpl_membase(codegendata *cd, s4 basereg, s4 disp); +void i386_fstpl_membase32(codegendata *cd, s4 basereg, s4 disp); void i386_fstpt_membase(codegendata *cd, s4 basereg, s4 disp); void i386_fstps_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale); void i386_fstpl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);