Those Magic Optimizations
记录一些魔术、魔数和编译器优化指令。
速查手册,长期更新。
除法变乘法
怕不是最常见的一种优化操作了。
关键字:GCC,G++,ARM64,除法,0xAAAAAAAAAAAAAAAB
用法:result = -6148914691236517205LL * x;
等价:result = x/3
限制:64bit
要求:x%3==0
,否则会产生一个超大的结果;
比如:
- 常数是
0xAAAAAAAAAAAAAAAB
- 在64bit下,
0xAAAAAAAAAAAAAAAB*6=2
- 上述数值去掉一个A,就把运算空间限制到了63bit(也就是做有符号计算),但是作用似乎不大
同类常数还有:
0xAAAAAAAAAAAAAAAB -> /3
0xAAAAAAAAAAAAAAAC -> /4
0xCCCCCCCCCCCCCCCD -> /5
0xE1BFE31AA3715387 -> /567
参考在此
跳转表
这个……应该没有什么说的意义吧,密集+稀疏两种策略。
FROM:blog.iret.xyz
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论