break simd intrinsics into a separate vocab so they can be intrinsified before the simd methods compile

db4
Joe Groff 2009-11-19 11:53:46 -08:00
parent 736be27162
commit 152b0d2df5
5 changed files with 27 additions and 85 deletions

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien alien.c-types byte-arrays fry USING: accessors alien alien.c-types byte-arrays fry
classes.algebra cpu.architecture kernel math sequences classes.algebra cpu.architecture kernel math sequences
math.vectors math.vectors.simd math.vectors.simd.private math.vectors math.vectors.simd.intrinsics
macros generalizations combinators combinators.short-circuit macros generalizations combinators combinators.short-circuit
arrays locals compiler.tree.propagation.info arrays locals compiler.tree.propagation.info
compiler.cfg.builder.blocks compiler.cfg.builder.blocks

View File

@ -4,7 +4,7 @@ USING: accessors combinators combinators.short-circuit arrays
fry kernel layouts math namespaces sequences cpu.architecture fry kernel layouts math namespaces sequences cpu.architecture
math.bitwise math.order classes math.bitwise math.order classes
vectors locals make alien.c-types io.binary grouping vectors locals make alien.c-types io.binary grouping
math.vectors.simd math.vectors.simd.intrinsics
compiler.cfg compiler.cfg
compiler.cfg.registers compiler.cfg.registers
compiler.cfg.comparisons compiler.cfg.comparisons

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors byte-arrays combinators fry sequences USING: accessors byte-arrays combinators fry sequences
compiler.tree.propagation.info cpu.architecture kernel words math compiler.tree.propagation.info cpu.architecture kernel words math
math.intervals math.vectors.simd math.vectors.simd.private ; math.intervals math.vectors.simd.intrinsics ;
IN: compiler.tree.propagation.simd IN: compiler.tree.propagation.simd
{ {

View File

@ -1,6 +1,6 @@
! Copyright (C) 2006, 2009 Slava Pestov. ! Copyright (C) 2006, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs generic kernel kernel.private USING: accessors alien.c-types arrays assocs generic kernel kernel.private
math memory namespaces make sequences layouts system hashtables math memory namespaces make sequences layouts system hashtables
classes alien byte-arrays combinators words sets fry ; classes alien byte-arrays combinators words sets fry ;
IN: cpu.architecture IN: cpu.architecture
@ -160,6 +160,9 @@ M: ulonglong-scalar-rep rep-size drop 8 ;
GENERIC: rep-component-type ( rep -- n ) GENERIC: rep-component-type ( rep -- n )
: rep-length ( rep -- n )
16 swap rep-component-type heap-size /i ; foldable
! Methods defined in alien.c-types ! Methods defined in alien.c-types
GENERIC: scalar-rep-of ( rep -- rep' ) GENERIC: scalar-rep-of ( rep -- rep' )

View File

@ -1,18 +1,12 @@
USING: accessors alien.c-types arrays byte-arrays classes combinators USING: accessors alien.c-types arrays byte-arrays classes combinators
cpu.architecture effects fry functors generalizations generic cpu.architecture effects fry functors generalizations generic
generic.parser kernel lexer literals macros math math.functions generic.parser kernel lexer literals macros math math.functions
math.vectors math.vectors.private namespaces parser math.vectors math.vectors.private math.vectors.simd.intrinsics namespaces parser
prettyprint.custom quotations sequences sequences.private vocabs prettyprint.custom quotations sequences sequences.private vocabs
vocabs.loader words ; vocabs.loader words ;
QUALIFIED-WITH: alien.c-types c QUALIFIED-WITH: alien.c-types c
IN: math.vectors.simd IN: math.vectors.simd
DEFER: vconvert
DEFER: simd-with
DEFER: simd-boa
DEFER: simd-cast
ERROR: bad-simd-call word ;
ERROR: bad-simd-length got expected ; ERROR: bad-simd-length got expected ;
<< <<
@ -30,68 +24,6 @@ PRIVATE>
<PRIVATE <PRIVATE
! SIMD intrinsics
: (simd-v+) ( a b rep -- c ) \ v+ bad-simd-call ;
: (simd-v-) ( a b rep -- c ) \ v- bad-simd-call ;
: (simd-vneg) ( a rep -- c ) \ vneg bad-simd-call ;
: (simd-v+-) ( a b rep -- c ) \ v+- bad-simd-call ;
: (simd-vs+) ( a b rep -- c ) \ vs+ bad-simd-call ;
: (simd-vs-) ( a b rep -- c ) \ vs- bad-simd-call ;
: (simd-vs*) ( a b rep -- c ) \ vs* bad-simd-call ;
: (simd-v*) ( a b rep -- c ) \ v* bad-simd-call ;
: (simd-v/) ( a b rep -- c ) \ v/ bad-simd-call ;
: (simd-vmin) ( a b rep -- c ) \ vmin bad-simd-call ;
: (simd-vmax) ( a b rep -- c ) \ vmax bad-simd-call ;
: (simd-v.) ( a b rep -- n ) \ v. bad-simd-call ;
: (simd-vsqrt) ( a rep -- c ) \ vsqrt bad-simd-call ;
: (simd-sum) ( a rep -- n ) \ sum bad-simd-call ;
: (simd-vabs) ( a rep -- c ) \ vabs bad-simd-call ;
: (simd-vbitand) ( a b rep -- c ) \ vbitand bad-simd-call ;
: (simd-vbitandn) ( a b rep -- c ) \ vbitandn bad-simd-call ;
: (simd-vbitor) ( a b rep -- c ) \ vbitor bad-simd-call ;
: (simd-vbitxor) ( a b rep -- c ) \ vbitxor bad-simd-call ;
: (simd-vbitnot) ( a rep -- c ) \ vbitnot bad-simd-call ;
: (simd-vand) ( a b rep -- c ) \ vand bad-simd-call ;
: (simd-vandn) ( a b rep -- c ) \ vandn bad-simd-call ;
: (simd-vor) ( a b rep -- c ) \ vor bad-simd-call ;
: (simd-vxor) ( a b rep -- c ) \ vxor bad-simd-call ;
: (simd-vnot) ( a rep -- c ) \ vnot bad-simd-call ;
: (simd-vlshift) ( a n rep -- c ) \ vlshift bad-simd-call ;
: (simd-vrshift) ( a n rep -- c ) \ vrshift bad-simd-call ;
: (simd-hlshift) ( a n rep -- c ) \ hlshift bad-simd-call ;
: (simd-hrshift) ( a n rep -- c ) \ hrshift bad-simd-call ;
: (simd-vshuffle-elements) ( a n rep -- c ) \ vshuffle-elements bad-simd-call ;
: (simd-vshuffle-bytes) ( a b rep -- c ) \ vshuffle-bytes bad-simd-call ;
: (simd-vmerge-head) ( a b rep -- c ) \ (vmerge-head) bad-simd-call ;
: (simd-vmerge-tail) ( a b rep -- c ) \ (vmerge-tail) bad-simd-call ;
: (simd-v<=) ( a b rep -- c ) \ v<= bad-simd-call ;
: (simd-v<) ( a b rep -- c ) \ v< bad-simd-call ;
: (simd-v=) ( a b rep -- c ) \ v= bad-simd-call ;
: (simd-v>) ( a b rep -- c ) \ v> bad-simd-call ;
: (simd-v>=) ( a b rep -- c ) \ v>= bad-simd-call ;
: (simd-vunordered?) ( a b rep -- c ) \ vunordered? bad-simd-call ;
: (simd-vany?) ( a rep -- ? ) \ vany? bad-simd-call ;
: (simd-vall?) ( a rep -- ? ) \ vall? bad-simd-call ;
: (simd-vnone?) ( a rep -- ? ) \ vnone? bad-simd-call ;
: (simd-v>float) ( a rep -- c ) \ vconvert bad-simd-call ;
: (simd-v>integer) ( a rep -- c ) \ vconvert bad-simd-call ;
: (simd-vpack-signed) ( a b rep -- c ) \ vconvert bad-simd-call ;
: (simd-vpack-unsigned) ( a b rep -- c ) \ vconvert bad-simd-call ;
: (simd-vunpack-head) ( a rep -- c ) \ vconvert bad-simd-call ;
: (simd-vunpack-tail) ( a rep -- c ) \ vconvert bad-simd-call ;
: (simd-with) ( n rep -- v ) \ simd-with bad-simd-call ;
: (simd-gather-2) ( m n rep -- v ) \ simd-boa bad-simd-call ;
: (simd-gather-4) ( m n o p rep -- v ) \ simd-boa bad-simd-call ;
: (simd-select) ( a n rep -- n ) \ nth bad-simd-call ;
PRIVATE>
: alien-vector ( c-ptr n rep -- value ) \ alien-vector bad-simd-call ;
: set-alien-vector ( value c-ptr n rep -- ) \ set-alien-vector bad-simd-call ;
<PRIVATE
! Helper for boolean vector literals ! Helper for boolean vector literals
: vector-true-value ( class -- value ) : vector-true-value ( class -- value )
@ -117,13 +49,6 @@ TUPLE: simd-128
GENERIC: simd-element-type ( obj -- c-type ) GENERIC: simd-element-type ( obj -- c-type )
GENERIC: simd-rep ( simd -- rep ) GENERIC: simd-rep ( simd -- rep )
<<
: assert-positive ( x -- y ) ;
: rep-length ( rep -- n )
16 swap rep-component-type heap-size /i ; foldable
>>
<< <<
<PRIVATE <PRIVATE
@ -216,7 +141,25 @@ M: A like drop dup \ A instance? [ >A ] unless ; inline
M: A hashcode* underlying>> hashcode* ; inline M: A hashcode* underlying>> hashcode* ; inline
M: A clone [ clone ] change-underlying ; inline M: A clone [ clone ] change-underlying ; inline
M: A length drop N ; inline M: A length drop N ; inline
M: A nth-unsafe swap \ A-rep (simd-select) ; inline M: A nth-unsafe
swap {
{ 0 [ 0 \ A-rep (simd-select) ] }
{ 1 [ 1 \ A-rep (simd-select) ] }
{ 2 [ 2 \ A-rep (simd-select) ] }
{ 3 [ 3 \ A-rep (simd-select) ] }
{ 4 [ 4 \ A-rep (simd-select) ] }
{ 5 [ 5 \ A-rep (simd-select) ] }
{ 6 [ 6 \ A-rep (simd-select) ] }
{ 7 [ 7 \ A-rep (simd-select) ] }
{ 8 [ 8 \ A-rep (simd-select) ] }
{ 9 [ 9 \ A-rep (simd-select) ] }
{ 10 [ 10 \ A-rep (simd-select) ] }
{ 11 [ 11 \ A-rep (simd-select) ] }
{ 12 [ 12 \ A-rep (simd-select) ] }
{ 13 [ 13 \ A-rep (simd-select) ] }
{ 14 [ 14 \ A-rep (simd-select) ] }
{ 15 [ 15 \ A-rep (simd-select) ] }
} case ; inline
M: A c:byte-length drop 16 ; inline M: A c:byte-length drop 16 ; inline
M: A new-sequence M: A new-sequence
@ -353,10 +296,6 @@ SIMD-128: double-2
M: simd-128 vshuffle ( u perm -- v ) M: simd-128 vshuffle ( u perm -- v )
vshuffle-bytes ; inline vshuffle-bytes ; inline
"compiler.tree.propagation.simd" require
"compiler.cfg.intrinsics.simd" require
"compiler.cfg.value-numbering.simd" require
"mirrors" vocab [ "mirrors" vocab [
"math.vectors.simd.mirrors" require "math.vectors.simd.mirrors" require
] when ] when