4 (let ((arr1 (make-array 10 :element-type
'single-float
:initial-element
0f0
))
5 (arr2 (make-array 10 :element-type
'single-float
:initial-element
0f0
)))
7 (loop for i from
0 below
10
9 (aref arr1 i
) (float (* i
100))
10 (aref arr2 i
) (float i
)))
12 (format t
"Before: ~S~%~S~%" arr1 arr2
)
13 (format t
"b <- a + b, idx 0~%")
15 (sb-sys:%primitive sb-vm
::%sse-add
/simple-array-single-float-1 arr2 arr2 arr1
0)
17 (format t
"After: ~S~%~S~%" arr1 arr2
)
19 (format t
"a <- sqrt(b), idx 4~%")
21 (sb-sys:%primitive sb-vm
::%sse-sqrt
/simple-array-single-float-1 arr1 arr2
4)
23 (format t
"After: ~S~%~S~%" arr1 arr2
)
28 (let ((arr1 (make-array 16 :element-type
'(unsigned-byte 8) :initial-element
0))
29 (arr2 (make-array 16 :element-type
'(unsigned-byte 8) :initial-element
0)))
31 (loop for i from
0 below
16 do
(setf (aref arr1 i
) (* (1+ i
) 10)
32 (aref arr2 i
) (1+ i
)))
34 (format t
"Before: ~S~%~S~%" arr1 arr2
)
35 (format t
"b <- a+b, idx 4~%")
37 (sb-sys:%primitive sb-vm
::%sse-add
/simple-array-unsigned-byte-8-1 arr2 arr1 arr2
4)
39 (format t
"After: ~S~%~S~%" arr1 arr2
)