16 registrů je užitečných, ale není zbytečné použít 3 z nich na velmi speciální operace? Nebylo by lepší PC, FLAGS a IA přesunout spíš do kategorie CSR? PC je tedy trochu na hraně, bo procesory pak mají speciální instrukce na load-pc-relative, takže chápu trochu redukci instrukcí, ale ty FLAGS a IA mi smysl nedávají.
V každém případě jednoduchý a docela efektivní návrh.
Nebylo by lepší PC, FLAGS a IA přesunout spíš do kategorie CSR?
CSR umí jen operace přečtení nebo uložení hodnoty. V dalších pokračováních tohoto seriálu bude vidět, že pro PC a FLAGS se hodí mít i další operace: exchange (výměna hodnot dvou registrů), load/store (čtení/zápis hodnot v paměti), aritmetické a bitové operace.
S IA máte pravdu. Až poměrně pozdě jsem přišel na to, jak přesně se bude tento registr používat, a už se mi nechtělo měnit návrh.
Ja tam popravde cekal i "constant 0" a "constant 1" registry.
Pokud bych navrhoval v dnesni dobe procesor, tak bych sel taky touto cestou - ze mit sadu registru, ze kterych nektere maji specialnim chovani, nebo tvori aliasy na ruzne HW ficury (napr. v pripade velikeho cpu meshe bych na 4 registry aliasoval fifa na svetove strany).
Ona pak ta ortogonalita instrukci sady a kodovani instrukci, potazmo nasledna tvorba kompilatoru a optimalizaci odvdeci nasobne vice, a vykon je pak lepsi nez v pripade MMIO, hlavne u riscu kde nejsou tak bohate adresni rezimy jako u cisc.
Takze klasicky pripad: neni vhodne setrit na nespravnem miste.
Optimalizace ve smeru ktery navrhujete se hodi az pri opravdu pidi mikrokontrolerech, kde chcete usetrit kazdy LE a celkove zahustit a koncentrovat design.. rekneme ze pro 8-bit mcu ktere je mensi nez autoruv procesor by to smysl davalo.
Ja tam popravde cekal i "constant 0" a "constant 1" registry.
Nad registrem "constant 0" jsem přemýšlel, ale při návrhu ISA mi nebylo moc jasné, k čemu by se používal, a následně při programování jsem neměl pocit, že bych ho potřeboval. Registr "constant 1" mi připadá možná ještě méně užitečný. Chápu, že se hodí registr 0 např. v RISC-V, kde má každá instrukce dva zdrojové a jeden cílový registr a navíc ještě konstantu. Ale u mých dvouregistrových instrukcí mi to moc smysl nedává.