Hirdetés

Keresés

Aktív témák

  • #95904256

    törölt tag

    válasz P.H. #44 üzenetére

    Hm... Lehet hogy a trunc() nem a legjobb példa, mert én SSE3-as FISTTP-et használok in-line, ellenben a szintén in-line ( és valóban nem funkcióhívás ) Delphi / C trunc() megoldással. Ennek ellenére a FISTTP kontra FSTCW+FLDCW+FISTP(+FLDCW) kombó sebességbeli különbsége elég látványos.

    Jobb példa pl. egy 64 bites lebegőpontos szám kerekítése ( round() ).
    Ezt most szedtem ki egy C kódból:
    PUSH ECX
    PUSH ECX
    FSTP Q[ESP]
    CALL RoundDouble
    POP ECX
    POP ECX
    ...
    RoundDouble:
    PUSH ECX
    PUSH ECX
    FLD Q[ESP+0Ch]
    FRNDINT
    FSTP Q[ESP]
    FLD Q[ESP]
    POP ECX
    POP ECX
    RET

    Ezzel szemben az alábbi négysoros jóval gyorsabb:
    SUB ESP,08h
    FISTP Q[ESP]
    FILD Q[ESP]
    ADD ESP,08h

    szerk.: Természetesen ezt a négysorost lehet makróként is használni...

Aktív témák

Hirdetés