mulh
lyszt.net cubre mulh y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
mulh devuelve los 32 bits superiores de un producto. Dos números de 32 bits pueden multiplicarse y dar como resultado un valor de hasta 64 bits, mientras que un registro contiene 32. La instrucción mul conserva los 32 bits inferiores y descarta el resto. mulh (multiply high) conserva los 32 bits superiores.
Ejecuta ambas instrucciones con las mismas entradas y tendrás el producto completo. mulh escribe la mitad superior en un registro, mul escribe la mitad inferior en otro, y el par contiene el resultado completo de 64 bits.
La mitad superior indica desbordamiento, lo que significa un producto demasiado grande para 32 bits. Un valor significativo en la mitad superior significa que el producto no cabe en un registro. La aritmética con números muy grandes y la criptografía dependen de ambas mitades.
El manual de RISC-V define dos variantes más además de mulh. mulhu multiplica dos números sin signo, y mulhsu multiplica un número con signo en rs1 por un número sin signo en rs2. Según el manual, mulhsu aparece en la multiplicación con signo de varias palabras, donde la palabra más significativa de un número, que contiene el bit de signo, se multiplica por las palabras menos significativas del otro, que no tienen signo.
La h significa high (alta). Esta versión trata sus operandos como con signo, por lo que pueden ser negativos. La especificación de RISC-V también define variantes sin signo, y este simulador proporciona la mulh con signo. Como con todas las instrucciones de multiplicación y división, no existe una forma con constante, por lo que ambas entradas provienen de registros.
Ejemplo
li t0, 100000 li t1, 100000 mulh t2, t0, t1 # t2 = 2 (high bits of 100000 * 100000)
