Nesting in pure functions

bearophile bearophileHUGS at lycos.com
Mon Apr 6 02:48:53 PDT 2009


bearophile:
> I don't know why sqr is written like this:

Sorry, I meant:
>I don't know why sqr isn't written like this:<

--------------------

This is the same compiled with -inline too, as you can see double_sqr() isn't being inlined, despite containing just an imul and an add:

sqr:
        mov EAX,4[ESP]
        imul    EAX,EAX
        ret 4

double_sqr:
        imul    EAX,EAX
        add EAX,EAX
        ret

main:
L0:     push    EAX
        cmp dword ptr 8[ESP],2
        jne L1D
        mov EDX,0Ch[ESP]
        mov EAX,8[ESP]
        push    dword ptr 0Ch[EDX]
        push    dword ptr 8[EDX]
        call    near ptr toInt
        jmp short   L22
L1D:    mov EAX,0Ah
L22:    call    near ptr double_sqr
        add EAX,EAX
        mov ECX,offset FLAT:_DATA
        push    EAX
        push    ECX
        call    near ptr printf

-------------

Regarding the inlining in D, it's supposed to be automatic, but often the programmer knows better.
For a recent example of mine take a look at the "mastermind_breaking.d" program inside this zip:
http://www.fantascienza.net/leonardo/js/mastermind_break.zip

I have had to put the function code inside a string mixin to force a manual inlining and improve the performance of the program.

Bye,
bearophile



More information about the Digitalmars-d mailing list