compiler.cfg.intrinsics.simd.backend: eliminate duplicated work done on successful insn sequence
parent
ee4913702f
commit
f82a368602
|
@ -66,24 +66,27 @@ M: ##horizontal-shr-vector-imm insn-available? rep>> %horizontal-shr-vector-imm-
|
|||
|
||||
GENERIC# >vector-op-cond 2 ( quot #pick #dup -- quotpair )
|
||||
M:: callable >vector-op-cond ( quot #pick #dup -- quotpair )
|
||||
#dup quot '[ _ ndup [ @ drop ] { } make [ insn-available? ] all? ] quot 2array ;
|
||||
#dup quot '[ 2drop _ ndup [ @ ] { } make dup [ insn-available? ] all? ]
|
||||
#dup '[ % _ nnip ]
|
||||
2array ;
|
||||
|
||||
M:: pair >vector-op-cond ( pair #pick #dup -- quotpair )
|
||||
pair first2 :> ( class quot )
|
||||
#pick class #dup quot
|
||||
'[ _ npick _ instance? [ _ ndup [ @ drop ] { } make [ insn-available? ] all? ] [ f ] if ]
|
||||
quot 2array ;
|
||||
'[ 2drop _ npick _ instance? [ _ ndup [ @ ] { } make dup [ insn-available? ] all? ] [ f f f ] if ]
|
||||
#dup '[ % _ nnip ]
|
||||
2array ;
|
||||
|
||||
MACRO: v-vector-op ( trials -- )
|
||||
[ 1 2 >vector-op-cond ] map '[ _ cond ] ;
|
||||
[ 1 2 >vector-op-cond ] map '[ f f _ cond ] ;
|
||||
MACRO: vl-vector-op ( trials -- )
|
||||
[ 1 3 >vector-op-cond ] map '[ _ cond ] ;
|
||||
[ 1 3 >vector-op-cond ] map '[ f f _ cond ] ;
|
||||
MACRO: vv-vector-op ( trials -- )
|
||||
[ 1 3 >vector-op-cond ] map '[ _ cond ] ;
|
||||
[ 1 3 >vector-op-cond ] map '[ f f _ cond ] ;
|
||||
MACRO: vv-cc-vector-op ( trials -- )
|
||||
[ 2 4 >vector-op-cond ] map '[ _ cond ] ;
|
||||
[ 2 4 >vector-op-cond ] map '[ f f _ cond ] ;
|
||||
MACRO: vvvv-vector-op ( trials -- )
|
||||
[ 1 5 >vector-op-cond ] map '[ _ cond ] ;
|
||||
[ 1 5 >vector-op-cond ] map '[ f f _ cond ] ;
|
||||
|
||||
! Intrinsic code emission
|
||||
|
||||
|
|
Loading…
Reference in New Issue