mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-24 12:20:20 +02:00
nlocs is now 16 bits wide
* libguile/objcodes.h (struct scm_objcode): Remove the "unused" field -- the old "nexts" -- and expand nlocs to 16 bits. * module/language/assembly/compile-bytecode.scm (write-bytecode): Write the nlocs as a uint16. * module/language/assembly/decompile-bytecode.scm (decode-load-program): Decompile 16-bit nlocs. It seems this decompilation is little-endian :-/ * test-suite/tests/asm-to-bytecode.test: Fix up to understand nlocs as a little-endian value. The test does the right thing regarding endianness.
This commit is contained in:
parent
476e357281
commit
ccf77d955c
4 changed files with 47 additions and 40 deletions
|
@ -81,6 +81,10 @@
|
|||
|
||||
(let ((inst (car asm))
|
||||
(args (cdr asm))
|
||||
(write-uint16 (case byte-order
|
||||
((1234) write-uint16-le)
|
||||
((4321) write-uint16-be)
|
||||
(else (error "unknown endianness" byte-order))))
|
||||
(write-uint32 (case byte-order
|
||||
((1234) write-uint32-le)
|
||||
((4321) write-uint32-be)
|
||||
|
@ -92,8 +96,7 @@
|
|||
((load-program ,nargs ,nrest ,nlocs ,labels ,length ,meta . ,code)
|
||||
(write-byte nargs)
|
||||
(write-byte nrest)
|
||||
(write-byte nlocs)
|
||||
(write-byte 0) ;; what used to be nexts
|
||||
(write-uint16 nlocs)
|
||||
(write-uint32 length)
|
||||
(write-uint32 (if meta (1- (byte-length meta)) 0))
|
||||
(letrec ((i 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue