2009-09-03 03:33:07 -04:00
|
|
|
! Copyright (C) 2009 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2009-09-20 18:43:16 -04:00
|
|
|
USING: accessors byte-arrays combinators fry sequences
|
2009-09-03 03:33:07 -04:00
|
|
|
compiler.tree.propagation.info cpu.architecture kernel words math
|
2009-09-03 04:43:43 -04:00
|
|
|
math.intervals math.vectors.simd.intrinsics ;
|
2009-09-03 03:33:07 -04:00
|
|
|
IN: compiler.tree.propagation.simd
|
|
|
|
|
2009-09-20 18:43:16 -04:00
|
|
|
{
|
|
|
|
(simd-v+)
|
|
|
|
(simd-v-)
|
|
|
|
(simd-v+-)
|
|
|
|
(simd-v*)
|
|
|
|
(simd-v/)
|
|
|
|
(simd-vmin)
|
|
|
|
(simd-vmax)
|
2009-09-23 03:46:54 -04:00
|
|
|
(simd-sum)
|
|
|
|
(simd-vabs)
|
2009-09-20 18:43:16 -04:00
|
|
|
(simd-vsqrt)
|
2009-09-23 03:46:54 -04:00
|
|
|
(simd-vbitand)
|
2009-09-28 03:17:46 -04:00
|
|
|
(simd-vbitandn)
|
2009-09-23 03:46:54 -04:00
|
|
|
(simd-vbitor)
|
|
|
|
(simd-vbitxor)
|
2009-09-24 07:58:33 -04:00
|
|
|
(simd-vlshift)
|
|
|
|
(simd-vrshift)
|
2009-09-28 03:17:46 -04:00
|
|
|
(simd-hlshift)
|
|
|
|
(simd-hrshift)
|
2009-09-20 18:43:16 -04:00
|
|
|
(simd-broadcast)
|
|
|
|
(simd-gather-2)
|
|
|
|
(simd-gather-4)
|
|
|
|
alien-vector
|
|
|
|
} [ { byte-array } "default-output-classes" set-word-prop ] each
|
2009-09-03 03:33:07 -04:00
|
|
|
|
|
|
|
\ (simd-sum) [
|
|
|
|
nip dup literal?>> [
|
|
|
|
literal>> scalar-rep-of {
|
2009-09-03 21:58:56 -04:00
|
|
|
{ float-rep [ float ] }
|
|
|
|
{ double-rep [ float ] }
|
2009-09-24 04:32:39 -04:00
|
|
|
[ integer ]
|
2009-09-03 03:33:07 -04:00
|
|
|
} case
|
|
|
|
] [ drop real ] if
|
|
|
|
<class-info>
|
|
|
|
] "outputs" set-word-prop
|
|
|
|
|
|
|
|
\ assert-positive [
|
|
|
|
real [0,inf] <class/interval-info> value-info-intersect
|
|
|
|
] "outputs" set-word-prop
|
|
|
|
|
2009-09-08 14:56:17 -04:00
|
|
|
! If SIMD is not available, inline alien-vector and set-alien-vector
|
|
|
|
! to get a speedup
|
|
|
|
: inline-unless-intrinsic ( word -- )
|
|
|
|
dup '[ drop _ dup "intrinsic" word-prop [ drop f ] [ def>> ] if ]
|
|
|
|
"custom-inlining" set-word-prop ;
|
|
|
|
|
|
|
|
\ alien-vector inline-unless-intrinsic
|
|
|
|
|
|
|
|
\ set-alien-vector inline-unless-intrinsic
|