看了一下 LonngISA 的指令描述,一般来说,两个寄存器相乘,乘积结果是双倍寄存器宽度,同然用一对寄存器来存放结果。比如 MIPS 乘法结果放入 hi, lo 两个寄存器,传统x86 乘法结果放入 eax, edx 两个寄存器。原本以为龙芯也是类似,一条乘法指令结果放入一对相邻寄存器,比如: mul r4, r3, r2, 把两个寄存器 r3, r2 的乘积放入r4 和r5(偶数号寄存器连同其后紧邻的一个寄存器),这样似乎非常自然。
然而 LoongISA 却不这样,非得用两条乘法指令才行:
mul r4, r3, r2;
mulh r5, r3, r2
命名一次乘法就得到结果,为什么非得要两条乘法指令才能得到完整的积。这种设计非常令人费解。实际中谁也不会有计算乘法后只需要乘积的高半部分或者低半部分的需求,有时如果确知高半部分为0,那当然只需要低半部分就够了。但是实现怎能知道呢?
--
FROM 218.16.203.*