这几天结束了 MT 僵硬的面试,把精力放到了我司国产化支持的进程上,就发生了一个让人啼笑不得的事情。查询的过程不写了,直接写结果。
某国产 CPU 计算无符号整数除法,竟然会出错。
指令为 div %rcx:
普通的 X86_64CPU div 前
rax 0x0 0
rcx 0xffffffffffffffff -1
rdx 0xffffffff00000001 -4294967295
普通的 X86_64CPU div 后
rax 0xffffffff00000001 -4294967295
rcx 0xffffffffffffffff -1
rdx 0xffffffff00000001 -4294967295
而 该国产 CPU div 前
(gdb) info reg
rax 0x0 0
rcx 0xffffffffffffffff -1
rdx 0xffffffff00000001 -4294967295
该国产 CPU div 后
rax 0x1 1
rcx 0xffffffffffffffff -1
rdx 0x1 1
然后找了“中间商”,实际上是主板厂商联系 CPU 厂家,CPU 厂家回复:有没有测试程序可以让我们测试下?
我:?不是有寄存器的值了吗?你们自己写个程序?
最后我写了个测试程序给了 CPU 厂家。
我主要疑惑的是:这种测试不该出厂就做好吗?!
1
hxndg OP 厂商给出的解释是:
BIOS 用于指定除法运算时 CPU 计算的路径,64 位除法运算使用路径溢出了,需要更新指定的路径 通过升级 BIOS 解决了 64 位除法运算失败的问题 |