Mon Aug 27 09:29:00 CEST 2001 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Mon, 27 Aug 2001 03:43:09 +0000 (03:43 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Mon, 27 Aug 2001 03:43:09 +0000 (03:43 -0000)
* x86/x86-codegen.h: fix x86_call_code (). x86_mov_regp_reg () added.

svn path=/trunk/mono/; revision=636

mono/arch/ChangeLog
mono/arch/x86/test.c
mono/arch/x86/x86-codegen.h

index 31eecbfec394941784794642ccc356077f452482..0116763cbe435d4253c0ea4262e2ca033cad721d 100644 (file)
@@ -1,4 +1,8 @@
 
+Mon Aug 27 09:29:00 CEST 2001 Paolo Molaro <lupus@ximian.com>
+
+       * x86/x86-codegen.h: fix x86_call_code (). x86_mov_regp_reg () added.
+
 Sat Aug 18 12:40:32 CEST 2001 Paolo Molaro <lupus@ximian.com>
 
        * x86/x86-codegen.h: fix a couple of buglets and add x86_regp_emit().
index 231b7f665e71d80a98b78d446f3d975706eab704..23e56f73344ffb64a549e57e5150ab348cb4fe70 100644 (file)
@@ -110,6 +110,9 @@ int main() {
        x86_mov_mem_reg (p, mem_addr, X86_EAX, 1);
        x86_mov_membase_reg (p, X86_EBP, 4, X86_EAX, 1);
 
+       x86_mov_regp_reg (p, X86_EAX, X86_EAX, 4);
+       x86_mov_membase_reg (p, X86_EAX, 0, X86_EAX, 4);
+       x86_mov_reg_membase (p, X86_EAX, X86_EAX, 0, 4);
        x86_mov_reg_reg (p, X86_EAX, X86_EAX, 1);
        x86_mov_reg_reg (p, X86_EAX, X86_EAX, 4);
        x86_mov_reg_mem (p, X86_EAX, mem_addr, 4);
@@ -179,7 +182,7 @@ int main() {
        x86_branch (p, X86_CC_GT, target, 0);
        x86_branch_disp (p, X86_CC_NE, -4, 0);
 
-       x86_call_imm (p, printf);
+       x86_call_code (p, printf);
        x86_call_reg (p, X86_ECX);
 
        x86_sahf (p);
index 166030eb957b384a439dfb5fc6e518e1a2d85802..f671ceefeb6599411a7ea39f2ba578cd0ab767c6 100644 (file)
@@ -1,7 +1,7 @@
 /* Copyright (C)  2000 Intel Corporation.  All rights reserved.
    Copyright (C)  2001 Ximian, Inc. 
 //
-// $Header: /home/miguel/third-conversion/public/mono/mono/arch/x86/x86-codegen.h,v 1.4 2001/08/18 06:55:29 lupus Exp $
+// $Header: /home/miguel/third-conversion/public/mono/mono/arch/x86/x86-codegen.h,v 1.5 2001/08/27 03:43:09 lupus Exp $
 */
 
 #ifndef X86_H
@@ -648,6 +648,17 @@ typedef union {
                x86_mem_emit ((inst), (reg), (mem));    \
        } while (0)
 
+#define x86_mov_regp_reg(inst,regp,reg,size)   \
+       do {    \
+               switch ((size)) {       \
+               case 1: *(inst)++ = (unsigned char)0x88; break; \
+               case 2: *(inst)++ = (unsigned char)0x66; /* fall through */     \
+               case 4: *(inst)++ = (unsigned char)0x89; break; \
+               default: assert (0);    \
+               }       \
+               x86_regp_emit ((inst), (reg), (regp));  \
+       } while (0)
+
 #define x86_mov_membase_reg(inst,basereg,disp,reg,size)        \
        do {    \
                switch ((size)) {       \
@@ -1121,8 +1132,8 @@ typedef union {
 
 #define x86_call_code(inst,target)     \
        do {    \
-               int offset = (target) - (inst); \
-               offset -= 5     \
+               int offset = (unsigned char*)(target) - (inst); \
+               offset -= 5;    \
                x86_call_imm ((inst), offset);  \
        } while (0)