math.libm: fix regression: fsqrt intrinsic was not working ever since change was made to inline FUNCTION: bodies

db4
Slava Pestov 2010-08-12 21:41:57 -07:00
parent 0c5a0ee058
commit 42b858b3f0
4 changed files with 33 additions and 11 deletions

View File

@ -161,13 +161,6 @@ IN: compiler.cfg.builder.tests
{ pinned-c-ptr class fixnum } \ set-alien-cell '[ _ declare _ execute ] unit-test-builder
] each
: count-insns ( quot insn-check -- ? )
[ test-regs [ post-order [ instructions>> ] map concat ] map concat ] dip
count ; inline
: contains-insn? ( quot insn-check -- ? )
count-insns 0 > ; inline
[ t ] [ [ swap ] [ ##replace? ] contains-insn? ] unit-test
[ f ] [ [ swap swap ] [ ##replace? ] contains-insn? ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (C) 2008, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel words sequences quotations namespaces io vectors
arrays hashtables classes.tuple accessors prettyprint
arrays hashtables classes.tuple math accessors prettyprint
prettyprint.config assocs prettyprint.backend prettyprint.custom
prettyprint.sections parser compiler.tree.builder
compiler.tree.optimizer cpu.architecture compiler.cfg.builder
@ -125,3 +125,10 @@ M: rs-loc pprint* \ R pprint-loc ;
bi append
] map concat
] map concat >hashtable representations set ;
: count-insns ( quot insn-check -- ? )
[ test-regs [ post-order [ instructions>> ] map concat ] map concat ] dip
count ; inline
: contains-insn? ( quot insn-check -- ? )
count-insns 0 > ; inline

View File

@ -0,0 +1,10 @@
IN: cpu.x86.tests
USING: cpu.x86.features tools.test math.libm kernel.private math
compiler.cfg.instructions compiler.cfg.debugger kernel ;
[ ] [
[ { float } declare fsqrt ]
[ ##sqrt? ] contains-insn?
sse2?
assert=
] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (C) 2006 Slava Pestov.
! Copyright (C) 2006, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types alien.syntax ;
USING: alien alien.c-types alien.syntax kernel words accessors ;
IN: math.libm
LIBRARY: libm
@ -49,7 +49,19 @@ FUNCTION-ALIAS: fpow
FUNCTION-ALIAS: fsqrt
double sqrt ( double x ) ;
! fsqrt has an intrinsic so we don't actually want to inline it
! unconditionally
<<
\ fsqrt f "inline" set-word-prop
\ fsqrt [
drop
\ fsqrt "intrinsic" word-prop
f \ fsqrt def>> ?
] "custom-inlining" set-word-prop
>>
! Windows doesn't have these...
FUNCTION-ALIAS: flog1+
double log1p ( double x ) ;