Thu Dec 13 15:56:53 CET 2001 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Thu, 13 Dec 2001 11:03:21 +0000 (11:03 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Thu, 13 Dec 2001 11:03:21 +0000 (11:03 -0000)
* x86/x86-codegen.h: x86_mov_memindex_imm() added.

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

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

index b78682c7a5b9c5d6724765d25ab0939e11490e33..9e48bebc1c3e5e0dd4790a83e6523a89f9b84f97 100644 (file)
@@ -1,3 +1,8 @@
+
+Thu Dec 13 15:56:53 CET 2001 Paolo Molaro <lupus@ximian.com>
+
+       * x86/x86-codegen.h: x86_mov_memindex_imm() added.
+       
 2001-11-29  Radek Doulik  <rodo@ximian.com>
 
        * ppc/tramp.c: use r12 which is volatile instead of non-volatile
index 51213fbc09494aa1039176c48e6c4c53b7b6a768..ef34118e874f14a2d28608e10ff9c4cabe716cd0 100644 (file)
@@ -246,6 +246,8 @@ enum_retvalue:
                case MONO_TYPE_U:
                case MONO_TYPE_CLASS:
                case MONO_TYPE_OBJECT:
+               case MONO_TYPE_SZARRAY:
+               case MONO_TYPE_ARRAY:
                case MONO_TYPE_STRING: /* this is going to cause large pains... */
                        x86_mov_reg_membase (p, X86_ECX, X86_EBP, RETVAL_POS, 4);
                        x86_mov_regp_reg (p, X86_ECX, X86_EAX, 4);
index b440fd3524c596a058170253e9ed66d97db7653f..08421ea6f7cf901d394d891cbea700200d2a0c72 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.17 2001/11/27 10:30:39 lupus Exp $
+// $Header: /home/miguel/third-conversion/public/mono/mono/arch/x86/x86-codegen.h,v 1.18 2001/12/13 11:03:21 lupus Exp $
 */
 
 #ifndef X86_H
@@ -804,6 +804,24 @@ typedef union {
                }       \
        } while (0)
 
+#define x86_mov_memindex_imm(inst,basereg,disp,indexreg,shift,imm,size)        \
+       do {    \
+               if ((size) == 1) {      \
+                       *(inst)++ = (unsigned char)0xc6;        \
+                       x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));  \
+                       x86_imm_emit8 ((inst), (imm));  \
+               } else if ((size) == 2) {       \
+                       *(inst)++ = (unsigned char)0x66;        \
+                       *(inst)++ = (unsigned char)0xc7;        \
+                       x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));  \
+                       x86_imm_emit16 ((inst), (imm)); \
+               } else {        \
+                       *(inst)++ = (unsigned char)0xc7;        \
+                       x86_memindex_emit ((inst), 0, (basereg), (disp), (indexreg), (shift));  \
+                       x86_imm_emit32 ((inst), (imm)); \
+               }       \
+       } while (0)
+
 #define x86_lea_mem(inst,reg,mem)      \
        do {    \
                *(inst)++ = (unsigned char)0x8d;        \