[Issue 3749] cannot evaluate yl2x (log) and exp functions at compile time

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jan 8 04:31:45 PST 2014


https://d.puremagic.com/issues/show_bug.cgi?id=3749



--- Comment #13 from Iain Buclaw <ibuclaw at ubuntu.com> 2014-01-08 04:31:41 PST ---
(In reply to comment #12)
> (In reply to comment #11)
> > (In reply to comment #10)
> > > What's the state of this?
> > > Having log/exp functions at compile time would be very useful, e.g. to
> > > pregenerate scientific tables.
> > 
> > std.math now has pure generic implementations.
> > 
> > One of the main problems holding CTFE support back is that there is no
> > straightforward way to do math operations such as isNaN, isInfinity, signbit,
> > frexp which require access (and for some, manipulation) of the bits in float
> > types.
> 
> We had the same issue with hashOf in druntime and now there is a huge machinery
> to compute exponent and mantissa.
> Could we allow to read specific floating point values through intrinsics at
> compile time?
> Something like exponent(float), signbit(float), mantissa(float)?
> 



> > Saying that, DMD has a problem that GDC doesn't - it uses the IASM
> > implementations of std.math functions that can't be evaluated at compile time.
> 
> How do you treat std.math.log at runtime as intrinsic or does it run the same
> code? Is there a performance penalty?

We don't implement y2lx in GDC, so it uses the !INLINE_Y2LX implemenatation. :)

If you instead meant eg: std.math.sin, this is the process (approximately).

User code (import std.math)
-> Compiler registers real sin() as BUILT_IN_FRONTEND

User code calls std.math.sin
-> CTFE sees function is BUILTINsin and calls eval_builtin()
-> eval_builtin generates call to BUILT_IN_SINL and then calls fold_builtin() 
-> fold_builtin validates input parameters and calls mpfr_sin()
-> Returns MPFR evaluated value to fold_builtin as GCC tree.
-> Returns GCC tree to eval_builtin which converts it to RealExp value.

Compiler unable to fold builtin
-> Returns CallExp to C math lib function sin()

It's a long winded way, and I'd like to ideally skip passing through the
middle-end and call MPFR directly. :)

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list