]> gitweb.factorcode.org Git - factor.git/commitdiff
%compare-vector instruction (only does v= for now)
authorJoe Groff <arcata@gmail.com>
Thu, 1 Oct 2009 19:31:37 +0000 (14:31 -0500)
committerJoe Groff <arcata@gmail.com>
Thu, 1 Oct 2009 19:31:37 +0000 (14:31 -0500)
basis/compiler/cfg/instructions/instructions.factor
basis/compiler/cfg/intrinsics/intrinsics.factor
basis/compiler/codegen/codegen.factor
basis/compiler/tree/propagation/simd/simd.factor
basis/cpu/architecture/architecture.factor
basis/cpu/ppc/ppc.factor
basis/cpu/x86/x86.factor
basis/math/vectors/simd/intrinsics/intrinsics.factor
basis/math/vectors/specialization/specialization.factor

index aefa155ec59ad3c70ced2a7b10e970a7351ce00e..1494348179a2e430be18675f0ab1e21b287b5e0d 100644 (file)
@@ -297,6 +297,11 @@ def: dst
 use: src
 literal: shuffle rep ;
 
+PURE-INSN: ##compare-vector
+def: dst
+use: src1 src2
+literal: rep cc ;
+
 PURE-INSN: ##add-vector
 def: dst
 use: src1 src2
index 76dace1f2874f17635cc1b12cb27a1e520bc5eb9..0b565b686c7ba2772f5c67d98d26d4160ce1f229 100644 (file)
@@ -171,6 +171,7 @@ IN: compiler.cfg.intrinsics
         { math.vectors.simd.intrinsics:(simd-vbitandn) [ [ ^^andn-vector ] emit-binary-vector-op ] }
         { math.vectors.simd.intrinsics:(simd-vbitor) [ [ ^^or-vector ] emit-binary-vector-op ] }
         { math.vectors.simd.intrinsics:(simd-vbitxor) [ [ ^^xor-vector ] emit-binary-vector-op ] }
+        { math.vectors.simd.intrinsics:(simd-v=) [ [ cc= ^^compare-vector ] emit-binary-vector-op ] }
         { math.vectors.simd.intrinsics:(simd-vlshift) [ [ ^^shl-vector ] emit-binary-vector-op ] }
         { math.vectors.simd.intrinsics:(simd-vrshift) [ [ ^^shr-vector ] emit-binary-vector-op ] }
         { math.vectors.simd.intrinsics:(simd-hlshift) [ [ ^^horizontal-shl-vector ] emit-horizontal-shift ] }
index b0307f685dd8b3b4e7843096fd71846c3c6bea91..98d1041772ec0b3e0de1035c64db210e67e84ea2 100755 (executable)
@@ -166,6 +166,7 @@ CODEGEN: ##zero-vector %zero-vector
 CODEGEN: ##gather-vector-2 %gather-vector-2
 CODEGEN: ##gather-vector-4 %gather-vector-4
 CODEGEN: ##shuffle-vector %shuffle-vector
+CODEGEN: ##compare-vector %compare-vector
 CODEGEN: ##box-vector %box-vector
 CODEGEN: ##add-vector %add-vector
 CODEGEN: ##saturated-add-vector %saturated-add-vector
index e2c2b15f2de0db68550043bb54edaaffe35e5e3a..35ce810df0be9be2e402087d64953e3496b1f33e 100644 (file)
@@ -25,6 +25,7 @@ IN: compiler.tree.propagation.simd
     (simd-hlshift)
     (simd-hrshift)
     (simd-vshuffle)
+    (simd-v=)
     (simd-with)
     (simd-gather-2)
     (simd-gather-4)
index 3b1f57d08e97d6232f30e7701ca5bcf9ea4f456f..629579ab1e1ce5a291c1e26229dc5947f89313c7 100644 (file)
@@ -223,6 +223,7 @@ HOOK: %zero-vector cpu ( dst rep -- )
 HOOK: %gather-vector-2 cpu ( dst src1 src2 rep -- )
 HOOK: %gather-vector-4 cpu ( dst src1 src2 src3 src4 rep -- )
 HOOK: %shuffle-vector cpu ( dst src shuffle rep -- )
+HOOK: %compare-vector cpu ( dst src1 src2 rep cc -- )
 HOOK: %add-vector cpu ( dst src1 src2 rep -- )
 HOOK: %saturated-add-vector cpu ( dst src1 src2 rep -- )
 HOOK: %add-sub-vector cpu ( dst src1 src2 rep -- )
