作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编译循环时,turbofan 似乎在大多数情况下都会剥离第一个循环迭代。例如一个循环,如:
function fill256(int32Array) {
var i = 255;
do {
int32Array[i] = 0;
} while(--i >= 0);
}
# rdx is int32Array
0x13f38bcef7a 5a 488b4a2f REX.W movq rcx,[rdx+0x2f]
0x13f38bcef7e 5e 488b7a3f REX.W movq rdi,[rdx+0x3f]
0x13f38bcef82 62 4c8b4237 REX.W movq r8,[rdx+0x37]
# peeled iteration
0x13f38bcef86 66 4881f9ff000000 REX.W cmpq rcx,0xff
0x13f38bcef8d 6d 0f8614010000 jna 0x13f38bcf0a7 <+0x187>
0x13f38bcef93 73 4e8d0c07 REX.W leaq r9,[rdi+r8*1]
0x13f38bcef97 77 41c781fc03000000000000 movl [r9+0x3fc],0x0 # dword store
0x13f38bcefa2 82 41b9fe000000 movl r9,0xfe
0x13f38bcefa8 88 e906000000 jmp 0x13f38bcefb3 <+0x93>
0x13f38bcefad 8d 0f1f00 nop
# loop proper
0x13f38bcefb0 90 4d8bcb REX.W movq r9,r11
# first iteration entry point:
0x13f38bcefb3 93 493b65e0 REX.W cmpq rsp,[r13-0x20] (external value (StackGuard::address_of_jslimit()))
0x13f38bcefb7 97 0f868b000000 jna 0x13f38bcf048 <+0x128>
0x13f38bcefbd 9d 458d59ff leal r11,[r9-0x1]
0x13f38bcefc1 a1 4d63e1 REX.W movsxlq r12,r9
0x13f38bcefc4 a4 4c3be1 REX.W cmpq r12,rcx
0x13f38bcefc7 a7 0f83e6000000 jnc 0x13f38bcf0b3 <+0x193>
0x13f38bcefcd ad 4e8d0c07 REX.W leaq r9,[rdi+r8*1]
0x13f38bcefd1 b1 43c704a100000000 movl [r9+r12*4],0x0 # dword store
0x13f38bcefd9 b9 4183fb00 cmpl r11,0x0
0x13f38bcefdd bd 7dd1 jge 0x13f38bcefb0 <+0x90>
最佳答案
似乎剥离第一次迭代是 turbofan 提升循环语句的要求。
This presentation by the compiler tech lead似乎表明剥离是一种更安全地提升代码的新方法。幻灯片 17:
Loop peeling: No more deoptimization loops because of aggressive hoisting
// var buf = new Int32Array(10000);
for (var i = 0; i < 10; ++i) {
if (i === 0) continue;
for (var j = 0; j < 1000; ++j) {
if (j === 0) continue;
buf[i*j] = i ^ j;
}
}
for (var i = 0; i < 10; ++i)
for (var j = 0; j < 1000; ++j)
buf[i*j] = i ^ j;
buf
留在内循环中。
关于assembly - 为什么涡轮风扇会剥掉小环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61753480/
在 C/C++ 中是否有 Windows 标准方法来执行“启动风扇”、“降低速度”等操作? 我怀疑它可能是 ACPI,但我是一个虚弱的凡人,无法阅读那种文档。 编辑:例如Windows 7 允许您在电
我是一名优秀的程序员,十分优秀!