]> git.vouivredigital.com Git - vouivre.git/commitdiff
Fix Load Buffer simd
authorPhilip Solobay <maximus242@gmail.com>
Fri, 13 Sep 2024 15:07:09 +0000 (10:07 -0500)
committeradmin <admin@vouivredigital.com>
Fri, 13 Sep 2024 15:11:57 +0000 (00:11 +0900)
compiler/test_load_buffer.scm

index 16b7224070ae9af3ebd43ecd56ab58e71b1dd7ca..771f73a60bf544685423a4c3c08c7affa6d1d0a6 100644 (file)
@@ -1,8 +1,9 @@
 (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)