Three Cool Things about D
David Nadlinger via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Tue Dec 22 10:29:19 PST 2015
On Monday, 21 December 2015 at 17:28:51 UTC, Andrei Alexandrescu
wrote:
> https://www.reddit.com/r/programming/comments/3xq2ul/codedive_2015_talk_three_cool_things_about_d/
By the way, even though I wholeheartedly share your sentiment
regarding those "functional" examples, I found it to be an
interesting example for the power of modern optimizers that LDC
manages to compile this
---
ulong factorial(this n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
---
to this:
---
__D4test9factorialFkZm:
mov eax, 1
cmp edi, 2
jb LBB0_7
mov ecx, edi
lea edx, [rdi + 7]
add edi, -2
mov eax, 1
test dl, 7
je LBB0_4
and edx, 7
neg edx
mov eax, 1
.align 4, 0x90
LBB0_3:
imul rax, rcx
dec rcx
inc edx
jne LBB0_3
LBB0_4:
cmp edi, 7
jb LBB0_7
add rcx, -3
.align 4, 0x90
LBB0_6:
lea rdx, [rcx + 3]
imul rdx, rax
lea rax, [rcx + 2]
lea rsi, [rcx + 1]
imul rax, rsi
imul rax, rdx
lea rdx, [rcx - 1]
imul rdx, rcx
lea rsi, [rcx - 2]
imul rsi, rdx
imul rsi, rax
lea rax, [rcx - 3]
lea rdx, [rcx - 4]
imul rax, rdx
imul rax, rsi
add rcx, -8
lea edx, [rcx + 3]
cmp edx, 1
ja LBB0_6
LBB0_7:
ret
---
Not sure about how it arrives at the crazily unrolled loop, but
no recursion in sight anymore.
— David
More information about the Digitalmars-d-announce
mailing list