Merge branch 'master' of git://factorcode.org/git/factor
commit
2d6e47d710
|
@ -250,10 +250,10 @@ M:: x86.32 %unbox-large-struct ( n c-type -- )
|
||||||
] with-aligned-stack ;
|
] with-aligned-stack ;
|
||||||
|
|
||||||
M: x86.32 %nest-stacks ( -- )
|
M: x86.32 %nest-stacks ( -- )
|
||||||
|
! Save current frame. See comment in vm/contexts.hpp
|
||||||
|
EAX stack-reg stack-frame get total-size>> 3 cells - [+] LEA
|
||||||
8 [
|
8 [
|
||||||
push-vm-ptr
|
push-vm-ptr
|
||||||
! Save current frame. See comment in vm/contexts.hpp
|
|
||||||
EAX stack-reg stack-frame get total-size>> [+] LEA
|
|
||||||
EAX PUSH
|
EAX PUSH
|
||||||
"nest_stacks" f %alien-invoke
|
"nest_stacks" f %alien-invoke
|
||||||
] with-aligned-stack ;
|
] with-aligned-stack ;
|
||||||
|
|
|
@ -283,8 +283,10 @@ simd new
|
||||||
{ { +vector+ +scalar+ -> +vector+ } A-vn->v-op }
|
{ { +vector+ +scalar+ -> +vector+ } A-vn->v-op }
|
||||||
{ { +vector+ +literal+ -> +vector+ } A-vn->v-op }
|
{ { +vector+ +literal+ -> +vector+ } A-vn->v-op }
|
||||||
{ { +vector+ +vector+ -> +scalar+ } A-vv->n-op }
|
{ { +vector+ +vector+ -> +scalar+ } A-vv->n-op }
|
||||||
|
{ { +vector+ +vector+ -> +boolean+ } A-vv->n-op }
|
||||||
{ { +vector+ -> +vector+ } A-v->v-op }
|
{ { +vector+ -> +vector+ } A-v->v-op }
|
||||||
{ { +vector+ -> +scalar+ } A-v->n-op }
|
{ { +vector+ -> +scalar+ } A-v->n-op }
|
||||||
|
{ { +vector+ -> +boolean+ } A-v->n-op }
|
||||||
{ { +vector+ -> +nonnegative+ } A-v->n-op }
|
{ { +vector+ -> +nonnegative+ } A-v->n-op }
|
||||||
} >>schema-wrappers
|
} >>schema-wrappers
|
||||||
(define-simd-128)
|
(define-simd-128)
|
||||||
|
|
|
@ -48,11 +48,6 @@ cpu x86? [
|
||||||
float-4{ 0 1 0 2 }
|
float-4{ 0 1 0 2 }
|
||||||
[ { float-4 } declare dup v+ underlying>> double-2 boa dup v+ ] compile-call
|
[ { float-4 } declare dup v+ underlying>> double-2 boa dup v+ ] compile-call
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
[ 33.0 ] [
|
|
||||||
double-2{ 1 2 } double-2{ 10 20 }
|
|
||||||
[ { double-2 double-2 } declare v+ underlying>> 3.0 float* ] compile-call
|
|
||||||
] unit-test
|
|
||||||
] when
|
] when
|
||||||
|
|
||||||
! Fuzz testing
|
! Fuzz testing
|
||||||
|
@ -193,22 +188,18 @@ CONSTANT: simd-classes
|
||||||
'[ first2 inputs _ _ check-vector-op ]
|
'[ first2 inputs _ _ check-vector-op ]
|
||||||
] dip check-optimizer ; inline
|
] dip check-optimizer ; inline
|
||||||
|
|
||||||
: approx= ( x y -- ? )
|
: (approx=) ( x y -- ? )
|
||||||
{
|
{
|
||||||
{ [ 2dup [ fp-nan? ] both? ] [ 2drop t ] }
|
{ [ 2dup [ fp-nan? ] both? ] [ 2drop t ] }
|
||||||
{ [ 2dup [ float? ] both? ] [ -1.e8 ~ ] }
|
{ [ 2dup [ fp-nan? ] either? ] [ 2drop f ] }
|
||||||
{ [ 2dup [ fp-infinity? ] either? ] [ fp-bitwise= ] }
|
{ [ 2dup [ fp-infinity? ] either? ] [ fp-bitwise= ] }
|
||||||
{ [ 2dup [ sequence? ] both? ] [
|
{ [ 2dup [ float? ] both? ] [ -1.e8 ~ ] }
|
||||||
[
|
|
||||||
{
|
|
||||||
{ [ 2dup [ fp-nan? ] both? ] [ 2drop t ] }
|
|
||||||
{ [ 2dup [ fp-infinity? ] either? ] [ fp-bitwise= ] }
|
|
||||||
{ [ 2dup [ fp-nan? ] either? not ] [ -1.e8 ~ ] }
|
|
||||||
} cond
|
|
||||||
] 2all?
|
|
||||||
] }
|
|
||||||
} cond ;
|
} cond ;
|
||||||
|
|
||||||
|
: approx= ( x y -- ? )
|
||||||
|
2dup [ sequence? ] both?
|
||||||
|
[ [ (approx=) ] 2all? ] [ (approx=) ] if ;
|
||||||
|
|
||||||
: exact= ( x y -- ? )
|
: exact= ( x y -- ? )
|
||||||
{
|
{
|
||||||
{ [ 2dup [ float? ] both? ] [ fp-bitwise= ] }
|
{ [ 2dup [ float? ] both? ] [ fp-bitwise= ] }
|
||||||
|
|
|
@ -7,13 +7,14 @@ namespaces assocs fry splitting classes.algebra generalizations
|
||||||
locals compiler.tree.propagation.info ;
|
locals compiler.tree.propagation.info ;
|
||||||
IN: math.vectors.specialization
|
IN: math.vectors.specialization
|
||||||
|
|
||||||
SYMBOLS: -> +vector+ +scalar+ +nonnegative+ +literal+ ;
|
SYMBOLS: -> +vector+ +scalar+ +boolean+ +nonnegative+ +literal+ ;
|
||||||
|
|
||||||
: signature-for-schema ( array-type elt-type schema -- signature )
|
: signature-for-schema ( array-type elt-type schema -- signature )
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
{ +vector+ [ drop ] }
|
{ +vector+ [ drop ] }
|
||||||
{ +scalar+ [ nip ] }
|
{ +scalar+ [ nip ] }
|
||||||
|
{ +boolean+ [ 2drop boolean ] }
|
||||||
{ +nonnegative+ [ nip ] }
|
{ +nonnegative+ [ nip ] }
|
||||||
{ +literal+ [ 2drop f ] }
|
{ +literal+ [ 2drop f ] }
|
||||||
} case
|
} case
|
||||||
|
@ -32,6 +33,7 @@ SYMBOLS: -> +vector+ +scalar+ +nonnegative+ +literal+ ;
|
||||||
{
|
{
|
||||||
{ +vector+ [ drop <class-info> ] }
|
{ +vector+ [ drop <class-info> ] }
|
||||||
{ +scalar+ [ nip <class-info> ] }
|
{ +scalar+ [ nip <class-info> ] }
|
||||||
|
{ +boolean+ [ 2drop boolean <class-info> ] }
|
||||||
{
|
{
|
||||||
+nonnegative+
|
+nonnegative+
|
||||||
[
|
[
|
||||||
|
@ -115,9 +117,9 @@ H{
|
||||||
{ v> { +vector+ +vector+ -> +vector+ } }
|
{ v> { +vector+ +vector+ -> +vector+ } }
|
||||||
{ v>= { +vector+ +vector+ -> +vector+ } }
|
{ v>= { +vector+ +vector+ -> +vector+ } }
|
||||||
{ vunordered? { +vector+ +vector+ -> +vector+ } }
|
{ vunordered? { +vector+ +vector+ -> +vector+ } }
|
||||||
{ vany? { +vector+ -> +scalar+ } }
|
{ vany? { +vector+ -> +boolean+ } }
|
||||||
{ vall? { +vector+ -> +scalar+ } }
|
{ vall? { +vector+ -> +boolean+ } }
|
||||||
{ vnone? { +vector+ -> +scalar+ } }
|
{ vnone? { +vector+ -> +boolean+ } }
|
||||||
}
|
}
|
||||||
|
|
||||||
PREDICATE: vector-word < word vector-words key? ;
|
PREDICATE: vector-word < word vector-words key? ;
|
||||||
|
|
|
@ -5,7 +5,7 @@ H{
|
||||||
{ deploy-c-types? f }
|
{ deploy-c-types? f }
|
||||||
{ deploy-unicode? f }
|
{ deploy-unicode? f }
|
||||||
{ deploy-io 2 }
|
{ deploy-io 2 }
|
||||||
{ deploy-reflection 2 }
|
{ deploy-reflection 1 }
|
||||||
{ "stop-after-last-window?" t }
|
{ "stop-after-last-window?" t }
|
||||||
{ deploy-word-props? f }
|
{ deploy-word-props? f }
|
||||||
{ deploy-math? t }
|
{ deploy-math? t }
|
||||||
|
|
Loading…
Reference in New Issue