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.