diff options
author | Andy Wingo <wingo@pobox.com> | 2009-06-05 16:31:38 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-06-05 16:31:38 +0200 |
commit | 782a82eed13abb64393f7acad92758ae191ce509 (patch) | |
tree | 517a209c703d8810789dbdf3cfc23a835e21e5b1 /module/language/assembly/compile-bytecode.scm | |
parent | a9b0f876c12bbbca9bdf1890eb014a30f004d9f8 (diff) | |
download | guile-782a82eed13abb64393f7acad92758ae191ce509.tar.gz |
add ability to compile uniform arrays
* module/rnrs/bytevector.scm (rnrs):
* libguile/bytevectors.h:
* libguile/bytevectors.c (scm_uniform_array_to_bytevector): New function.
* libguile/unif.h:
* libguile/unif.c (scm_from_contiguous_typed_array): New function.
* libguile/vm-i-loader.c (load-array): New instruction, for loading byte
data into uniform vectors. Currently it copies out the data, though in
the future we could avoid that.
* module/language/assembly.scm (align-code): New exported function,
aligns code on some boundary.
(align-program): Use align-code.
* module/language/assembly/compile-bytecode.scm (write-bytecode): Support
the load-array instruction.
* module/language/glil/compile-assembly.scm (dump-object): Dump uniform
arrays. Neat :)
Diffstat (limited to 'module/language/assembly/compile-bytecode.scm')
-rw-r--r-- | module/language/assembly/compile-bytecode.scm | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/module/language/assembly/compile-bytecode.scm b/module/language/assembly/compile-bytecode.scm index 00a324c31..e4458a992 100644 --- a/module/language/assembly/compile-bytecode.scm +++ b/module/language/assembly/compile-bytecode.scm @@ -24,6 +24,7 @@ #:use-module (language assembly) #:use-module (system vm instruction) #:use-module (srfi srfi-4) + #:use-module (rnrs bytevector) #:use-module ((srfi srfi-1) #:select (fold)) #:use-module ((system vm objcode) #:select (byte-order)) #:export (compile-bytecode write-bytecode)) @@ -72,6 +73,10 @@ (define (write-loader str) (write-loader-len (string-length str)) (write-string str)) + (define (write-bytevector bv) + (write-loader-len (bytevector-length bv)) + ;; Ew! + (for-each write-byte (bytevector->u8-list bv))) (define (write-break label) (write-uint16-be (- (assq-ref labels label) (+ (get-addr) 2)))) @@ -113,6 +118,7 @@ ((load-string ,str) (write-loader str)) ((load-symbol ,str) (write-loader str)) ((load-keyword ,str) (write-loader str)) + ((load-array ,bv) (write-bytevector bv)) ((define ,str) (write-loader str)) ((br ,l) (write-break l)) ((br-if ,l) (write-break l)) |