Vlákno názorů k článku Procesory s architekturou RISC v pracovních stanicích a serverech od klusacek - V cem se lisi scitani signed od scitani...

  • Článek je starý, nové názory již nelze přidávat.
  • 31. 5. 2011 2:05

    klusacek (neregistrovaný)

    V cem se lisi scitani signed od scitani unsigned? Jeste bych to chapal u te konstanty (add by ji a nejprve znamenkove rozsiril na 32 bitu a pak teprv pricicetl), ale kdyz se scitaji registry tak je to (u 2jkoveho doplnku) totez.

    Skutecnost ze MIPS 2000 nemel flagy a to zejmena carry asi dost komplikovala tvorbu rutin pro dlouhou aritmetiku.....

    Jinak dik za clanek a uz se tesim na popis RISCOSu.

  • 31. 5. 2011 12:05

    JirkaS (neregistrovaný)

    Zrovna nad tím carry jsem dumal taky. To se jako po sečtení kontrolovalo, zdali výsledek není menší než jeden ze sčítanců? Nebo je na to nějaký jiný fígl?

  • 31. 5. 2011 13:44

    Medusa (neregistrovaný)

    Pri preteceni se generuje Trap (interupt) - ve vsech aritmetickejch instrukcich je jeden bit (v ty casti na konci) kde se voli jestli se bude ignorovat, nebo se pouzije

  • 31. 5. 2011 14:04

    Pavel Píša (neregistrovaný)

    Co se týče celočíselné aritmetiky, tak varianty bez U (add/addi) při přetečení znaménkové aritmetiky ve dvojkovém doplňku (výsled je mimo rozsah -0x80000000,+0­X7FFFFFFF) dojde k vyvolání výjimky. U instrukcí addu a addiu dochází k běžnému tichému přetečení/omezení modulo aritmetiky. Určitou kuriozitou je, že i pro addiu se přímý operand rozšiřuje znaménkově. Jména s U tedy jen vyjadřují vztah k výjimkám a přímo implementace s tímto používáním počítají.

    Zajímavostí je, že se nakonec kvůli přenositelnosti kódu ani v C kompilátoru (GCC) na MIPSu i pro celočíselnou aritmetiku triktně používají variantu s U a zajímavá vlastnost architektury k odhalení runtime chyb s přetečením není využita. Dokonce i při volbě mips-elf-gcc -ftrapv GCC-4.4.4 nevygeneruje místo instrukce add volání __addvsi3, které provádí kontrolu a případně volá abort. Je to docela škoda.

    Co se týče přetékaní ve znaménkové aritmetice, tak norma C přímo říká, že pro signed čísla není chování definované => výjimka by tedy nebyla problém.

    Zajímavé informace o chybách (např. i mylnými předpoklady o přetékání znaménkové aritmetiky) v SW spůsobených v současné době agresivnějšími optimalizacemi v LLVM jsou v článku

    http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html

    Co se týče MIPSu, tak popis jak použít sice starý, ale pro pochopení myšlení autorů nedocenitelný, nástroj MipsIT najdete na stránkách k našemu předmětu

    https://edux.feld.cvut.cz/courses/A0B36APO/tutorials/03/start

    MipsIT je bohužel z Linuxu použitelný jen přes Wine, ale řetezce pro kompilaci kódu spustitelného v MipsIT jsme připravili i pro Linux.