这几天结束了 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 厂家。
我主要疑惑的是:这种测试不该出厂就做好吗?!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.