diff options
Diffstat (limited to 'module/language/assembly.scm')
-rw-r--r-- | module/language/assembly.scm | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/module/language/assembly.scm b/module/language/assembly.scm index 734deb580..fbe3a7153 100644 --- a/module/language/assembly.scm +++ b/module/language/assembly.scm @@ -22,7 +22,9 @@ (define-module (language assembly) #:use-module (system base pmatch) #:use-module (system vm instruction) + #:use-module ((srfi srfi-1) #:select (fold)) #:export (byte-length + addr+ align-program assembly-pack assembly-unpack object->assembly assembly->object)) @@ -54,6 +56,21 @@ (+ 1 (instruction-length inst))) (else (error "unknown instruction" assembly)))) + +(define *program-alignment* 8) + +(define (addr+ addr code) + (fold (lambda (x len) (+ (byte-length x) len)) + addr + code)) + +(define (align-program prog addr) + `(,@(make-list (modulo (- *program-alignment* + (modulo addr *program-alignment*)) + *program-alignment*) + '(nop)) + ,prog)) + ;;; ;;; Code compress/decompression ;;; |