diff options
-rw-r--r-- | genvmop.txr | 1 | ||||
-rw-r--r-- | vm.c | 12 | ||||
-rw-r--r-- | vmop.h | 1 |
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) @@ -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); @@ -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 |