]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/tree/propagation/simd/simd.factor
3baa7cdcbf64409cc31185b940f98c1487f42409
[factor.git] / basis / compiler / tree / propagation / simd / simd.factor
1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors byte-arrays combinators fry
4 compiler.tree.propagation.info cpu.architecture kernel words math
5 math.intervals math.vectors.simd.intrinsics ;
6 IN: compiler.tree.propagation.simd
7
8 \ (simd-v+) { byte-array } "default-output-classes" set-word-prop
9
10 \ (simd-v-) { byte-array } "default-output-classes" set-word-prop
11
12 \ (simd-v*) { byte-array } "default-output-classes" set-word-prop
13
14 \ (simd-v/) { byte-array } "default-output-classes" set-word-prop
15
16 \ (simd-vmin) { byte-array } "default-output-classes" set-word-prop
17
18 \ (simd-vmax) { byte-array } "default-output-classes" set-word-prop
19
20 \ (simd-vsqrt) { byte-array } "default-output-classes" set-word-prop
21
22 \ (simd-sum) [
23     nip dup literal?>> [
24         literal>> scalar-rep-of {
25             { float-rep [ float ] }
26             { double-rep [ float ] }
27         } case
28     ] [ drop real ] if
29     <class-info>
30 ] "outputs" set-word-prop
31
32 \ (simd-broadcast) { byte-array } "default-output-classes" set-word-prop
33
34 \ (simd-gather-2) { byte-array } "default-output-classes" set-word-prop
35
36 \ (simd-gather-4) { byte-array } "default-output-classes" set-word-prop
37
38 \ assert-positive [
39     real [0,inf] <class/interval-info> value-info-intersect
40 ] "outputs" set-word-prop
41
42 \ alien-vector { byte-array } "default-output-classes" set-word-prop
43
44 ! If SIMD is not available, inline alien-vector and set-alien-vector
45 ! to get a speedup
46 : inline-unless-intrinsic ( word -- )
47     dup '[ drop _ dup "intrinsic" word-prop [ drop f ] [ def>> ] if ]
48     "custom-inlining" set-word-prop ;
49
50 \ alien-vector inline-unless-intrinsic
51
52 \ set-alien-vector inline-unless-intrinsic