summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.h
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-02-04 23:47:56 +0100
committerAndy Wingo <wingo@pobox.com>2009-02-04 23:47:56 +0100
commit6d14383e866f447a0d2656fd319ba68a5737202c (patch)
tree85eeff88a88f7eb96e865aacd83cb2eedf7bc4c3 /libguile/vm-engine.h
parentbef959110427b00bd07b0ac35b1baa2db2bc4828 (diff)
downloadguile-6d14383e866f447a0d2656fd319ba68a5737202c.tar.gz
enable multiple vm engines (regular, debug, ...)
* libguile/vm-engine.c (VM_USE_HOOKS, VM_USE_CLOCK, VM_CHECK_EXTERNAL) (VM_CHECK_OBJECT): Update to define these here, before including vm-engine.h. (vm_run): Change so that we can make different engines. Also, we take an array of arguments, and the struct scm_vm directly, so as to avoid any need to cons. * libguile/vm-engine.h (CHECK_EXTERNAL, CHECK_OBJECT): Add some UNLIKELY bits; don't seem to help. * libguile/vm.c (vm_dispatch_hook): Change to not pass the VP. This needs some love, and perhaps we revert to the old way. (VM_ENGINE): Actually make two engines, vm_regular_engine and vm_debug_engine. Probably there is room for improvement here. Actually their speeds are the same at the moment. (make_vm): Choose which engine to run; currently the debug engine by default. (scm_c_vm_run): A thin wrapper to invoke a VM without consing. (scm_vm_apply): Use scm_c_vm_run. (scm_load_compiled_with_vm): Use scm_c_vm_run.
Diffstat (limited to 'libguile/vm-engine.h')
-rw-r--r--libguile/vm-engine.h15
1 files changed, 3 insertions, 12 deletions
diff --git a/libguile/vm-engine.h b/libguile/vm-engine.h
index 221bef064..e14d8eba6 100644
--- a/libguile/vm-engine.h
+++ b/libguile/vm-engine.h
@@ -41,15 +41,6 @@
/* This file is included in vm_engine.c */
-/*
- * Options
- */
-
-#define VM_USE_HOOKS 1 /* Various hooks */
-#define VM_USE_CLOCK 1 /* Bogoclock */
-#define VM_CHECK_EXTERNAL 1 /* Check external link */
-#define VM_CHECK_OBJECT 1 /* Check object table */
-
/*
* Registers
@@ -193,7 +184,7 @@
#undef CHECK_EXTERNAL
#if VM_CHECK_EXTERNAL
#define CHECK_EXTERNAL(e) \
- do { if (!SCM_CONSP (e)) goto vm_error_external; } while (0)
+ do { if (SCM_UNLIKELY (!SCM_CONSP (e))) goto vm_error_external; } while (0)
#else
#define CHECK_EXTERNAL(e)
#endif
@@ -201,7 +192,7 @@
/* Accesses to a program's object table. */
#if VM_CHECK_OBJECT
#define CHECK_OBJECT(_num) \
- do { if ((_num) >= object_count) goto vm_error_object; } while (0)
+ do { if (SCM_UNLIKELY ((_num) >= object_count)) goto vm_error_object; } while (0)
#else
#define CHECK_OBJECT(_num)
#endif
@@ -218,7 +209,7 @@
if (SCM_UNLIKELY (!SCM_FALSEP (vp->hooks[h])))\
{ \
SYNC_REGISTER (); \
- vm_dispatch_hook (vm, vp->hooks[h], hook_args); \
+ vm_dispatch_hook (vp, vp->hooks[h], hook_args); \
CACHE_REGISTER (); \
} \
}