]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/math/vectors/simd/simd.factor
More integer SIMD work
[factor.git] / basis / math / vectors / simd / simd.factor
index c5e7d6f75d3feef73e82d72dad89092f3ce1f0c8..fe043032b87064d5cfcc6416d44d9879168107f4 100644 (file)
@@ -1,15 +1,32 @@
 ! Copyright (C) 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types cpu.architecture kernel
-math.vectors.simd.functor vocabs.loader ;
-FROM: sequences => each ;
+USING: alien.c-types combinators fry kernel lexer math math.parser
+math.vectors.simd.functor sequences splitting vocabs.generated
+vocabs.loader vocabs.parser words ;
 IN: math.vectors.simd
 
-<<
+ERROR: bad-vector-size bits ;
 
-{ double float char uchar short ushort int uint }
-[ [ define-simd-128 ] [ define-simd-256 ] bi ] each
+<PRIVATE
 
->>
+: simd-vocab ( type -- vocab )
+    "math.vectors.simd.instances." prepend ;
 
-"math.vectors.simd.alien" require
+: parse-simd-name ( string -- c-type quot )
+    "-" split1
+    [ "alien.c-types" lookup dup heap-size ] [ string>number ] bi*
+    * 8 * {
+        { 128 [ [ define-simd-128 ] ] }
+        { 256 [ [ define-simd-256 ] ] }
+        [ bad-vector-size ]
+    } case ;
+
+PRIVATE>
+
+: define-simd-vocab ( type -- vocab )
+    [ simd-vocab ]
+    [ '[ _ parse-simd-name call( type -- ) ] ] bi
+    generate-vocab ;
+
+SYNTAX: SIMD:
+    scan define-simd-vocab use-vocab ;