1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors byte-arrays fry cpu.architecture kernel
4 sequences compiler.tree.propagation.info
5 compiler.cfg.builder.blocks compiler.cfg.stacks
6 compiler.cfg.stacks.local compiler.cfg.hats
7 compiler.cfg.instructions compiler.cfg.registers
8 compiler.cfg.intrinsics.alien ;
9 IN: compiler.cfg.intrinsics.simd
11 : emit-vector-op ( node quot: ( rep -- ) -- )
12 [ dup node-input-infos last literal>> ] dip over representation?
13 [ [ drop ] 2dip call ] [ 2drop emit-primitive ] if ; inline
15 : emit-binary-vector-op ( node quot -- )
16 '[ [ ds-drop 2inputs ] dip @ ds-push ] emit-vector-op ; inline
18 : emit-unary-vector-op ( node quot -- )
19 '[ [ ds-drop ds-pop ] dip @ ds-push ] emit-vector-op ; inline
21 : emit-gather-vector-2 ( node -- )
22 [ ^^gather-vector-2 ] emit-binary-vector-op ;
24 : emit-gather-vector-4 ( node -- )
38 : emit-alien-vector ( node -- )
41 ds-drop prepare-alien-getter
42 _ ^^alien-vector ds-push
44 [ inline-alien-getter? ] inline-alien
45 ] with emit-vector-op ;
47 : emit-set-alien-vector ( node -- )
50 ds-drop prepare-alien-setter ds-pop
53 [ byte-array inline-alien-setter? ]
55 ] with emit-vector-op ;