(use-modules (system foreign))
(define-module (buffer test)
- #:use-module (system foreign)
- #:export (get-buffer1 get-result))
+ #:use-module (system foreign)
+ #:use-module (rnrs bytevectors)
+ #:export (get-buffer1 get-result))
;; Load the shared library and initialize
(load-extension "./liboutput.so" "perform_operations")
(define perform-operations
(pointer->procedure void
- (dynamic-func "perform_operations" lib)
- '()))
+ (dynamic-func "perform_operations" lib)
+ '()))
-
-;; Function to convert a bytevector into a list of floats
(define (bytevector-to-floats bv)
- (let ((floats '()))
- (do ((i 0 (+ i 4)))
- ((>= i (bytevector-length bv)) (reverse floats))
- ;; Read 4 bytes from the bytevector and convert to float
- (let* ((b0 (bytevector-u8-ref bv i))
- (b1 (bytevector-u8-ref bv (+ i 1)))
- (b2 (bytevector-u8-ref bv (+ i 2)))
- (b3 (bytevector-u8-ref bv (+ i 3)))
- ;; Combine bytes into a 32-bit float (little-endian)
- (int32 (logior (ash b3 24)
- (ash b2 16)
- (ash b1 8)
- b0))
- (float (bitwise-float32->number int32)))
- (set! floats (cons float floats))))))
+ (let loop ((i 0) (floats '()))
+ (if (>= i (bytevector-length bv))
+ (reverse floats)
+ (let* ((float (bytevector-ieee-single-native-ref bv i)))
+ (loop (+ i 4) (cons float floats))))))
;; Usage example
(display "buffer1 as floats: ")
(display (bytevector-to-floats (get-buffer1)))
(newline)
+(display "buffer2 as floats: ")
+(display (bytevector-to-floats (get-buffer2)))
+(newline)
+
+(display "multiplier as floats: ")
+(display (bytevector-to-floats (get-multiplier)))
+(newline)
+
(display "result as floats: ")
(display (bytevector-to-floats (get-result)))
(newline)