0
点赞
收藏
分享

微信扫一扫

关于 RDTSC 功能


本文部分内容复制自下面三篇文档:

https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.pdf

https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf

https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf

64 位架构里,RDTSC 为了兼容性,做了个看上去比较低效的事情:TimeStamp 值复制到了 EDX:EAX 两个寄存器里,为了拿到最终值,用户还需要做一下拼接:

6f:   0f 31                   rdtsc
  71:   48 c1 e2 20             shl    $0x20,%rdx
  78:   48 09 c2                or     %rax,%rdx

更高效的 RDTSC 实现应该直接把 TimeStamp 装入 64 位的 RAX 寄存器。RDTSC 首次引入是在 32 位的奔腾处理器中,到了 64 位时代为了兼容性,白白浪费 2 条指令(shl、or)。

为什么 Intel 不开发一个 rdtsc64 指令呢?对于 64 位机器下编译的程序完全不需要考虑兼容性呀!

关于 RDTSC 功能_.net



举报

相关推荐

0 条评论