mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-19 03:00:25 +02:00
Add indirect-tail-call VM instruction
* libguile/vm-engine.c (indirect_tail_call): New instruction. * libguile/jit.c (compile_indirect_tail_call): (compile_indirect_tail_call_slow): Add JIT support. * module/system/vm/assembler.scm (system): * module/system/vm/disassembler.scm (instruction-has-fallthrough?): (stack-effect-parsers): Add assembler support.
This commit is contained in:
parent
896960dade
commit
a1eb526b0c
4 changed files with 51 additions and 4 deletions
|
@ -282,6 +282,7 @@
|
|||
|
||||
emit-call
|
||||
emit-call-label
|
||||
emit-indirect-tail-call
|
||||
emit-tail-call
|
||||
emit-tail-call-label
|
||||
(emit-instrument-entry* . emit-instrument-entry)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; Guile bytecode disassembler
|
||||
|
||||
;;; Copyright (C) 2001, 2009-2010, 2012-2015, 2017-2020, 2022 Free Software Foundation, Inc.
|
||||
;;; Copyright (C) 2001, 2009-2010, 2012-2015, 2017-2023 Free Software Foundation, Inc.
|
||||
;;;
|
||||
;;; This library is free software; you can redistribute it and/or
|
||||
;;; modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -584,7 +584,7 @@ address of that offset."
|
|||
(define non-fallthrough-set
|
||||
(static-opcode-set halt
|
||||
throw throw/value throw/value+data
|
||||
tail-call tail-call-label
|
||||
tail-call tail-call-label indirect-tail-call
|
||||
return-values
|
||||
subr-call foreign-call continuation-call
|
||||
j jtable))
|
||||
|
@ -656,7 +656,9 @@ address of that offset."
|
|||
#xfff))
|
||||
(nlocals (ash (bytevector-u32-native-ref code pos) -20)))
|
||||
(+ nargs nlocals))))
|
||||
((call call-label tail-call tail-call-label expand-apply-argument)
|
||||
((expand-apply-argument
|
||||
call call-label
|
||||
indirect-tail-call tail-call tail-call-label)
|
||||
#'(lambda (code pos size) #f))
|
||||
((shuffle-down)
|
||||
#'(lambda (code pos size)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue