mul
lyszt.net tratta mul e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
mul moltiplica due registri. Legge rs1 e rs2, moltiplica quei valori e scrive il prodotto in rd. Il formato seguente significa rd = rs1 * rs2.
mul rd, rs1, rs2
RISC-V è organizzato in livelli chiamati estensioni. Moltiplicazione e divisione appartengono all'estensione chiamata M, che il più piccolo core RISC-V può omettere. Questo simulatore la include, perché il suo nome completo RV32IM termina con M, quindi mul e div sono disponibili. Un processore senza M deve svolgere il lavoro via software.
Il prodotto di due numeri a 32 bit può raggiungere i 64 bit, il che supera ciò che un registro può contenere. mul conserva i 32 bit inferiori. Per valori piccoli questa è la risposta completa. I 32 bit superiori provengono da un'istruzione separata, mulh. Input con segno e senza segno producono gli stessi 32 bit inferiori, quindi una sola istruzione copre entrambi i casi.
Quando sono necessarie entrambe le metà di un prodotto, il manuale RISC-V raccomanda una coppia fissa di istruzioni. Un'istruzione mulh (o una delle sue varianti senza segno) fornisce la metà alta, e mul con gli stessi registri sorgente nello stesso ordine fornisce la metà bassa. La destinazione della metà alta non può essere rs1 o rs2. Un processore può quindi fondere le due istruzioni in un'unica moltiplicazione.
Moltiplicare per una potenza di due (2, 4, 8, 16 e così via) può usare uno scorrimento a sinistra. Scorrere a sinistra di 3 posizioni moltiplica per 8, e uno scorrimento costa meno di una moltiplicazione (vedi slli). I compilatori effettuano questa sostituzione automaticamente. L'esempio moltiplica 6 per 7 e lascia 42 in t2.
Esempio
li t0, 6 li t1, 7 mul t2, t0, t1 # t2 = 42
