From 7d5ebc10065443a69bc848e65636a96ce8db632f Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 10 Feb 2021 20:22:15 -0800 Subject: vm: remove hard-coded constants. * genvmop.txr: Define VM_LEV_SIZE from %lev-size%. * vm.c (vm_make_desc): Use VM_MAX_LEV and VM_LEV_SIZE instead of incorrect hard-coded values of 256 that were right for an old version of the vm. * vmop.h: Regenerated. --- genvmop.txr | 1 + vm.c | 12 ++++++------ 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) 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 -- cgit v1.2.3