Merged revisions 8245-8298 via svnmerge from
[cacao.git] / src / vm / jit / i386 / md.c
index 9080ac09779c3134f83f134ee822ca55066e640e..7051bb72c3cd11f8fac5e1e79105ba576bf282be 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/i386/md.c - machine dependent i386 functions
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Christian Thalinger
-            Edwin Steiner
-
-   $Id: md.c 6142 2006-12-07 23:02:52Z edwin $
+   $Id: md.c 8247 2007-07-31 12:06:44Z michi $
 
 */
 
 #include "vm/types.h"
 
 #include "vm/global.h"
+
 #include "vm/jit/asmpart.h"
 #include "vm/jit/codegen-common.h"
+#include "vm/jit/md.h"
 
 #if !defined(NDEBUG) && defined(ENABLE_DISASSEMBLER)
-#include "vm/options.h" /* XXX debug */
+#include "vmcore/options.h" /* XXX debug */
 #include "vm/jit/disass.h" /* XXX debug */
 #endif
 
@@ -60,34 +57,6 @@ void md_init(void)
 }
 
 
-/* md_codegen_patch_branch *****************************************************
-
-   Back-patches a branch instruction.
-
-*******************************************************************************/
-
-void md_codegen_patch_branch(codegendata *cd, s4 branchmpc, s4 targetmpc)
-{
-       s4 *mcodeptr;
-       s4  disp;                           /* branch displacement                */
-
-       /* calculate the patch position */
-
-       mcodeptr = (s4 *) (cd->mcodebase + branchmpc);
-
-       /* Calculate the branch displacement. */
-
-       disp = targetmpc - branchmpc;
-
-       /* I don't think we have to check for branch-displacement
-          overflow, +/-2GB should be enough. */
-
-       /* patch the branch instruction before the mcodeptr */
-
-       mcodeptr[-1] = disp;
-}
-
-
 /* md_stacktrace_get_returnaddress *********************************************
 
    Returns the return address of the current stackframe, specified by
@@ -248,9 +217,9 @@ void md_dcacheflush(u1 *addr, s4 nbytes)
 
 *******************************************************************************/
 
+#if defined(ENABLE_REPLACEMENT)
 void md_patch_replacement_point(codeinfo *code, s4 index, rplpoint *rp, u1 *savedmcode)
 {
-       s4 disp;
        u8 mcode;
 
        /* XXX this is probably unsafe! */
@@ -271,11 +240,8 @@ void md_patch_replacement_point(codeinfo *code, s4 index, rplpoint *rp, u1 *save
                savedmcode[4] = rp->pc[4];
 
                /* build the machine code for the patch */
-               disp = (code->replacementstubs - rp->pc)
-                          + index * REPLACEMENT_STUB_SIZE
-                          - 5;
-
-               mcode = 0xe9 | ((u8) disp << 8);
+               assert(0); /* XXX build trap instruction below */
+               mcode = 0;
 
                /* write spinning instruction */
                *(u2*)(rp->pc) = 0xebfe;
@@ -297,6 +263,7 @@ void md_patch_replacement_point(codeinfo *code, s4 index, rplpoint *rp, u1 *save
                        
     /* XXX if required asm_cacheflush(rp->pc,8); */
 }
+#endif /* defined(ENABLE_REPLACEMENT) */
 
 /*
  * These are local overrides for various environment variables in Emacs.