首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更好的编码添加EAX,4作为r/m32 imm32或r32 imm8?x86程序集

更好的编码添加EAX,4作为r/m32 imm32或r32 imm8?x86程序集
EN

Stack Overflow用户
提问于 2012-11-15 07:16:26
回答 2查看 704关注 0票数 0

给出指令:

代码语言:javascript
复制
ADD EAX, 4

在x86汇编P2+中,如果目标是执行速度和代码大小无关,那么将其编码为ADD EAX, imm32 (操作码05)或ADD r/m32, imm8 (操作码83 /0)会更好?

请注意,在这种情况下,EAX是一个指针,因此ADD AL, imm8是不可行的。

选项2(操作码83 /0)将导致较小的代码长度,但据我有限的理解,它可能不会像选项1那样流水线,即使它更短。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-15 10:24:13

如果您没有针对某个特定的CPU进行优化(例如“英特尔奔腾II,型号2”,而不仅仅是"P2+"),只是猜测。不管你怎么猜测,有些CPU可能更快,有些可能更慢(但我预计对于大多数CPU来说,这根本不会有什么不同)。

如果您正在针对某个特定的CPU进行优化,那么只需猜测。另一种选择是在你计划使用它的确切条件下分析它,然后意识到两天后你想要更改代码,而你却浪费了8个小时在分析上却一无所获。

最后,如果您正在编写代码优化器(例如,作为编译器后端或优化汇编器的一部分),那么只需猜测-您有比这更重要的事情要担心。另一种选择是获得大约50台不同的计算机,并在所有计算机上分析许多不同的指令序列;然后使用结果为许多不同的情况创建规则。

票数 1
EN

Stack Overflow用户

发布于 2012-11-15 13:59:51

选择简写形式83 /0。代码密度将提高,这意味着在许多处理器上,性能和功耗都有适度的提高机会。编码胖的立即值没有任何好处。

现代x86处理器上的指令缓存大小至少为32KB,这意味着适度的代码密度改进不会真正改善缓存。请参阅Steenkiste的论文“代码密度对指令缓存性能的影响”。对不起,我好像找不到那个的免费链接。

真正的潜在赢家是在紧密循环中执行的密集代码。如果循环足够紧密,现代处理器可以采取捷径,只取并解码一次指令,然后从流水线内部的内部缓冲中执行小循环。即使循环性能由于数据风险或其他原因而受到限制,这些技巧仍然可以降低功耗。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13389052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档