blob: 06e6fb69c9d4c7865e9d7939320d8e13832f2237 (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
;; simde example (WIP)
(define %vec-a (vector-unfold (lambda (i)
(* i i))
5))
;; take vec-a's length at compile-time
(define %len-a (vector-length %vec-a))
(define foox
(external "computefoox" (=> (integer integer) integer)
(lambda (x y)
(display (+ x y)))))
(define (handle-error message)
(define out (current-error-port))
(error message))
;;(define-c-generator make-string #t
;; (lambda (call port indent)
;; ; calloc is used as a hack to get a zero at the end
;; (format port "(char *)calloc( 1, 1 + ")
;; (c-value (call-arg call 0) port)
;; (format port ")")))
;; gcvt (float value, int ndigits, char * buf);
(define (gcvt v ndigits buf)
((external "gcvt" (=> (float integer (^ char)) unit ) )
v ndigits buf))
(define-wrapper-type m256d)
;; (define (fmaddf a b c)
;; ((external "simde_mm256_fmadd_pd" (=> ((^ float) (^ float) (^ float)) (^ float) ) )
;; a b c))
;; simde__m256d evens4 = simde_mm256_loadu_pd(l1);
(define (simde-loadu ds)
((external "simde_mm256_loadu_pd" (=> ((^ float)) m256d))
ds ))
(define (simde-storeu ds avx)
((external "simde_mm256_storeu_pd" (=> ((^ float) m256d) (^ float)))
ds avx)
ds )
(define (simde-sub-pd ds1 ds2)
((external "simde_mm256_sub_pd" (=> (m256d m256d) m256d))
ds1 ds2))
(define (main)
(define out (current-output-port))
(write-string "SIMDE: Print vec-a with vector-for-each:\n" out)
(vector-for-each (lambda (i val)
(write-string " vec-a[" out)
(write-integer i out)
(write-string "] = " out)
(write-integer val out)
(write-string ", " out)
)
%vec-a %len-a)
(newline out)
(let ((target (make-string 20))
(f 1.2)
(a (make-vector 10 1.1))
(b (make-vector 10 1.1))
(c (make-vector 10 1.1))
)
(gcvt f 4 target)
(write-string target out)
(newline out)
(vector-set! a 0 2.2)
(vector-set! a 1 2.2)
(vector-set! a 2 4.2)
(vector-set! a 3 5.2)
(vector-set! b 0 1.1)
(vector-set! b 1 2.1)
(vector-set! b 2 3.1)
(vector-set! b 3 4.1)
(let* ((evens (simde-loadu a))
(odds (simde-loadu b))
(result (simde-storeu a (simde-sub-pd evens odds))))
(vector-for-each (lambda (i val)
;; (flonum-set! val i)
(gcvt val 4 target)
(write-string target out)
(newline out)
)
result 4)
)
)
(newline out)
0
)
|