mulhsu

mulhsu

Assembly RISC-V Riferimento

lyszt.net tratta mulhsu e altre istruzioni RISC-V in modo più dettagliato.

Formato di codifica

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Descrizione

MUL esegue una moltiplicazione XLEN-bit×XLEN-bit di rs1 per rs2 e colloca i bit XLEN inferiori nel registro di destinazione. MULH, MULHU e MULHSU eseguono la stessa moltiplicazione ma restituiscono i bit XLEN superiori del prodotto completo a 2×XLEN-bit, per moltiplicazione con segno×con segno, senza segno×senza segno e rs1×senza segno rs2. Se sono richiesti sia i bit alti che quelli bassi dello stesso prodotto, la sequenza di codice raccomandata è: MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2 (gli specificatori dei registri sorgente devono essere nello stesso ordine e rdh non può essere uguale a rs1 o rs2). Le microarchitetture possono quindi fondere queste in un'unica operazione di moltiplicazione invece di eseguire due moltiplicazioni separate.

ℹ
MULHSU è usato nella moltiplicazione con segno multi-parola per moltiplicare la parola più significativa del moltiplicando (che contiene il bit di segno) con le parole meno significative del moltiplicatore (che sono senza segno).

MULW è un'istruzione RV64 che moltiplica i 32 bit inferiori dei registri sorgente, collocando l'estensione del segno dei 32 bit inferiori del risultato nel registro di destinazione.

ℹ
In RV64, MUL può essere usato per ottenere i 32 bit superiori del prodotto a 64 bit, ma gli argomenti con segno devono essere valori con segno a 32 bit corretti, mentre gli argomenti senza segno devono avere i 32 bit superiori azzerati. Se non è noto che gli argomenti siano estesi con segno o con zeri, un'alternativa è spostare entrambi gli argomenti a sinistra di 32 bit, quindi usare MULH[[S]U].