Front end infrastructure for short vector SIMD packs
[sbcl.git] / src / compiler / generic / vm-fndb.lisp
index c988c25..37273c1 100644 (file)
 (defknown make-value-cell (t) t
   (flushable movable))
 
+#!+sb-simd-pack
+(progn
+  (defknown simd-pack-p (t) boolean (foldable movable flushable))
+  (defknown %simd-pack-tag (simd-pack) fixnum (movable flushable))
+  (defknown %make-simd-pack (fixnum (unsigned-byte 64) (unsigned-byte 64))
+      simd-pack
+      (flushable movable foldable))
+  (defknown %make-simd-pack-double (double-float double-float)
+      (simd-pack double-float)
+      (flushable movable foldable))
+  (defknown %make-simd-pack-single (single-float single-float
+                                    single-float single-float)
+      (simd-pack single-float)
+      (flushable movable foldable))
+  (defknown %make-simd-pack-ub32 ((unsigned-byte 32) (unsigned-byte 32)
+                                  (unsigned-byte 32) (unsigned-byte 32))
+      (simd-pack integer)
+      (flushable movable foldable))
+  (defknown %make-simd-pack-ub64 ((unsigned-byte 64) (unsigned-byte 64))
+      (simd-pack integer)
+      (flushable movable foldable))
+  (defknown (%simd-pack-low %simd-pack-high) (simd-pack)
+      (unsigned-byte 64)
+      (flushable movable foldable))
+  (defknown %simd-pack-ub32s (simd-pack)
+      (values (unsigned-byte 32) (unsigned-byte 32)
+              (unsigned-byte 32) (unsigned-byte 32))
+      (flushable movable foldable))
+  (defknown %simd-pack-ub64s (simd-pack)
+      (values (unsigned-byte 64) (unsigned-byte 64))
+      (flushable movable foldable))
+  (defknown %simd-pack-singles (simd-pack)
+      (values single-float single-float single-float single-float)
+      (flushable movable foldable))
+  (defknown %simd-pack-doubles (simd-pack)
+      (values double-float double-float)
+      (flushable movable foldable)))
+
 ;;;; threading
 
 (defknown (dynamic-space-free-pointer binding-stack-pointer-sap