]> gitweb.factorcode.org Git - factor.git/commitdiff
math.vectors.simd.intrinsics: fix double-2 vcount
authorJoe Groff <arcata@gmail.com>
Sun, 13 Nov 2011 07:19:49 +0000 (23:19 -0800)
committerJoe Groff <arcata@gmail.com>
Mon, 14 Nov 2011 00:10:25 +0000 (16:10 -0800)
Turns out we use MOVMSKPS for double vectors too. Gotta save that extra instruction byte!

basis/math/vectors/simd/intrinsics/intrinsics.factor
basis/math/vectors/simd/simd.factor

index b8dbe6d1bdaa103f7d59aa22d8841d51a71fd3f9..28bd2f8f83802c77ae923d07626c4ca30abd5652 100644 (file)
@@ -266,8 +266,8 @@ SIMD-INTRINSIC: (simd-vany?)             ( a   rep -- ? ) [ bitor  ] bitwise-com
 SIMD-INTRINSIC: (simd-vall?)             ( a   rep -- ? ) [ bitand ] bitwise-components-reduce zero? not ;
 SIMD-INTRINSIC: (simd-vnone?)            ( a   rep -- ? ) [ bitor  ] bitwise-components-reduce zero?     ;
 SIMD-INTRINSIC: (simd-vgetmask)          ( a   rep -- n )
-    dup { float-4-rep double-2-rep } member?
-    [ ((vgetmask)) ] [ drop uchar-16-rep ((vgetmask)) ] if ;
+    { float-4-rep double-2-rep } member?
+    [ uint-4-rep ((vgetmask)) ] [ uchar-16-rep ((vgetmask)) ] if ;
 SIMD-INTRINSIC: (simd-v>float)           ( a   rep -- c )
     [ [ >rep-array ] [ rep-length ] bi [ >float ] ]
     [ >float-vector-rep <rep-array> ] bi unrolled-map-as-unsafe underlying>> ;
index a277c651a3cf1693dce974d63f1ac36c548e1ed9..432cca071815c153ae526a45c9605e7bab9ebc48 100644 (file)
@@ -113,7 +113,7 @@ DEFER: simd-construct-op
 : mask>count ( n rep -- n' )
     [ bit-count ] dip {
         { float-4-rep     [ ] }
-        { double-2-rep    [ ] }
+        { double-2-rep    [ -1 shift ] }
         { uchar-16-rep    [ ] }
         { char-16-rep     [ ] }
         { ushort-8-rep    [ -1 shift ] }