mulhu

mulhu

RISC-V Assembler Referenz

lyszt.net behandelt mulhu und andere RISC-V-Befehle ausführlicher.

Kodierungsformat

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

Beschreibung

MUL führt eine XLEN-Bit×XLEN-Bit-Multiplikation von rs1 mit rs2 durch und legt die unteren XLEN Bits im Zielregister ab. MULH, MULHU und MULHSU führen dieselbe Multiplikation durch, geben aber die oberen XLEN Bits des vollständigen 2×XLEN-Bit-Produkts zurück, für vorzeichenbehaftet×vorzeichenbehaftet, vorzeichenlos×vorzeichenlos und rs1×vorzeichenlos rs2-Multiplikation. Wenn sowohl die hohen als auch die niedrigen Bits desselben Produkts benötigt werden, ist die empfohlene Codesequenz: MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2 (Quellregisterspezifizierer müssen in derselben Reihenfolge stehen und rdh darf nicht mit rs1 oder rs2 identisch sein). Mikroarchitekturen können diese dann zu einer einzigen Multiplikationsoperation verschmelzen, anstatt zwei separate Multiplikationen durchzuführen.

ℹ
MULHSU wird bei der mehrwortigen vorzeichenbehafteten Multiplikation verwendet, um das höchstwertige Wort des Multiplikanden (das das Vorzeichenbit enthält) mit den niederwertigeren Wörtern des Multiplikators (die vorzeichenlos sind) zu multiplizieren.

MULW ist eine RV64-Instruktion, die die unteren 32 Bits der Quellregister multipliziert und die Vorzeichenerweiterung der unteren 32 Bits des Ergebnisses in das Zielregister legt.

ℹ
In RV64 kann MUL verwendet werden, um die oberen 32 Bits des 64-Bit-Produkts zu erhalten, aber vorzeichenbehaftete Argumente müssen ordnungsgemäße 32-Bit-vorzeichenbehaftete Werte sein, während vorzeichenlose Argumente ihre oberen 32 Bits leer haben müssen. Wenn nicht bekannt ist, ob die Argumente vorzeichen- oder nullerweitert sind, besteht eine Alternative darin, beide Argumente um 32 Bits nach links zu verschieben und dann MULH[[S]U] zu verwenden.