• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    LITTLELIAssembler
    KOMPAS
    KOMPAS --- ---
    LISKNI_SI:
    O variante s registrem bez dummy nevim, ale stavajici reseni je snad dostacujici. Vypnute optimalizace jsou stejne nepouzitelne, zvlaste pro C++ kod.
    LISKNI_SI
    LISKNI_SI --- ---
    KOMPAS: Diky, ale narazil jsem jeste na jednu nesrovnalost. Kdyz vytvorim nejakou dummy promennou, dam ji jako vystup, nikde jinde ji nepouziju, tak ji to vyoptimalizuje jen pri zaplych optimalizacich. Ja bych byl uplne nejradsi, kdyby mi to jen dalo nejaky registr a uz ho nikam nekopirovalo zpatky. Ale zkousel jsem udelat tu dummy promennou jako register int a zda se, ze to je dobry. Jen bych se rad ujistil, ze je to spravne a ze mu tim nepridelavam praci.

    A k tomu zbytku - s tim problem neni, mam tam normalni vstup, normalni vystup a je mi jedno, kam to ten blok hodi, je to jen prepis nejakych bitovych operaci do asm kvuli rychlosti.
    KOMPAS
    KOMPAS --- ---
    LISKNI_SI:
    No tohle IMHO bohuzel nejde, resi se to tak, ze se ten registr ulozi do jine dummy promenne, ktera se pak zahodi (a prekladac ji proto vyoptimalizuje). Viz http://www.cs.virginia.edu/~clc5q/gcc-inline-asm.pdf sekce 4.8 Temporary registers a okoli.

    Pokud ten asm kod jenom vezme vstup, neco s nim dela a pak ho prohlasi za dummy vystup, prekladac muze usoudit, ze se vyoptimalizuje CELY ten asm (protoze z pohledu prekladace byl vysledkem snazeni pouze dummy). Pro takovy pripad je nutne uzit asm volatile (nikoliv volatile dummy, to by se zbytecne provadely operace s dummy promennou). Tohle plati obecne i v pripadech, ze clobber je prazdne a kod dela neco "magickeho", co nelze popsat prostredky inline assembly (tzn. ruzna manipulace se stavovymi registry procesoru atd.).

    I kdyz kod asm volatile je bezpecny pred odstranenim, prekladac ho stale muze posouvat okolo ostatnich prikazu, se kterymi nema kod uvedenou datovou zavislost, takze se provedou ve spatnem poradi. Nekde jsem videl priklad prepnuti do jineho rezimu zpracovani floatu pred vypoctem, ktere bylo vsak presunuto az ZA ten vypocet. Toto je potreba resit "virtualni" zavislosti tak, ze jeden z operandu ovlivneneho prikazu bude oznacen jako vystup asm operace.

    Doufam, ze jsem to moc nezmotal, preci jen se mi ocka klizi.
    LITTLELI
    LITTLELI --- ---
    ja tohle nevim, ale z linuxassembly se da leccos najit zkus trebas:
    http://www-128.ibm.com/developerworks/linux/library/l-ia.html?dwzone=linux

    a tady je cosi o tom jak kompilatoru sdelit, se kterymi registry uz nemuze pocitat
    http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html

    vic sam nevim.
    LISKNI_SI
    LISKNI_SI --- ---
    Zdar,
    uz tu nejakou dobu valcim s vkladanym asm v cecku (kompiluju to pomoci gcc), a stale jsem nenasel odpoved na jednu zapeklitou otazku.

    Potrebuji vstupni operand, nejlepe do registru a potrebuji mu nejak rict, ze mu ten registr zmenim a aby pri optimalizaci nepocital s tim, ze mu ho nezmenim. Pokud jsem spravne rtfmoval v info gcc, tak to tohleto snad ani neumi. Presto se ptam,
    1) existuje zpusob, jak mu rict, ze chci vstup do registru, ze to budu menit, ze si vyslovene nepreji, aby tu zmenenou hodnotu kamkoliv ukladal (tedy nechci tu promennou menit, chci jen menit ten registr a pak ho zahodit) a uz vubec si nepreji, aby tu novou hodnotu pouzival dal,
    2) anebo zda-li existuje zpusob, jak ho pozadat o nejaky prazdny registr, takovy, ktery zrovna nejmin potrebuje, do ktereho si to proste zkopiruju (tedy budu tam mit normalne vstup kamkoliv, treba i do pameti) a pak si s tim budu delat co chci,
    3) anebo je skutecne nutne si ten registr vybrat sam, napsat ho do clobber listu a zkopirovat to tam (proc tohle nechci - predpokladam, ze podle toho, jaky registr si vezmu, se odviji to, ktere veci bude muset znovu nacist a jestli vubec, coz je zbytecne, pokud by to slo lip)

    Diky predem.
    SHALDAN
    SHALDAN --- ---
    zdravím a sorry za trochu OT, ale nemáte někdo na prodej nebo k dispozici :) knihu:
    Assembly Language for Intel-Based Computers (4th Edition) nebo jinou edici ? Kip R. Irvine ?
    LITTLELI
    LITTLELI --- ---
    hmm to bude tim, ze programovani v assembleru je neco jako umeni :)
    jen tezko muzes impresionistovi pak tvrdit, ze impresionismus stoji za hovno.
    kor kdyz sam se ten kritik neumi de fakto ani podepsat, natoz rozumne vyjadrit :)
    ale to je obecnejsi problem.
    CERBERUS
    CERBERUS --- ---
    _BENNY: Njn, clanky jako "Proč je programování v assembleru pitomost" jsou fakt povestne(a ne zrovna kvuli sve kvalite) :)
    _BENNY
    _BENNY --- ---
    mam dobrou, ba primo vybornou zpravu!

    http://www.blackhole.sk/readme.php?id=229
    KYOSUKE
    KYOSUKE --- ---
    LISKNI_SI: Myslel jsem, že jediný jazyk, jehož programy jsou ve zdrojové podobě ještě delší než stejně velké (binární) programy v assembleru, je COBOL... :-D
    LISKNI_SI
    LISKNI_SI --- ---
    KYOSUKE: No ja jsem nechapal, v cem by byla velikost asm zdrojaku mensi nez v ostatnich jazycich. Pak jsem ale pochopil, ze o te se nemluvilo (doufam).
    KYOSUKE
    KYOSUKE --- ---
    LISKNI_SI: Ono mi to vyznělo, jako že nechápeš, proč by mělo záležet na textové velikosti zdrojáků. :-)
    LISKNI_SI
    LISKNI_SI --- ---
    KYOSUKE: No zrovna v asm tech radku nebudes mit nejmin, ne?
    KYOSUKE
    KYOSUKE --- ---
    LISKNI_SI: Heh, já myslel, že minimalizace LoC je cílem veškerého vývoje... :-D
    LITTLELI
    LITTLELI --- ---
    ah, jiste. to mas zase pravdu.
    LISKNI_SI
    LISKNI_SI --- ---
    LITTLELI: Asi je otazkou velikost ceho. Pokud binarky, chapu, pokud zdrojaku, nechapu.
    KYOSUKE
    KYOSUKE --- ---
    LITTLELI: Aneb mít velikého tučňáka není vždy praktické... :-D
    LITTLELI
    LITTLELI --- ---
    uf, no co bych mel vysvetlovat? resis prakticnost nebo velikost?
    KYOSUKE
    KYOSUKE --- ---
    LISKNI_SI: Týjo, já si snad pudu nainstalovat toho Tigera, nebo z toho spadnu pod stůl... :-D
    Kliknutím sem můžete změnit nastavení reklam