sever lingering dependencies on simd from compiler
parent
324889e2ac
commit
e323071c44
|
@ -7,7 +7,6 @@ compiler.cfg.intrinsics.alien
|
||||||
compiler.cfg.intrinsics.allot
|
compiler.cfg.intrinsics.allot
|
||||||
compiler.cfg.intrinsics.fixnum
|
compiler.cfg.intrinsics.fixnum
|
||||||
compiler.cfg.intrinsics.float
|
compiler.cfg.intrinsics.float
|
||||||
compiler.cfg.intrinsics.simd
|
|
||||||
compiler.cfg.intrinsics.slots
|
compiler.cfg.intrinsics.slots
|
||||||
compiler.cfg.intrinsics.misc
|
compiler.cfg.intrinsics.misc
|
||||||
compiler.cfg.comparisons ;
|
compiler.cfg.comparisons ;
|
||||||
|
@ -23,7 +22,6 @@ QUALIFIED: classes.tuple.private
|
||||||
QUALIFIED: math.private
|
QUALIFIED: math.private
|
||||||
QUALIFIED: math.integers.private
|
QUALIFIED: math.integers.private
|
||||||
QUALIFIED: math.floats.private
|
QUALIFIED: math.floats.private
|
||||||
QUALIFIED: math.vectors.simd.intrinsics
|
|
||||||
QUALIFIED: math.libm
|
QUALIFIED: math.libm
|
||||||
IN: compiler.cfg.intrinsics
|
IN: compiler.cfg.intrinsics
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors combinators combinators.short-circuit arrays
|
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 math.vectors.simd.intrinsics classes
|
math.bitwise math.order classes
|
||||||
vectors locals make alien.c-types io.binary grouping
|
vectors locals make alien.c-types io.binary grouping
|
||||||
compiler.cfg
|
compiler.cfg
|
||||||
compiler.cfg.registers
|
compiler.cfg.registers
|
||||||
|
@ -463,100 +463,9 @@ M: ##alien-signed-2 rewrite rewrite-alien-addressing ;
|
||||||
M: ##alien-signed-4 rewrite rewrite-alien-addressing ;
|
M: ##alien-signed-4 rewrite rewrite-alien-addressing ;
|
||||||
M: ##alien-float rewrite rewrite-alien-addressing ;
|
M: ##alien-float rewrite rewrite-alien-addressing ;
|
||||||
M: ##alien-double rewrite rewrite-alien-addressing ;
|
M: ##alien-double rewrite rewrite-alien-addressing ;
|
||||||
M: ##alien-vector rewrite rewrite-alien-addressing ;
|
|
||||||
M: ##set-alien-integer-1 rewrite rewrite-alien-addressing ;
|
M: ##set-alien-integer-1 rewrite rewrite-alien-addressing ;
|
||||||
M: ##set-alien-integer-2 rewrite rewrite-alien-addressing ;
|
M: ##set-alien-integer-2 rewrite rewrite-alien-addressing ;
|
||||||
M: ##set-alien-integer-4 rewrite rewrite-alien-addressing ;
|
M: ##set-alien-integer-4 rewrite rewrite-alien-addressing ;
|
||||||
M: ##set-alien-float rewrite rewrite-alien-addressing ;
|
M: ##set-alien-float rewrite rewrite-alien-addressing ;
|
||||||
M: ##set-alien-double rewrite rewrite-alien-addressing ;
|
M: ##set-alien-double rewrite rewrite-alien-addressing ;
|
||||||
M: ##set-alien-vector rewrite rewrite-alien-addressing ;
|
|
||||||
|
|
||||||
! Some lame constant folding for SIMD intrinsics. Eventually this
|
|
||||||
! should be redone completely.
|
|
||||||
|
|
||||||
: rewrite-shuffle-vector-imm ( insn expr -- insn' )
|
|
||||||
2dup [ rep>> ] bi@ eq? [
|
|
||||||
[ [ dst>> ] [ src>> vn>vreg ] bi* ]
|
|
||||||
[ [ shuffle>> ] bi@ nths ]
|
|
||||||
[ drop rep>> ]
|
|
||||||
2tri \ ##shuffle-vector-imm new-insn
|
|
||||||
] [ 2drop f ] if ;
|
|
||||||
|
|
||||||
: (fold-shuffle-vector-imm) ( shuffle bytes -- bytes' )
|
|
||||||
2dup length swap length /i group nths concat ;
|
|
||||||
|
|
||||||
: fold-shuffle-vector-imm ( insn expr -- insn' )
|
|
||||||
[ [ dst>> ] [ shuffle>> ] bi ] dip value>>
|
|
||||||
(fold-shuffle-vector-imm) \ ##load-constant new-insn ;
|
|
||||||
|
|
||||||
M: ##shuffle-vector-imm rewrite
|
|
||||||
dup src>> vreg>expr {
|
|
||||||
{ [ dup shuffle-vector-imm-expr? ] [ rewrite-shuffle-vector-imm ] }
|
|
||||||
{ [ dup reference-expr? ] [ fold-shuffle-vector-imm ] }
|
|
||||||
{ [ dup constant-expr? ] [ fold-shuffle-vector-imm ] }
|
|
||||||
[ 2drop f ]
|
|
||||||
} cond ;
|
|
||||||
|
|
||||||
: (fold-scalar>vector) ( insn bytes -- insn' )
|
|
||||||
[ [ dst>> ] [ rep>> rep-components ] bi ] dip <repetition> concat
|
|
||||||
\ ##load-constant new-insn ;
|
|
||||||
|
|
||||||
: fold-scalar>vector ( insn expr -- insn' )
|
|
||||||
value>> over rep>> {
|
|
||||||
{ float-4-rep [ float>bits 4 >le (fold-scalar>vector) ] }
|
|
||||||
{ double-2-rep [ double>bits 8 >le (fold-scalar>vector) ] }
|
|
||||||
[ [ untag-fixnum ] dip rep-component-type heap-size >le (fold-scalar>vector) ]
|
|
||||||
} case ;
|
|
||||||
|
|
||||||
M: ##scalar>vector rewrite
|
|
||||||
dup src>> vreg>expr dup constant-expr?
|
|
||||||
[ fold-scalar>vector ] [ 2drop f ] if ;
|
|
||||||
|
|
||||||
M: ##xor-vector rewrite
|
|
||||||
dup [ src1>> vreg>vn ] [ src2>> vreg>vn ] bi eq?
|
|
||||||
[ [ dst>> ] [ rep>> ] bi \ ##zero-vector new-insn ] [ drop f ] if ;
|
|
||||||
|
|
||||||
: vector-not? ( expr -- ? )
|
|
||||||
{
|
|
||||||
[ not-vector-expr? ]
|
|
||||||
[ {
|
|
||||||
[ xor-vector-expr? ]
|
|
||||||
[ [ src1>> ] [ src2>> ] bi [ vn>expr fill-vector-expr? ] either? ]
|
|
||||||
} 1&& ]
|
|
||||||
} 1|| ;
|
|
||||||
|
|
||||||
GENERIC: vector-not-src ( expr -- vreg )
|
|
||||||
M: not-vector-expr vector-not-src src>> vn>vreg ;
|
|
||||||
M: xor-vector-expr vector-not-src
|
|
||||||
dup src1>> vn>expr fill-vector-expr? [ src2>> ] [ src1>> ] if vn>vreg ;
|
|
||||||
|
|
||||||
M: ##and-vector rewrite
|
|
||||||
{
|
|
||||||
{ [ dup src1>> vreg>expr vector-not? ] [
|
|
||||||
{
|
|
||||||
[ dst>> ]
|
|
||||||
[ src1>> vreg>expr vector-not-src ]
|
|
||||||
[ src2>> ]
|
|
||||||
[ rep>> ]
|
|
||||||
} cleave \ ##andn-vector new-insn
|
|
||||||
] }
|
|
||||||
{ [ dup src2>> vreg>expr vector-not? ] [
|
|
||||||
{
|
|
||||||
[ dst>> ]
|
|
||||||
[ src2>> vreg>expr vector-not-src ]
|
|
||||||
[ src1>> ]
|
|
||||||
[ rep>> ]
|
|
||||||
} cleave \ ##andn-vector new-insn
|
|
||||||
] }
|
|
||||||
[ drop f ]
|
|
||||||
} cond ;
|
|
||||||
|
|
||||||
M: ##andn-vector rewrite
|
|
||||||
dup src1>> vreg>expr vector-not? [
|
|
||||||
{
|
|
||||||
[ dst>> ]
|
|
||||||
[ src1>> vreg>expr vector-not-src ]
|
|
||||||
[ src2>> ]
|
|
||||||
[ rep>> ]
|
|
||||||
} cleave \ ##and-vector new-insn
|
|
||||||
] [ drop f ] if ;
|
|
||||||
|
|
|
@ -0,0 +1,120 @@
|
||||||
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors combinators combinators.short-circuit arrays
|
||||||
|
fry kernel layouts math namespaces sequences cpu.architecture
|
||||||
|
math.bitwise math.order classes
|
||||||
|
vectors locals make alien.c-types io.binary grouping
|
||||||
|
math.vectors.simd
|
||||||
|
compiler.cfg
|
||||||
|
compiler.cfg.registers
|
||||||
|
compiler.cfg.comparisons
|
||||||
|
compiler.cfg.instructions
|
||||||
|
compiler.cfg.value-numbering.expressions
|
||||||
|
compiler.cfg.value-numbering.graph
|
||||||
|
compiler.cfg.value-numbering.rewrite
|
||||||
|
compiler.cfg.value-numbering.simplify ;
|
||||||
|
IN: compiler.cfg.value-numbering.simd
|
||||||
|
|
||||||
|
M: ##alien-vector rewrite rewrite-alien-addressing ;
|
||||||
|
M: ##set-alien-vector rewrite rewrite-alien-addressing ;
|
||||||
|
|
||||||
|
! Some lame constant folding for SIMD intrinsics. Eventually this
|
||||||
|
! should be redone completely.
|
||||||
|
|
||||||
|
: rewrite-shuffle-vector-imm ( insn expr -- insn' )
|
||||||
|
2dup [ rep>> ] bi@ eq? [
|
||||||
|
[ [ dst>> ] [ src>> vn>vreg ] bi* ]
|
||||||
|
[ [ shuffle>> ] bi@ nths ]
|
||||||
|
[ drop rep>> ]
|
||||||
|
2tri \ ##shuffle-vector-imm new-insn
|
||||||
|
] [ 2drop f ] if ;
|
||||||
|
|
||||||
|
: (fold-shuffle-vector-imm) ( shuffle bytes -- bytes' )
|
||||||
|
2dup length swap length /i group nths concat ;
|
||||||
|
|
||||||
|
: fold-shuffle-vector-imm ( insn expr -- insn' )
|
||||||
|
[ [ dst>> ] [ shuffle>> ] bi ] dip value>>
|
||||||
|
(fold-shuffle-vector-imm) \ ##load-constant new-insn ;
|
||||||
|
|
||||||
|
M: ##shuffle-vector-imm rewrite
|
||||||
|
dup src>> vreg>expr {
|
||||||
|
{ [ dup shuffle-vector-imm-expr? ] [ rewrite-shuffle-vector-imm ] }
|
||||||
|
{ [ dup reference-expr? ] [ fold-shuffle-vector-imm ] }
|
||||||
|
{ [ dup constant-expr? ] [ fold-shuffle-vector-imm ] }
|
||||||
|
[ 2drop f ]
|
||||||
|
} cond ;
|
||||||
|
|
||||||
|
: (fold-scalar>vector) ( insn bytes -- insn' )
|
||||||
|
[ [ dst>> ] [ rep>> rep-length ] bi ] dip <repetition> concat
|
||||||
|
\ ##load-constant new-insn ;
|
||||||
|
|
||||||
|
: fold-scalar>vector ( insn expr -- insn' )
|
||||||
|
value>> over rep>> {
|
||||||
|
{ float-4-rep [ float>bits 4 >le (fold-scalar>vector) ] }
|
||||||
|
{ double-2-rep [ double>bits 8 >le (fold-scalar>vector) ] }
|
||||||
|
[ [ untag-fixnum ] dip rep-component-type heap-size >le (fold-scalar>vector) ]
|
||||||
|
} case ;
|
||||||
|
|
||||||
|
M: ##scalar>vector rewrite
|
||||||
|
dup src>> vreg>expr dup constant-expr?
|
||||||
|
[ fold-scalar>vector ] [ 2drop f ] if ;
|
||||||
|
|
||||||
|
M: ##xor-vector rewrite
|
||||||
|
dup [ src1>> vreg>vn ] [ src2>> vreg>vn ] bi eq?
|
||||||
|
[ [ dst>> ] [ rep>> ] bi \ ##zero-vector new-insn ] [ drop f ] if ;
|
||||||
|
|
||||||
|
: vector-not? ( expr -- ? )
|
||||||
|
{
|
||||||
|
[ not-vector-expr? ]
|
||||||
|
[ {
|
||||||
|
[ xor-vector-expr? ]
|
||||||
|
[ [ src1>> ] [ src2>> ] bi [ vn>expr fill-vector-expr? ] either? ]
|
||||||
|
} 1&& ]
|
||||||
|
} 1|| ;
|
||||||
|
|
||||||
|
GENERIC: vector-not-src ( expr -- vreg )
|
||||||
|
M: not-vector-expr vector-not-src src>> vn>vreg ;
|
||||||
|
M: xor-vector-expr vector-not-src
|
||||||
|
dup src1>> vn>expr fill-vector-expr? [ src2>> ] [ src1>> ] if vn>vreg ;
|
||||||
|
|
||||||
|
M: ##and-vector rewrite
|
||||||
|
{
|
||||||
|
{ [ dup src1>> vreg>expr vector-not? ] [
|
||||||
|
{
|
||||||
|
[ dst>> ]
|
||||||
|
[ src1>> vreg>expr vector-not-src ]
|
||||||
|
[ src2>> ]
|
||||||
|
[ rep>> ]
|
||||||
|
} cleave \ ##andn-vector new-insn
|
||||||
|
] }
|
||||||
|
{ [ dup src2>> vreg>expr vector-not? ] [
|
||||||
|
{
|
||||||
|
[ dst>> ]
|
||||||
|
[ src2>> vreg>expr vector-not-src ]
|
||||||
|
[ src1>> ]
|
||||||
|
[ rep>> ]
|
||||||
|
} cleave \ ##andn-vector new-insn
|
||||||
|
] }
|
||||||
|
[ drop f ]
|
||||||
|
} cond ;
|
||||||
|
|
||||||
|
M: ##andn-vector rewrite
|
||||||
|
dup src1>> vreg>expr vector-not? [
|
||||||
|
{
|
||||||
|
[ dst>> ]
|
||||||
|
[ src1>> vreg>expr vector-not-src ]
|
||||||
|
[ src2>> ]
|
||||||
|
[ rep>> ]
|
||||||
|
} cleave \ ##and-vector new-insn
|
||||||
|
] [ drop f ] if ;
|
||||||
|
|
||||||
|
M: scalar>vector-expr simplify*
|
||||||
|
src>> vn>expr {
|
||||||
|
{ [ dup vector>scalar-expr? ] [ src>> ] }
|
||||||
|
[ drop f ]
|
||||||
|
} cond ;
|
||||||
|
|
||||||
|
M: shuffle-vector-imm-expr simplify*
|
||||||
|
[ src>> ] [ shuffle>> ] [ rep>> rep-length iota ] tri
|
||||||
|
sequence= [ drop f ] unless ;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008, 2009 Slava Pestov.
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel accessors combinators classes math layouts
|
USING: kernel accessors combinators classes math layouts
|
||||||
sequences math.vectors.simd.intrinsics
|
sequences
|
||||||
compiler.cfg.instructions
|
compiler.cfg.instructions
|
||||||
compiler.cfg.value-numbering.graph
|
compiler.cfg.value-numbering.graph
|
||||||
compiler.cfg.value-numbering.expressions ;
|
compiler.cfg.value-numbering.expressions ;
|
||||||
|
@ -130,16 +130,6 @@ M: box-displaced-alien-expr simplify*
|
||||||
[ 2drop f ]
|
[ 2drop f ]
|
||||||
} cond ;
|
} cond ;
|
||||||
|
|
||||||
M: scalar>vector-expr simplify*
|
|
||||||
src>> vn>expr {
|
|
||||||
{ [ dup vector>scalar-expr? ] [ src>> ] }
|
|
||||||
[ drop f ]
|
|
||||||
} cond ;
|
|
||||||
|
|
||||||
M: shuffle-vector-imm-expr simplify*
|
|
||||||
[ src>> ] [ shuffle>> ] [ rep>> rep-components iota ] tri
|
|
||||||
sequence= [ drop f ] unless ;
|
|
||||||
|
|
||||||
M: expr simplify* drop f ;
|
M: expr simplify* drop f ;
|
||||||
|
|
||||||
: simplify ( expr -- vn )
|
: simplify ( expr -- vn )
|
||||||
|
|
|
@ -4,7 +4,7 @@ cpu.architecture tools.test kernel math combinators.short-circuit
|
||||||
accessors sequences compiler.cfg.predecessors locals compiler.cfg.dce
|
accessors sequences compiler.cfg.predecessors locals compiler.cfg.dce
|
||||||
compiler.cfg.ssa.destruction compiler.cfg.loop-detection
|
compiler.cfg.ssa.destruction compiler.cfg.loop-detection
|
||||||
compiler.cfg.representations compiler.cfg assocs vectors arrays
|
compiler.cfg.representations compiler.cfg assocs vectors arrays
|
||||||
layouts literals namespaces alien ;
|
layouts literals namespaces alien compiler.cfg.value-numbering.simd ;
|
||||||
IN: compiler.cfg.value-numbering.tests
|
IN: compiler.cfg.value-numbering.tests
|
||||||
|
|
||||||
: trim-temps ( insns -- insns )
|
: trim-temps ( insns -- insns )
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
USING: math.vectors.simd mirrors ;
|
||||||
|
IN: math.vectors.simd.mirrors
|
||||||
|
INSTANCE: simd-128 enumerated-sequence
|
|
@ -320,7 +320,7 @@ M: simd-128 n+v [ simd-with ] keep v+ ; inline
|
||||||
M: simd-128 n-v [ simd-with ] keep v- ; inline
|
M: simd-128 n-v [ simd-with ] keep v- ; inline
|
||||||
M: simd-128 n*v [ simd-with ] keep v* ; inline
|
M: simd-128 n*v [ simd-with ] keep v* ; inline
|
||||||
M: simd-128 n/v [ simd-with ] keep v/ ; inline
|
M: simd-128 n/v [ simd-with ] keep v/ ; inline
|
||||||
M: simd-128 v+n over simd-with v+
|
M: simd-128 v+n over simd-with v+ ; inline
|
||||||
M: simd-128 v-n over simd-with v- ; inline
|
M: simd-128 v-n over simd-with v- ; inline
|
||||||
M: simd-128 v*n over simd-with v* ; inline
|
M: simd-128 v*n over simd-with v* ; inline
|
||||||
M: simd-128 v/n over simd-with v/ ; inline
|
M: simd-128 v/n over simd-with v/ ; inline
|
||||||
|
@ -336,3 +336,8 @@ M: simd-128 vshuffle ( u perm -- v )
|
||||||
|
|
||||||
"compiler.tree.propagation.simd" require
|
"compiler.tree.propagation.simd" require
|
||||||
"compiler.cfg.intrinsics.simd" require
|
"compiler.cfg.intrinsics.simd" require
|
||||||
|
"compiler.cfg.value-numbering.simd" require
|
||||||
|
|
||||||
|
"mirrors" vocab [
|
||||||
|
"math.vectors.simd.mirrors" require
|
||||||
|
] when
|
||||||
|
|
|
@ -97,7 +97,7 @@ M: object vbitor [ bitor ] 2map ;
|
||||||
GENERIC: vbitxor ( u v -- w )
|
GENERIC: vbitxor ( u v -- w )
|
||||||
M: object vbitxor [ bitxor ] 2map ;
|
M: object vbitxor [ bitxor ] 2map ;
|
||||||
GENERIC: vbitnot ( u -- w )
|
GENERIC: vbitnot ( u -- w )
|
||||||
M: object vbitnot [ bitnot ] 2map ;
|
M: object vbitnot [ bitnot ] map ;
|
||||||
|
|
||||||
GENERIC# vbroadcast 1 ( u n -- v )
|
GENERIC# vbroadcast 1 ( u n -- v )
|
||||||
M:: object vbroadcast ( u n -- v ) u length n u nth <repetition> u like ;
|
M:: object vbroadcast ( u n -- v ) u length n u nth <repetition> u like ;
|
||||||
|
@ -133,6 +133,7 @@ GENERIC: (vmerge-tail) ( u v -- t )
|
||||||
M: object (vmerge-tail) over length 2 /i '[ _ tail-slice ] bi@ [ zip ] keep concat-as ;
|
M: object (vmerge-tail) over length 2 /i '[ _ tail-slice ] bi@ [ zip ] keep concat-as ;
|
||||||
|
|
||||||
GENERIC: (vmerge) ( u v -- h t )
|
GENERIC: (vmerge) ( u v -- h t )
|
||||||
|
M: object (vmerge)
|
||||||
[ (vmerge-head) ] [ (vmerge-tail) ] 2bi ; inline
|
[ (vmerge-head) ] [ (vmerge-tail) ] 2bi ; inline
|
||||||
|
|
||||||
GENERIC: vmerge ( u v -- w )
|
GENERIC: vmerge ( u v -- w )
|
||||||
|
|
|
@ -4,5 +4,3 @@ USING: mirrors specialized-arrays math.vectors ;
|
||||||
IN: specialized-arrays.mirrors
|
IN: specialized-arrays.mirrors
|
||||||
|
|
||||||
INSTANCE: specialized-array enumerated-sequence
|
INSTANCE: specialized-array enumerated-sequence
|
||||||
INSTANCE: simd-128 enumerated-sequence
|
|
||||||
INSTANCE: simd-256 enumerated-sequence
|
|
||||||
|
|
|
@ -2,8 +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 alien.data alien.parser
|
USING: accessors alien alien.c-types alien.data alien.parser
|
||||||
assocs byte-arrays classes compiler.units functors kernel lexer
|
assocs byte-arrays classes compiler.units functors kernel lexer
|
||||||
libc math math.vectors math.vectors.private
|
libc math math.vectors math.vectors.private namespaces
|
||||||
math.vectors.specialization namespaces
|
|
||||||
parser prettyprint.custom sequences sequences.private strings
|
parser prettyprint.custom sequences sequences.private strings
|
||||||
summary vocabs vocabs.loader vocabs.parser vocabs.generated
|
summary vocabs vocabs.loader vocabs.parser vocabs.generated
|
||||||
words fry combinators make ;
|
words fry combinators make ;
|
||||||
|
@ -69,8 +68,6 @@ TUPLE: A
|
||||||
[ drop \ T bad-byte-array-length ] unless
|
[ drop \ T bad-byte-array-length ] unless
|
||||||
<direct-A> ; inline
|
<direct-A> ; inline
|
||||||
|
|
||||||
M: A new-underlying drop byte-array>A ;
|
|
||||||
|
|
||||||
M: A clone [ underlying>> clone ] [ length>> ] bi <direct-A> ; inline
|
M: A clone [ underlying>> clone ] [ length>> ] bi <direct-A> ; inline
|
||||||
|
|
||||||
M: A length length>> ; inline
|
M: A length length>> ; inline
|
||||||
|
@ -96,8 +93,6 @@ M: A resize
|
||||||
|
|
||||||
M: A byte-length length \ T heap-size * ; inline
|
M: A byte-length length \ T heap-size * ; inline
|
||||||
|
|
||||||
M: A element-type drop \ T ; inline
|
|
||||||
|
|
||||||
M: A direct-array-syntax drop \ A@ ;
|
M: A direct-array-syntax drop \ A@ ;
|
||||||
|
|
||||||
M: A pprint-delims drop \ A{ \ } ;
|
M: A pprint-delims drop \ A{ \ } ;
|
||||||
|
@ -109,8 +104,6 @@ SYNTAX: A@ scan-object scan-object <direct-A> suffix! ;
|
||||||
|
|
||||||
INSTANCE: A specialized-array
|
INSTANCE: A specialized-array
|
||||||
|
|
||||||
A T c-type-boxed-class f specialize-vector-words
|
|
||||||
|
|
||||||
;FUNCTOR
|
;FUNCTOR
|
||||||
|
|
||||||
GENERIC: (underlying-type) ( c-type -- c-type' )
|
GENERIC: (underlying-type) ( c-type -- c-type' )
|
||||||
|
|
Loading…
Reference in New Issue