Inlining asm functions

Brad Roberts braddr at bellevue.puremagic.com
Thu Jun 11 16:13:23 PDT 2009


On Thu, 11 Jun 2009, Frits van Bommel wrote:

> bearophile wrote:
> > creal expi(real y) {
> >     version (LDC) pragma(allow_inline);
> > 	asm {           		fld y;
> > 		fsincos;
> > 		fxch ST(1), ST(0);
> > 	}
> >     // add code here if asm isn't allowed
> > }
> > 
> Note that for LDC, an even more optimal arrangement is something like[1]:
> -----
> version(LDC)
>     import ldc.llvmasm;
> 
> creal expi(real y) {
>     return __asm!(creal)("fsincos", "={st(0)},={st(1)},0", y);
> }
> -----

My appologies if I cut too much context, but one of the things Walter 
explicitly wanted with D's asm syntax was that it be portable across 
compilers.  Having to have special syntax for each compiler is a problem.  
I strongly agree that functions using asm should be inlineable.

Some will almost certainly point out that the proposed macros for d-future 
will solve the problem, and yes, it could be used here.  But should it be 
necessary just to accomplish what should already be doable with standard
inlining techniques?

Anyway, food for thought.

Later,
Brad




More information about the Digitalmars-d mailing list