mulhsu
lyszt.netはmulhsuおよびその他のRISC-V命令をより詳しく扱っています。
エンコーディング形式
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
説明
MULはrs1とrs2のXLENビット×XLENビットの乗算を実行し、積の下位XLENビットをデスティネーションレジスタに格納します。MULH、MULHU、MULHSUも同じ乗算を実行しますが、符号付き×符号付き、符号なし×符号なし、rs1×符号なしrs2の乗算について、2×XLENビットの積全体の上位XLENビットを返します。同じ積の上位ビットと下位ビットの両方が必要な場合、推奨されるコードシーケンスは次のとおりです:MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2(ソースレジスタ指定子は同じ順序でなければならず、rdhはrs1またはrs2と同じであってはなりません)。これにより、マイクロアーキテクチャは2回の別々の乗算を実行する代わりに、これらを単一の乗算操作に融合できます。
ℹ
MULHSUは、多語符号付き乗算において、被乗数の最上位ワード(符号ビットを含む)と乗数の下位ワード(符号なし)を乗算するために使用されます。
MULWはRV64命令であり、ソースレジスタの下位32ビットを乗算し、結果の下位32ビットの符号拡張をデスティネーションレジスタに格納します。
ℹ
RV64では、MULを使用して64ビット積の上位32ビットを取得できますが、符号付き引数は適切な32ビット符号付き値でなければならず、符号なし引数は上位32ビットがクリアされている必要があります。引数が符号拡張またはゼロ拡張されていることが不明な場合、別の方法として、両方の引数を32ビット左シフトしてからMULH[[S]U]を使用します。