aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/servoparser
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2017-03-16 19:07:17 +0100
committerSimon Sapin <simon.sapin@exyr.org>2017-03-17 01:09:30 +0100
commit9ff0153ddaef05452cdb2af28a072695dc91ff6d (patch)
tree4cae6c3ecd99f656bb969dbbc752a898cef3f655 /components/script/dom/servoparser
parente62d029ed643e5ce503cfbc7525da75a705ccf71 (diff)
downloadservo-9ff0153ddaef05452cdb2af28a072695dc91ff6d.tar.gz
servo-9ff0153ddaef05452cdb2af28a072695dc91ff6d.zip
Rewrite PropertyDeclaration::id to help the optimizer.
If I’m reading the release-mode assembly correctly, before this change PropertyDeclaration::id is implemented with a computed jump: ```assembly lea rcx, [rip + .LJTI117_0] movsxd rax, dword ptr [rcx + 4*rax] add rax, rcx jmp rax .LBB117_3: mov dword ptr [rdi], 65536 mov rax, rdi ret .LBB117_2: mov dword ptr [rdi], 0 mov rax, rdi ret .LBB117_4: mov dword ptr [rdi], 131072 mov rax, rdi ret .LBB117_6: mov dword ptr [rdi], 262144 mov rax, rdi ret .LBB117_7: mov dword ptr [rdi], 327680 mov rax, rdi ret ; Four similar lines repeated for each of the few hundred variants... ``` With Rust 1.15 (currently used for geckolib) this doesn’t change significantly. In Nightly 1.17 however, the compiled code uses a lookup table, possibly thanks to https://github.com/rust-lang/rust/pull/39456. ```assembly movq (%rsi), %rax cmpq $171, %rax jne .LBB23_1 addq $8, %rsi movq %rsi, 8(%rdi) movb $1, %al jmp .LBB23_3 .LBB23_1: xorq $128, %rax leaq .Lswitch.table.6(%rip), %rcx movb (%rax,%rcx), %al movb %al, 1(%rdi) xorl %eax, %eax .LBB23_3: movb %al, (%rdi) movq %rdi, %rax retq ```
Diffstat (limited to 'components/script/dom/servoparser')
0 files changed, 0 insertions, 0 deletions