mul
lyszt.net cubre mul y otras instrucciones RISC-V con más detalle.
Formato de codificación
Descripción
mul multiplica dos registros. Lee rs1 y rs2, multiplica esos valores y escribe el producto en rd. El formato a continuación significa rd = rs1 * rs2.
mul rd, rs1, rs2
RISC-V está organizado en capas llamadas extensiones. La multiplicación y la división pertenecen a la extensión llamada M, que el núcleo RISC-V más pequeño puede omitir. Este simulador la incluye, porque su nombre completo RV32IM termina en M, así que mul y div están disponibles. Un procesador sin M debe hacer el trabajo por software.
El producto de dos números de 32 bits puede alcanzar 64 bits, lo que excede lo que cabe en un registro. mul conserva los 32 bits inferiores. Para valores pequeños esa es la respuesta completa. Los 32 bits superiores provienen de una instrucción aparte, mulh. Las entradas con signo y sin signo producen los mismos 32 bits inferiores, así que una sola instrucción cubre ambos casos.
Cuando se necesitan ambas mitades de un producto, el manual de RISC-V recomienda un par fijo de instrucciones. Una instrucción mulh (o una de sus variantes sin signo) proporciona la mitad alta, y mul con los mismos registros fuente en el mismo orden proporciona la mitad baja. El destino de la mitad alta no puede ser rs1 ni rs2. Un procesador puede entonces fusionar las dos instrucciones en una sola multiplicación.
Multiplicar por una potencia de dos (2, 4, 8, 16 y así sucesivamente) puede usar en su lugar un desplazamiento a la izquierda. Desplazar a la izquierda 3 posiciones multiplica por 8, y un desplazamiento cuesta menos que una multiplicación (véase slli). Los compiladores hacen esta sustitución automáticamente. El ejemplo multiplica 6 por 7 y deja 42 en t2.
Ejemplo
li t0, 6 li t1, 7 mul t2, t0, t1 # t2 = 42
