mulhu

mulhu

Assembleur RISC-V Référence

lyszt.net couvre mulhu et d'autres instructions RISC-V plus en détail.

Format d'encodage

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

Description

MUL effectue une multiplication XLEN bits×XLEN bits de rs1 par rs2 et place les XLEN bits inférieurs dans le registre de destination. MULH, MULHU et MULHSU effectuent la même multiplication mais renvoient les XLEN bits supérieurs du produit complet de 2×XLEN bits, pour une multiplication signé×signé, non signé×non signé et rs1×non signé rs2. Si les bits de poids fort et de poids faible du même produit sont nécessaires, la séquence de code recommandée est : MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2 (les spécificateurs de registre source doivent être dans le même ordre et rdh ne peut pas être identique à rs1 ou rs2). Les microarchitectures peuvent alors les fusionner en une seule opération de multiplication au lieu d'effectuer deux multiplications distinctes.

ℹ
MULHSU est utilisé dans la multiplication signée multi-mots pour multiplier le mot le plus significatif du multiplicande (qui contient le bit de signe) par les mots les moins significatifs du multiplicateur (qui sont non signés).

MULW est une instruction RV64 qui multiplie les 32 bits inférieurs des registres source, en plaçant l'extension de signe des 32 bits inférieurs du résultat dans le registre de destination.

ℹ
En RV64, MUL peut être utilisé pour obtenir les 32 bits supérieurs du produit de 64 bits, mais les arguments signés doivent être des valeurs signées 32 bits correctes, tandis que les arguments non signés doivent avoir leurs 32 bits supérieurs à zéro. Si les arguments ne sont pas connus comme étant étendus en signe ou en zéro, une alternative consiste à décaler les deux arguments de 32 bits vers la gauche, puis à utiliser MULH[[S]U].