summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-02-10 20:22:15 -0800
committerKaz Kylheku <kaz@kylheku.com>2021-02-10 20:22:15 -0800
commit7d5ebc10065443a69bc848e65636a96ce8db632f (patch)
tree77122735769bde0b2088dcbd83a552b191fd5fce
parent7a957692314786f988cf126fcc86aad2708d8ba7 (diff)
downloadtxr-7d5ebc10065443a69bc848e65636a96ce8db632f.tar.gz
txr-7d5ebc10065443a69bc848e65636a96ce8db632f.tar.bz2
txr-7d5ebc10065443a69bc848e65636a96ce8db632f.zip
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.
-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