summaryrefslogtreecommitdiff
path: root/module/system/vm/assembler.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/system/vm/assembler.scm')
-rw-r--r--module/system/vm/assembler.scm15
1 files changed, 15 insertions, 0 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index ff883d38c..e0a39d35c 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -89,6 +89,7 @@
emit-jne
emit-jge
emit-jnge
+ emit-jtable
emit-fixnum?
emit-heap-object?
@@ -746,6 +747,19 @@ later by the linker."
(emit asm (pack-u8-u24 a b)))
((C16_C16 a b)
(emit asm (pack-u16-u16 a b)))
+ ((V32_X8_L24 labels)
+ (let ((len (vector-length labels)))
+ (emit asm len)
+ (let lp ()
+ (unless (<= (+ (asm-pos asm) (* 4 len))
+ (bytevector-length (asm-buf asm)))
+ (grow-buffer! asm)
+ (lp)))
+ (let lp ((n 0))
+ (when (< n len)
+ (record-label-reference asm (vector-ref labels n))
+ (emit asm 0)
+ (lp (1+ n))))))
((B1_X7_L24 a label)
(record-label-reference asm label)
(emit asm (pack-u1-u7-u24 (if a 1 0) 0 0)))
@@ -1050,6 +1064,7 @@ later by the linker."
('C8_C24 #'(a b))
('C8_S24 #'(a b))
('C16_C16 #'(a b))
+ ('V32_X8_L24 #'(labels))
('B1_X7_L24 #'(a label))
('B1_C7_L24 #'(a b label))
('B1_X31 #'(a))