不是优化导致结果不可预期
而是错误代码导致结果不可预期
你用嵌入式汇编需要告诉编译器你需要用哪些寄存器,会改变哪些寄存器
【 在 lambdago (foool) 的大作中提到: 】
: 标 题: Re: [求助][讨论] cpuid 指令加优化选项后执行错误
: 发信站: 水木社区 (Wed May 13 22:30:57 2020), 站内
:
: 呃,你是对的,我搞混了。
:
: 此CPUID即是我用的CPUID,就是关于获取CPU信息的ops,
: 但也可以用于序列化指令,我gdb 看了下,cpuid 修改了eax-edx 寄存器。
:
:
: (gdb) print {$eax,$ebx,$ecx,$edx}
: $1 = {0, 1431655024, 1431655024, -7032}
: (gdb) c
: Continuing.
: (0) before cpuid 140737353838536 s 93824992236144 ns
:
: Breakpoint 3, main () at test.c:26
: 26 printf("(%d) after cpuid %ld s %ld ns\n", ii, tm_now.tv_sec, tm_now.tv_nsec);
: (gdb) print {$eax,$ebx,$ecx,$edx}
: $2 = {0, 832, 24, 0}
:
:
: 优化导致结果不可预期。
:
:
: 【 在 z16166 的大作中提到: 】
: : 啥?你贴的源码,我编译了,看到的cpuid指令机器码就是0F A2啊,跟那个intrinsic函数里的cpuid指令一样
: :
:
: --
: ※ 修改:·lambdago 于 May 13 22:32:03 2020 修改本文·[FROM: 171.82.232.*]
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 171.82.232.*]
--
修改:lambdago FROM 171.82.232.*
FROM 71.198.160.*