To kodóvání délky instrukcí, skoro to vypadá, že se autoři inspirovali u UTF-8 :-)
Jinak by mě docela zajímalo, zda má nějaké výhody tříadresový kód. IMHO v 99% případů je většina (mezi)proměnných stejně temporary, takže těch dalších 5bitů navíc je plýtvání. Spíš by je šlo použít na komplikovanější adresace apod...
V mnoha případech je potřeba dále zachovat i obě vstupní hodnoty. Zkusím z hlavy například na klasické binární vyhledávání), key x18 (a0), array start x19 (a1), array size x20 (a2), návrat index x16 (v0), a uvidíme jak to vyjde (za chyby neručím, nekompiloval jsem to)
add x21, x0, x0 /* spodní limit */
loop:
beq x20, x21, not_found
add x16, x21, x20
srli x16, x16, 1 /* 1. 2op */
slli x22, x16, 2
add x22, x22, a1 /* 2. 2op */
lw x22, x22, 0
beq x18, x22, found
blt x18, x22, smaller
add x20, x16, x0 /* 3. 2op */
jal x0, loop
smaller:
add x21, x16, x0 /* 4. 2op */
jal x0, loop
not_found:
add x16, x9, -1
found:
jalr x0, x1
Tak zrovna tady je to tak půl na půl. Na druhou stranu přidání více instrukcí v případě dvouoperandového kódování povede na více souběžné řešení více závislostí a více problémů s přejmenováváním registrů a jejich plánování v superskalární implementaci, takže to buď výkon zpomalí nebo bude vyžadovat složitější HW.
Jinak si lze RISC-V také spustit v JavaScriptu
ale na rozdíl od jor1k se zdá, že přímo na webu není k dispozici image s GCC ani možnost si do běžícího simulátoru něco nahrát.
Já tam teď vidím dohromady dvě tříadresové:
add x16, x21, x20
slli x22, x16, 2
(chyba - měl být jednoduchý load immediate -1) add x16, x9, -1
Ta druhá by šla eliminovat, kdyby procesor uměl adresování s indexem, navíc by ušetřil i následující instrukci add. Obě by šly možná eliminovat, pokud by se místo indexu udržovaly start a end jako pointer.
Tak jako tak, je to s původním řešením 4:2.
Link vypadá pěkně, až na to, že je to jenom busybox. Ale na obranu je třeba říct, že s downloadováním image s gcc by asi přišli brzo na buben :-)
Chyby v chybě byl překlep v x0 na 9 místo na 0 a copy paste ADD místo ADDI.
Je pravda že zrovna tento kód není moc přesvědčivý. I přesto jsem ho do diskuze dal, i když moc argument nepodpoří. Celkově ale mám pocit, že se tříoparandové instrukce hodí v takovém počtu případů, že se vyplatí.