* src/native/llni.h: Added macros for array handling.
[cacao.git] / src / vm / jit / replace.h
index 86ebd5578e0f05bd3e2eae411c8d24701a637cd5..b27ae9b4367d4701fe6f936e7e93ca274246d169 100644 (file)
@@ -1,6 +1,6 @@
-/* vm/jit/replace.h - on-stack replacement of methods
+/* src/vm/jit/replace.h - on-stack replacement of methods
 
-   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: Edwin Steiner
-
-   Changes:
-
    $Id$
 
 */
 #include "config.h"
 #include "vm/types.h"
 
-#if defined(ENABLE_REPLACEMENT)
+#if !defined(ENABLE_REPLACEMENT)
+
+/*** macros for the codegens (disabled version) ************************/
+
+#define REPLACEMENT_POINTS_INIT(cd, jd)
+#define REPLACEMENT_POINTS_RESET(cd, jd)
+#define REPLACEMENT_POINT_BLOCK_START(cd, bptr)
+#define REPLACEMENT_POINT_INLINE_START(cd, iptr)
+#define REPLACEMENT_POINT_INLINE_BODY(cd, iptr)
+#define REPLACEMENT_POINT_RETURN(cd, iptr)
+#define REPLACEMENT_POINT_INVOKE(cd, iptr)
+#define REPLACEMENT_POINT_INVOKE_RETURN(cd, iptr)
+
+#else /* defined(ENABLE_REPLACEMENT) */
 
 /* forward typedefs ***********************************************************/
 
@@ -132,16 +139,16 @@ struct rplpoint {
 
 
 union replace_val_t {
-       s4                 i;
-       s8                 l;
-       ptrint             p;
+       s4             i;
+       s8             l;
+       ptrint         p;
        struct {
                u4 lo;
                u4 hi;
-       }                  words;
-       float              f;
-       double             d;
-       java_objectheader *a;
+       }              words;
+       float          f;
+       double         d;
+       java_object_t *a;
 };
 
 
@@ -156,6 +163,9 @@ struct executionstate_t {
 
        ptrint        intregs[INT_REG_CNT];             /* register values */
        double        fltregs[FLT_REG_CNT];             /* register values */
+#if defined(HAS_ADDRESS_REGISTER_FILE)
+       ptrint        adrregs[ADR_REG_CNT];             /* register values */
+#endif
 
        codeinfo     *code;            /* codeinfo corresponding to the pv */
 };
@@ -194,6 +204,9 @@ struct sourceframe_t {
        u1            *nativepc;
        ptrint         nativesavint[INT_SAV_CNT]; /* XXX temporary */
        double         nativesavflt[FLT_REG_CNT]; /* XXX temporary */
+#if defined(HAS_ADDRESS_REGISTER_FILE)
+       ptrint         nativesavadr[ADR_SAV_CNT]; /* XXX temporary */
+#endif
 };
 
 #define REPLACE_IS_NATIVE_FRAME(frame)  ((frame)->sfi != NULL)
@@ -258,9 +271,6 @@ struct replace_safestack_t {
         cd->replacementpoint[-1].callsize = (cd->mcodeptr - cd->mcodebase)\
                     - (ptrint) cd->replacementpoint[-1].pc;
 
-#define REPLACEMENT_EMIT_STUBS(jd)                                   \
-    emit_replacement_stubs(jd);
-
 /*** prototypes ********************************************************/
 
 bool replace_create_replacement_points(jitdata *jd);
@@ -269,6 +279,8 @@ void replace_free_replacement_points(codeinfo *code);
 void replace_activate_replacement_points(codeinfo *code, bool mappable);
 void replace_deactivate_replacement_points(codeinfo *code);
 
+bool replace_me_wrapper(u1 *pc);
+
 void replace_me(rplpoint *rp,executionstate_t *es);
 
 #if !defined(NDEBUG)
@@ -287,23 +299,10 @@ void md_patch_replacement_point(codeinfo *code, s4 index, rplpoint *rp,
                                                                u1 *savedmcode);
 #endif
 
-#else /* !defined(ENABLE_REPLACEMENT) */
-
-/*** macros for the codegens (disabled version) ************************/
-
-#define REPLACEMENT_POINTS_INIT(cd, jd)
-#define REPLACEMENT_POINTS_RESET(cd, jd)
-#define REPLACEMENT_POINT_BLOCK_START(cd, bptr)
-#define REPLACEMENT_POINT_INLINE_START(cd, iptr)
-#define REPLACEMENT_POINT_INLINE_BODY(cd, iptr)
-#define REPLACEMENT_POINT_RETURN(cd, iptr)
-#define REPLACEMENT_POINT_INVOKE(cd, iptr)
-#define REPLACEMENT_POINT_INVOKE_RETURN(cd, iptr)
-#define REPLACEMENT_EMIT_STUBS(jd)
-
 #endif /* defined(ENABLE_REPLACEMENT) */
 
-#endif
+#endif /* _REPLACE_H */
+
 
 /*
  * These are local overrides for various environment variables in Emacs.