-/* 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 ***********************************************************/
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;
};
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 */
};
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)
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);
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)
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.