diff options
author | Andy Wingo <wingo@pobox.com> | 2009-02-04 23:47:56 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-02-04 23:47:56 +0100 |
commit | 6d14383e866f447a0d2656fd319ba68a5737202c (patch) | |
tree | 85eeff88a88f7eb96e865aacd83cb2eedf7bc4c3 /libguile/vm-engine.h | |
parent | bef959110427b00bd07b0ac35b1baa2db2bc4828 (diff) | |
download | guile-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.h | 15 |
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 (); \ } \ } |