mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 21:40:33 +02:00
Assembler residualizes local variable definition locations
* module/system/vm/assembler.scm (write-arities): Serialize definition locations after names. (definition): Store definition as a byte offset.
This commit is contained in:
parent
1a82c2012b
commit
67ddb7e264
1 changed files with 13 additions and 2 deletions
|
@ -829,7 +829,9 @@ returned instead."
|
||||||
|
|
||||||
(define-macro-assembler (definition asm name slot)
|
(define-macro-assembler (definition asm name slot)
|
||||||
(let* ((arity (car (meta-arities (car (asm-meta asm)))))
|
(let* ((arity (car (meta-arities (car (asm-meta asm)))))
|
||||||
(def (vector name slot (- (asm-start asm) (arity-low-pc arity)))))
|
(def (vector name
|
||||||
|
slot
|
||||||
|
(* (- (asm-start asm) (arity-low-pc arity)) 4))))
|
||||||
(set-arity-definitions! arity (cons def (arity-definitions arity)))))
|
(set-arity-definitions! arity (cons def (arity-definitions arity)))))
|
||||||
|
|
||||||
(define-macro-assembler (cache-current-module! asm module scope)
|
(define-macro-assembler (cache-current-module! asm module scope)
|
||||||
|
@ -1510,6 +1512,7 @@ procedure with label @var{rw-init}. @var{rw-init} may be false. If
|
||||||
(length (arity-opt arity))
|
(length (arity-opt arity))
|
||||||
(length (arity-definitions arity)))
|
(length (arity-definitions arity)))
|
||||||
(let ((relocs (write-kw-indices (arity-kw-indices arity) relocs)))
|
(let ((relocs (write-kw-indices (arity-kw-indices arity) relocs)))
|
||||||
|
;; Write local names.
|
||||||
(let lp ((definitions (arity-definitions arity)))
|
(let lp ((definitions (arity-definitions arity)))
|
||||||
(match definitions
|
(match definitions
|
||||||
(() relocs)
|
(() relocs)
|
||||||
|
@ -1518,7 +1521,15 @@ procedure with label @var{rw-init}. @var{rw-init} may be false. If
|
||||||
(string-table-intern! strtab (symbol->string name))
|
(string-table-intern! strtab (symbol->string name))
|
||||||
0)))
|
0)))
|
||||||
(put-uleb128 names-port sym)
|
(put-uleb128 names-port sym)
|
||||||
(lp definitions)))))))
|
(lp definitions)))))
|
||||||
|
;; Now write their definitions.
|
||||||
|
(let lp ((definitions (arity-definitions arity)))
|
||||||
|
(match definitions
|
||||||
|
(() relocs)
|
||||||
|
((#(name slot def) . definitions)
|
||||||
|
(put-uleb128 names-port def)
|
||||||
|
(put-uleb128 names-port slot)
|
||||||
|
(lp definitions))))))
|
||||||
(let lp ((metas metas) (pos arities-prefix-len) (relocs '()))
|
(let lp ((metas metas) (pos arities-prefix-len) (relocs '()))
|
||||||
(match metas
|
(match metas
|
||||||
(()
|
(()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue