summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--genvmop.txr1
-rw-r--r--vm.c12
-rw-r--r--vmop.h1
3 files changed, 8 insertions, 6 deletions
diff --git a/genvmop.txr b/genvmop.txr
index 5e80948a..7cc097e6 100644
--- a/genvmop.txr
+++ b/genvmop.txr
@@ -23,4 +23,5 @@ typedef enum vm_op {
#define VM_SM_LEV_MASK @(fmt "0x~X" (pred (ash 1 sys:%sm-lev-bits%)))
#define VM_MAX_LEV @{sys:%max-lev%}
#define VM_MAX_V_LEV @{sys:%max-v-lev%}
+#define VM_LEV_SIZE @{sys:%lev-size%}
@(end)
diff --git a/vm.c b/vm.c
index 05c78dbc..f53962f3 100644
--- a/vm.c
+++ b/vm.c
@@ -117,13 +117,13 @@ val vm_make_desc(val nlevels, val nregs, val bytecode,
val self = lit("sys:vm-make-desc");
int nlvl = c_int(nlevels, self), nreg = c_int(nregs, self);
- if (nlvl < 2 || nlvl > 256)
- uw_throwf(error_s, lit("~a: nlevels must be 2 to 256; ~s given"),
- self, nlevels, nao);
+ if (nlvl < 2 || nlvl > VM_MAX_LEV)
+ uw_throwf(error_s, lit("~a: nlevels must be 2 to ~s; ~s given"),
+ self, num(VM_MAX_LEV), nlevels, nao);
- if (nreg < 1 || nreg > 256)
- uw_throwf(error_s, lit("~a: nregs must be 1 to 256; ~s given"),
- self, nregs, nao);
+ if (nreg < 1 || nreg > VM_LEV_SIZE)
+ uw_throwf(error_s, lit("~a: nregs must be 1 to ~s; ~s given"),
+ self, num(VM_LEV_SIZE), nregs, nao);
{
mem_t *code = buf_get(bytecode, self);
diff --git a/vmop.h b/vmop.h
index 014e098b..aeec2d0a 100644
--- a/vmop.h
+++ b/vmop.h
@@ -77,3 +77,4 @@ typedef enum vm_op {
#define VM_SM_LEV_MASK 0x3F
#define VM_MAX_LEV 63
#define VM_MAX_V_LEV 61
+#define VM_LEV_SIZE 1024