mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 09:10:22 +02:00
compile list' and
vector' to their associated opcodes
* module/language/glil/compile-assembly.scm (glil->assembly): Check the length when emitting calls to variable-argument stack instructions. Allow two-byte lengths -- allows e.g. calls to `list' with more than 256 arguments. * module/language/tree-il/compile-glil.scm: Add primcall associations for `list' and `vector', with any number of arguments. Necessary because syncase's quasiquote expansions will produce calls to `list' with many arguments. * module/language/tree-il/optimize.scm (*interesting-primitive-names*): Add `list' and `vector' to the set of primitives to resolve.
This commit is contained in:
parent
5af166bda2
commit
c11f46afe1
3 changed files with 14 additions and 4 deletions
|
@ -312,7 +312,12 @@
|
|||
(error "Unknown instruction:" inst))
|
||||
(let ((pops (instruction-pops inst)))
|
||||
(cond ((< pops 0)
|
||||
(emit-code `((,inst ,nargs))))
|
||||
(case (instruction-length inst)
|
||||
((1) (emit-code `((,inst ,nargs))))
|
||||
((2) (emit-code `((,inst ,(quotient nargs 256)
|
||||
,(modulo nargs 256)))))
|
||||
(else (error "Unknown length for variable-arg instruction:"
|
||||
inst (instruction-length inst)))))
|
||||
((= pops nargs)
|
||||
(emit-code `((,inst))))
|
||||
(else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue