.text _start: li x2, 0xdead00000 # +59774074880 li x3, 0 # zero li x4, 1 # one li x5, -1 # -1 li x6, 0xdead00000 # duplicate of x2 li x7, -235555555555 # negative li x8, 123456789 # positive li x9, -765432000000 # negative li x10, 0x7fffffffffffffff # max positive 64b li x11, 0x8000000000000000 # min negative 64b # -------------------------------------------------------------- # 1. MULH : a * 0 mulh x31, x2, x3 # expected: 0000000000000000 # 2. MULH : a * 1 mulh x31, x2, x4 # expected: 0000000000000000 # 3. MULH : a * a mulh x31, x2, x6 # expected: 00000000000000c1 # 4. MULH : -1 * a mulh x31, x5, x2 # expected: ffffffffffffffff # 5. MULH : negative * negative mulh x31, x7, x7 # expected: 0000000000000bbf # 6. MULH : negative * positive mulh x31, x7, x8 # expected: fffffffffffffffe # 7. MULH : positive * negative mulh x31, x8, x9 # expected: fffffffffffffffa # 8. MULH : overflow example (max * 2) li x12, 2 mulh x31, x10, x12 # expected: 0000000000000000 # 9. MULH : max * max mulh x31, x10, x10 # expected: 3fffffffffffffff # 10. MULH : min * min mulh x31, x11, x11 # expected: 4000000000000000