]> gitweb.factorcode.org Git - factor.git/commitdiff
math.vectors: change vlshift and vrshift to mask the shift count by HEX: ff, to make...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 25 Sep 2009 23:50:44 +0000 (18:50 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 25 Sep 2009 23:50:44 +0000 (18:50 -0500)
basis/math/vectors/vectors-tests.factor
basis/math/vectors/vectors.factor

index 529683188972a6727c6dd024f08e632119f40fff..712c5e4c6035aec10210f253709c91f04369fa71 100644 (file)
@@ -1,5 +1,7 @@
 IN: math.vectors.tests
-USING: math.vectors tools.test kernel ;
+USING: math.vectors tools.test kernel specialized-arrays compiler
+kernel.private ;
+SPECIALIZED-ARRAY: int
 
 [ { 1 2 3 } ] [ 1/2 { 2 4 6 } n*v ] unit-test
 [ { 1 2 3 } ] [ { 2 4 6 } 1/2 v*n ] unit-test
@@ -21,4 +23,12 @@ USING: math.vectors tools.test kernel ;
 
 [ { 0 3 2 5 4 } ] [ { 1 2 3 4 5 } { 1 1 1 1 1 } v+- ] unit-test
 
-[ 1 ] [ { C{ 0 1 } } dup v. ] unit-test
\ No newline at end of file
+[ 1 ] [ { C{ 0 1 } } dup v. ] unit-test
+
+! Make sure vector shifts behave the same as hardware SIMD vector shifts
+[ int-array{ 0 0 0 0 } ] [ int-array{ 10 20 30 40 } -1 vlshift ] unit-test
+
+[ int-array{ 0 0 0 0 } ] [
+    int-array{ 10 20 30 40 }
+    [ { int-array } declare -1 vlshift ] compile-call
+] unit-test
\ No newline at end of file
index a40506f98014f82cc9f99e9b45710a9dc346aec8..1bd202f2ad28a825ef6b8c8b789d3d495d7ef12e 100644 (file)
@@ -61,8 +61,8 @@ PRIVATE>
 : vbitor ( u v -- w ) over '[ _ [ bitor ] fp-bitwise-op ] 2map ;
 : vbitxor ( u v -- w ) over '[ _ [ bitxor ] fp-bitwise-op ] 2map ;
 
-: vlshift ( u n -- w ) '[ _ shift ] map ;
-: vrshift ( u n -- w ) neg '[ _ shift ] map ;
+: vlshift ( u n -- w ) HEX: ff bitand '[ _ shift ] map ;
+: vrshift ( u n -- w ) HEX: ff bitand neg '[ _ shift ] map ;
 
 : vfloor    ( u -- v ) [ floor ] map ;
 : vceiling  ( u -- v ) [ ceiling ] map ;