mulh
lyszt.net охоплює mulh та інші інструкції RISC-V більш детально.
Формат кодування
Опис
mulh повертає старші 32 біти добутку. Два 32-бітних числа можуть при множенні дати результат шириною до 64 біт, тоді як регістр вміщує 32. Інструкція mul зберігає молодші 32 біти й відкидає решту. mulh (multiply high) зберігає старші 32 біти.
Виконайте обидві інструкції на однакових вхідних даних, і ви отримаєте весь добуток. mulh записує старшу половину в один регістр, mul записує молодшу половину в інший, і ця пара містить повний 64-бітний результат.
Старша половина вказує на переповнення, тобто на добуток, завеликий для 32 біт. Значуще значення в старшій половині означає, що добуток не вміщується в один регістр. Арифметика з дуже великими числами та криптографія покладаються на обидві половини.
Посібник RISC-V визначає ще два варіанти крім mulh. mulhu множить два беззнакові числа, а mulhsu множить знакове число в rs1 на беззнакове число в rs2. Згідно з посібником, mulhsu зустрічається в багатослівному знаковому множенні, де найстарше слово одного числа, яке несе знаковий біт, множиться на молодші слова іншого, які є беззнаковими.
h означає high (старший). Ця версія розглядає свої операнди як знакові, тому вони можуть бути від'ємними. Специфікація RISC-V також визначає беззнакові варіанти, а цей симулятор надає знакову mulh. Як і всі інструкції множення та ділення, форми з константою не існує, тому обидва вхідні значення беруться з регістрів.
Приклад
li t0, 100000 li t1, 100000 mulh t2, t0, t1 # t2 = 2 (high bits of 100000 * 100000)