@@ -256,6 +257,7 @@ HOOK: %zero-vector-reps cpu ( -- reps )
 HOOK: %gather-vector-2-reps cpu ( -- reps )
 HOOK: %gather-vector-4-reps cpu ( -- reps )
 HOOK: %shuffle-vector-reps cpu ( -- reps )
+HOOK: %compare-vector-reps cpu ( -- reps )
 HOOK: %add-vector-reps cpu ( -- reps )
 HOOK: %saturated-add-vector-reps cpu ( -- reps )
 HOOK: %add-sub-vector-reps cpu ( -- reps )
index de37cd6ee33b5eee3f25a6153d1280ef823a3070..81064491c1542c4348431701f143f57df7eacf86 100644 (file)
@@ -267,6 +267,7 @@ M: ppc %zero-vector-reps { } ;
 M: ppc %gather-vector-2-reps { } ;
 M: ppc %gather-vector-4-reps { } ;
 M: ppc %shuffle-vector-reps { } ;
+M: ppc %compare-vector-reps { } ;
 M: ppc %add-vector-reps { } ;
 M: ppc %saturated-add-vector-reps { } ;
 M: ppc %add-sub-vector-reps { } ;
index 3c20064313bf922df2057ee6b5e2a6b6a1848de5..85fed02429c0d9ecca27394464339078aa22b15b 100644 (file)
@@ -725,6 +725,28 @@ M: x86 %shuffle-vector-reps
         { sse2? { double-2-rep int-4-rep uint-4-rep longlong-2-rep ulonglong-2-rep } }
     } available-reps ;
 
+: %compare-vector-equal ( dst src rep -- )
+    unsign-rep {
+        { double-2-rep   [ CMPEQPD ] }
+        { float-4-rep    [ CMPEQPS ] }
+        { longlong-2-rep [ PCMPEQQ ] }
+        { int-4-rep      [ PCMPEQD ] }
+        { short-8-rep    [ PCMPEQW ] }
+        { char-16-rep    [ PCMPEQB ] }
+    } case ;
+
+M: x86 %compare-vector ( dst src1 src2 rep cc -- )
+    [ [ two-operand ] keep ] dip {
+        { cc= [ %compare-vector-equal ] }
+    } case ;
+
+M: x86 %compare-vector-reps
+    {
+        { sse? { float-4-rep } }
+        { sse2? { double-2-rep char-16-rep uchar-16-rep short-8-rep ushort-8-rep int-4-rep uint-4-rep } }
+        { sse4.1? { longlong-2-rep ulonglong-2-rep } }
+    } available-reps ;
+
 M: x86 %add-vector ( dst src1 src2 rep -- )
     [ two-operand ] keep
     {
index 6008a208440db48d6212bf53484d866c6b48ed70..b5cb9cf63414777f63484dad9183a502fd56b907 100644 (file)
@@ -49,6 +49,7 @@ SIMD-OP: vrshift
 SIMD-OP: hlshift
 SIMD-OP: hrshift
 SIMD-OP: vshuffle
+SIMD-OP: v=
 
 : (simd-with) ( x rep -- v ) bad-simd-call ;
 : (simd-gather-2) ( a b rep -- v ) bad-simd-call ;
@@ -126,6 +127,7 @@ M: vector-rep supported-simd-op?
         { \ (simd-hlshift)  [ %horizontal-shl-vector-reps ] }
         { \ (simd-hrshift)  [ %horizontal-shr-vector-reps ] }
         { \ (simd-vshuffle) [ %shuffle-vector-reps        ] }
+        { \ (simd-v=)       [ %compare-vector-reps        ] }
         { \ (simd-gather-2) [ %gather-vector-2-reps       ] }
         { \ (simd-gather-4) [ %gather-vector-4-reps       ] }
     } case member? ;
index b07615bfc93974fbd64ec2ad691e8595cfab0810..e1a4c001537d0458d59f0f3383f34743b17a914f 100644 (file)
@@ -92,6 +92,7 @@ H{
     { hrshift { +vector+ +literal+ -> +vector+ } }
     { vshuffle { +vector+ +literal+ -> +vector+ } }
     { vbroadcast { +vector+ +literal+ -> +vector+ } }
+    { v= { +vector+ +vector+ -> +vector+ } }
 }
 
 PREDICATE: vector-word < word vector-words key? ;
@@ -162,4 +163,4 @@ ERROR: bad-vector-word word ;
 vector-words keys [
     [ vector-word-custom-inlining ]
     "custom-inlining" set-word-prop
-] each
\ No newline at end of file
+] each