[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] libjit ChangeLog jit/jit-context.c jit/jit-func...
From: |
Aleksey Demakov |
Subject: |
[dotgnu-pnet-commits] libjit ChangeLog jit/jit-context.c jit/jit-func... |
Date: |
Fri, 21 Dec 2007 06:42:45 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: libjit
Changes by: Aleksey Demakov <avd> 07/12/21 06:42:45
Modified files:
. : ChangeLog
jit : jit-context.c jit-function.c jit-internal.h
jit-interp.c
Log message:
fix on-demand compilation for interpreter
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.327&r2=1.328
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-context.c?cvsroot=dotgnu-pnet&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-function.c?cvsroot=dotgnu-pnet&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-internal.h?cvsroot=dotgnu-pnet&r1=1.29&r2=1.30
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-interp.c?cvsroot=dotgnu-pnet&r1=1.17&r2=1.18
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.327
retrieving revision 1.328
diff -u -b -r1.327 -r1.328
--- ChangeLog 20 Dec 2007 17:31:50 -0000 1.327
+++ ChangeLog 21 Dec 2007 06:42:45 -0000 1.328
@@ -1,3 +1,9 @@
+2007-12-21 Aleksey Demakov <address@hidden>
+
+ * jit/jit-internal.h, jit/jit-context.c, jit/jit-function.c:
+ * jit/jit-interp.c: use on-demand driver for interpreter but skip
+ indirector/redirector stuff for it.
+
2007-12-20 Aleksey Demakov <address@hidden>
* include/jit/jit-plus.h: add jit_context::build_start() and
Index: jit/jit-context.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-context.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- jit/jit-context.c 4 Feb 2007 14:31:33 -0000 1.7
+++ jit/jit-context.c 21 Dec 2007 06:42:45 -0000 1.8
@@ -88,7 +88,7 @@
jit_mutex_create(&(context->cache_lock));
context->functions = 0;
context->last_function = 0;
- context->on_demand_driver = 0;
+ context->on_demand_driver = _jit_function_compile_on_demand;
return context;
}
@@ -204,7 +204,14 @@
@*/
void jit_context_set_on_demand_driver(jit_context_t context,
jit_on_demand_driver_func driver)
{
+ if (driver)
+ {
context->on_demand_driver = driver;
+ }
+ else
+ {
+ context->on_demand_driver = _jit_function_compile_on_demand;
+ }
}
/*@
Index: jit/jit-function.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-function.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- jit/jit-function.c 20 Dec 2007 13:47:23 -0000 1.32
+++ jit/jit-function.c 21 Dec 2007 06:42:45 -0000 1.33
@@ -49,10 +49,7 @@
jit_function_t jit_function_create(jit_context_t context, jit_type_t signature)
{
jit_function_t func;
-#if defined(jit_redirector_size)
- jit_on_demand_driver_func on_demand_driver;
-#endif
-#if defined(jit_redirector_size) || defined(jit_indirector_size)
+#if !defined(JIT_BACKEND_INTERP) && (defined(jit_redirector_size) ||
defined(jit_indirector_size))
jit_cache_t cache;
#endif
@@ -63,7 +60,7 @@
return 0;
}
-#if defined(jit_redirector_size) || defined(jit_indirector_size)
+#if !defined(JIT_BACKEND_INTERP) && (defined(jit_redirector_size) ||
defined(jit_indirector_size))
/* TODO: if the function is destroyed the redirector and indirector
memory
is leaked */
@@ -101,27 +98,22 @@
# endif
jit_mutex_unlock(&(context->cache_lock));
-#endif
+#endif /* !defined(JIT_BACKEND_INTERP) && (defined(jit_redirector_size) ||
defined(jit_indirector_size)) */
/* Initialize the function block */
func->context = context;
func->signature = jit_type_copy(signature);
-#if defined(jit_redirector_size)
+#if !defined(JIT_BACKEND_INTERP) && defined(jit_redirector_size)
/* If we aren't using interpretation, then point the function's
initial entry point at the redirector, which in turn will
invoke the on-demand compiler */
- on_demand_driver = context->on_demand_driver;
- if(!on_demand_driver)
- {
- on_demand_driver = _jit_function_compile_on_demand;
- }
func->entry_point = _jit_create_redirector
- (func->redirector, (void *) on_demand_driver,
+ (func->redirector, (void *) context->on_demand_driver,
func, jit_type_get_abi(signature));
jit_flush_exec(func->redirector, jit_redirector_size);
#endif
-# if defined(jit_indirector_size)
+# if !defined(JIT_BACKEND_INTERP) && defined(jit_indirector_size)
_jit_create_indirector(func->indirector, (void**) &(func->entry_point));
jit_flush_exec(func->indirector, jit_indirector_size);
# endif
@@ -839,7 +831,7 @@
}
#endif
-#if !defined(jit_redirector_size) || !defined(jit_indirector_size)
+#if !defined(JIT_BACKEND_INTERP) && (!defined(jit_redirector_size) ||
!defined(jit_indirector_size))
/* If the function is recompilable, then we need an extra entry
point to properly redirect previous references to the
function */
if(func->is_recompilable && !func->indirector)
@@ -1455,9 +1447,6 @@
(jit_function_t func, jit_type_t signature, void **args, void
*return_area)
{
struct jit_backtrace call_trace;
-#if defined(jit_redirector_size)
- jit_on_demand_driver_func on_demand_driver;
-#endif
void *entry;
jit_jmp_buf jbuf;
@@ -1492,16 +1481,7 @@
}
else
{
-#if defined(jit_redirector_size)
- on_demand_driver = func->context->on_demand_driver;
- if(!on_demand_driver)
- {
- on_demand_driver = _jit_function_compile_on_demand;
- }
- entry = (*on_demand_driver)(func);
-#else
- entry = _jit_function_compile_on_demand(func);
-#endif
+ entry = (*func->context->on_demand_driver)(func);
}
/* Get the default signature if necessary */
Index: jit/jit-internal.h
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-internal.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- jit/jit-internal.h 16 Dec 2007 11:46:54 -0000 1.29
+++ jit/jit-internal.h 21 Dec 2007 06:42:45 -0000 1.30
@@ -398,17 +398,19 @@
/* The function to call to perform on-demand compilation */
jit_on_demand_func on_demand;
-#ifdef jit_redirector_size
+#ifndef JIT_BACKEND_INTERP
+# ifdef jit_redirector_size
/* Buffer that contains the redirector for this function.
Redirectors are used to support on-demand compilation */
unsigned char *redirector;
-#endif
+# endif
/* Buffer that contains the indirector for this function.
The indirector jumps to the address that is currently
stored in the entry_point field. Indirectors are used
to support recompilation and on-demand compilation. */
unsigned char *indirector;
+#endif
};
/*
Index: jit/jit-interp.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-interp.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- jit/jit-interp.c 16 Oct 2006 02:27:24 -0000 1.17
+++ jit/jit-interp.c 21 Dec 2007 06:42:45 -0000 1.18
@@ -3308,7 +3308,7 @@
_jit_backtrace_push(&call_trace, pc);
if(!entry)
{
- entry =
_jit_function_compile_on_demand(call_func);
+ entry =
(*call_func->context->on_demand_driver)(call_func);
}
_jit_run_function((jit_function_interp_t)entry,
stacktop,
@@ -3324,7 +3324,7 @@
entry = call_func->entry_point;
if(!entry)
{
- entry =
_jit_function_compile_on_demand(call_func);
+ entry =
(*call_func->context->on_demand_driver)(call_func);
}
VM_PERFORM_TAIL((jit_function_interp_t)entry);
}
@@ -3360,7 +3360,7 @@
_jit_backtrace_push(&call_trace, pc);
if(!entry)
{
- entry =
_jit_function_compile_on_demand(call_func);
+ entry =
(*call_func->context->on_demand_driver)(call_func);
}
_jit_run_function((jit_function_interp_t)entry,
stacktop,
@@ -3380,7 +3380,7 @@
entry = call_func->entry_point;
if(!entry)
{
- entry =
_jit_function_compile_on_demand(call_func);
+ entry =
(*call_func->context->on_demand_driver)(call_func);
}
VM_PERFORM_TAIL((jit_function_interp_t)entry);
}
@@ -5009,8 +5009,7 @@
}
else
{
- entry = (jit_function_interp_t)
- _jit_function_compile_on_demand(func);
+ entry =
(jit_function_interp_t)(*func->context->on_demand_driver)(func);
}
/* Populate the low-level argument buffer */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ChangeLog jit/jit-context.c jit/jit-func...,
Aleksey Demakov <=