From DMD:
_D11benchmark_d14longArithmeticFllZv comdat
assume CS:_D11benchmark_d14longArithmeticFllZv
L0: sub ESP,028h
push EBX
call near ptr _clock
mov 010h[ESP],EAX
mov EDX,03Ch[ESP]
mov EAX,038h[ESP]
mov 018h[ESP],EAX
mov 01Ch[ESP],EDX
mov 020h[ESP],EAX
mov 024h[ESP],EDX
cmp EDX,034h[ESP]
jg LDE
jl L3B
cmp EAX,030h[ESP]
jae LDE
L3B: mov EAX,020h[ESP]
mov EDX,024h[ESP]
add dword ptr 020h[ESP],1
adc dword ptr 024h[ESP],0
sub 018h[ESP],EAX
sbb 01Ch[ESP],EDX
mov EAX,020h[ESP]
mov EDX,024h[ESP]
add dword ptr 020h[ESP],1
adc dword ptr 024h[ESP],0
add 018h[ESP],EAX
adc 01Ch[ESP],EDX
mov EBX,020h[ESP]
mov ECX,024h[ESP]
add dword ptr 020h[ESP],1
adc dword ptr 024h[ESP],0
mov EAX,018h[ESP]
mov EDX,01Ch[ESP]
imul ECX,EAX
imul EDX,EBX
add ECX,EDX
mul EBX
add EDX,ECX
mov 018h[ESP],EAX
mov 01Ch[ESP],EDX
mov EBX,020h[ESP]
mov ECX,024h[ESP]
add dword ptr 020h[ESP],1
adc dword ptr 024h[ESP],0
push ESI
push EDI
call near ptr __LDIV@
pop EDI
pop ESI
mov 018h[ESP],EAX
mov 01Ch[ESP],EDX
mov EDX,024h[ESP]
mov EAX,020h[ESP]
cmp EDX,034h[ESP]
jl L3B
jg LDE
cmp EAX,030h[ESP]
jb L3B
LDE: push dword ptr 034h[ESP]
push dword ptr 034h[ESP]
call near ptr _clock
sub EAX,018h[ESP]
mov 010h[ESP],EAX
fild dword ptr 010h[ESP]
sub ESP,8
fstp qword ptr [ESP]
push offset FLAT:_DATA
call near ptr _printf
push dword ptr 038h[ESP]
push dword ptr 038h[ESP]
push offset FLAT:_DATA[03Ch]
call near ptr _printf
push dword ptr 03Ch[ESP]
push dword ptr 03Ch[ESP]
push offset FLAT:_DATA[048h]
call near ptr _printf
add ESP,02Ch
pop EBX
add ESP,028h
ret 010h
_D11benchmark_d14longArithmeticFllZv ends
_D11benchmark_d12nested_loopsFiZv comdat
assume CS:_D11benchmark_d12nested_loopsFiZv
L0: sub ESP,01Ch
push EBX
push EBP
push ESI
push EDI
mov EBX,EAX
call near ptr _clock
mov 018h[ESP],EAX
xor ESI,ESI
mov 01Ch[ESP],ESI
test EBX,EBX
jle L84
L1C: xor ECX,ECX
mov 020h[ESP],ECX
test EBX,EBX
jle L7A
L26: xor EDX,EDX
mov 024h[ESP],EDX
test EBX,EBX
jle L70
L30: xor EBP,EBP
test EBX,EBX
jle L66
L36: xor EDI,EDI
test EBX,EBX
jle L61
L3C: xor ECX,ECX
test EBX,EBX
jle L5C
mov EDX,020h[ESP]
add EDX,01Ch[ESP]
add EDX,024h[ESP]
add EDX,EBP
add EDX,EDI
L52: lea EAX,[EDX][ECX]
add ESI,EAX
inc ECX
cmp ECX,EBX
jl L52
L5C: inc EDI
cmp EDI,EBX
jl L3C
L61: inc EBP
cmp EBP,EBX
jl L36
L66: inc dword ptr 024h[ESP]
cmp 024h[ESP],EBX
jl L30
L70: inc dword ptr 020h[ESP]
cmp 020h[ESP],EBX
jl L26
L7A: inc dword ptr 01Ch[ESP]
cmp 01Ch[ESP],EBX
jl L1C
L84: push ESI
call near ptr _clock
sub EAX,01Ch[ESP]
mov 014h[ESP],EAX
fild dword ptr 014h[ESP]
sub ESP,8
fstp qword ptr [ESP]
push offset FLAT:_DATA[05Ch]
call near ptr _printf
add ESP,010h
pop EDI
pop ESI
pop EBP
pop EBX
add ESP,01Ch
ret
_D11benchmark_d12nested_loopsFiZv ends
__Dmain comdat
assume CS:__Dmain
L0: push EAX
push 2
push 0540BE400h
push 2
push 08FA6AE00h
call near ptr _D11benchmark_d14longArithmeticFllZv
mov EAX,028h
call near ptr _D11benchmark_d12nested_loopsFiZv
xor EAX,EAX
pop ECX
ret
__Dmain ends
end
===================================================
From GCC:
.def _nested_loops; .scl 2; .type 32; .endef
_nested_loops:
pushl %ebp
pushl %edi
pushl %esi
xorl %esi, %esi
pushl %ebx
subl $60, %esp
movl 80(%esp), %ebx
call _clock
testl %ebx, %ebx
movl %eax, 36(%esp)
jle L15
leal (%ebx,%ebx), %eax
movl %eax, 56(%esp)
movl $0, 40(%esp)
L4:
movl 40(%esp), %edx
movl 56(%esp), %eax
movl $0, 44(%esp)
leal (%ebx,%edx), %edx
movl %eax, 52(%esp)
movl %edx, 28(%esp)
L14:
movl 40(%esp), %edx
movl 44(%esp), %eax
movl $0, 48(%esp)
addl %edx, %eax
movl 44(%esp), %edx
addl 28(%esp), %edx
movl %eax, 32(%esp)
movl %edx, 20(%esp)
L12:
movl 48(%esp), %edx
movl 52(%esp), %eax
movl 48(%esp), %edi
movl 48(%esp), %ebp
addl 20(%esp), %edi
addl 32(%esp), %ebp
addl %eax, %edx
movl %edx, 24(%esp)
L10:
movl %ebp, %ecx
.p2align 4,,7
L8:
xorl %edx, %edx
.p2align 4,,7
L5:
leal (%edx,%ecx), %eax
addl $1, %edx
addl %eax, %esi
cmpl %ebx, %edx
jne L5
addl $1, %ecx
cmpl %ecx, %edi
jne L8
addl $1, %edi
addl $1, %ebp
cmpl 24(%esp), %edi
jne L10
addl $1, 48(%esp)
cmpl %ebx, 48(%esp)
jne L12
addl $1, 44(%esp)
addl $1, 52(%esp)
cmpl %ebx, 44(%esp)
jne L14
addl $1, 40(%esp)
addl $1, 56(%esp)
cmpl %ebx, 40(%esp)
jne L4
L15:
call _clock
movl %esi, 12(%esp)
subl 36(%esp), %eax
pushl %eax
fildl (%esp)
addl $4, %esp
fstpl 4(%esp)
movl $LC0, (%esp)
call _printf
addl $60, %esp
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.def ___divdi3; .scl 2; .type 32; .endef
.section .rdata,"dr"
.align 4
LC2:
.ascii "Long arithmetic elapsed time: %1.0f ms with longMax %I64d\12\0"
LC3:
.ascii " i: %I64d\12\0"
LC4:
.ascii " longResult: %I64d\12\0"
.text
.p2align 4,,15
.globl _longArithmetic
.def _longArithmetic; .scl 2; .type 32; .endef
_longArithmetic:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
subl $92, %esp
movl 116(%esp), %edx
movl 124(%esp), %ecx
movl 112(%esp), %eax
movl %edx, 44(%esp)
movl 120(%esp), %edx
movl %ecx, 36(%esp)
movl %eax, 40(%esp)
movl %edx, 32(%esp)
call _clock
movl 36(%esp), %ecx
cmpl %ecx, 44(%esp)
movl %eax, %ebp
jl L21
jle L32
L23:
movl 40(%esp), %eax
movl 44(%esp), %edx
movl %eax, 80(%esp)
movl %edx, 84(%esp)
movl %eax, 48(%esp)
movl %edx, 52(%esp)
jmp L24
L32:
movl 32(%esp), %ebx
cmpl %ebx, 40(%esp)
jae L23
L21:
movl 40(%esp), %edx
movl 44(%esp), %ecx
movl 44(%esp), %ebx
movl 40(%esp), %esi
addl $4, %edx
movl 44(%esp), %edi
adcl $0, %ecx
movl 40(%esp), %eax
movl %ecx, 60(%esp)
movl 40(%esp), %ecx
movl %edx, 56(%esp)
movl 44(%esp), %edx
addl $1, %ecx
adcl $0, %ebx
addl $2, %esi
adcl $0, %edi
addl $3, %eax
adcl $0, %edx
movl %ecx, 64(%esp)
movl 44(%esp), %ecx
movl %edx, 76(%esp)
movl 40(%esp), %edx
movl %ebx, 68(%esp)
movl %eax, 72(%esp)
movl %ecx, 84(%esp)
movl %edx, 80(%esp)
movl %edx, 48(%esp)
movl %ecx, 52(%esp)
.p2align 4,,7
L31:
movl 80(%esp), %eax
movl %edi, %ebx
movl 84(%esp), %edx
subl 48(%esp), %eax
sbbl 52(%esp), %edx
addl 64(%esp), %eax
adcl 68(%esp), %edx
imull %eax, %ebx
movl %edx, %ecx
imull %esi, %ecx
mull %esi
addl %ebx, %ecx
movl 76(%esp), %ebx
leal (%ecx,%edx), %edx
movl 72(%esp), %ecx
movl %eax, (%esp)
movl %edx, 4(%esp)
movl %ebx, 12(%esp)
movl %ecx, 8(%esp)
call ___divdi3
addl $4, 48(%esp)
adcl $0, 52(%esp)
addl $4, 56(%esp)
adcl $0, 60(%esp)
addl $4, 64(%esp)
adcl $0, 68(%esp)
addl $4, %esi
adcl $0, %edi
movl %eax, 80(%esp)
movl 56(%esp), %eax
movl %edx, 84(%esp)
movl 60(%esp), %edx
addl $4, 72(%esp)
adcl $0, 76(%esp)
addl $-4, %eax
adcl $-1, %edx
cmpl %edx, 36(%esp)
jg L31
jge L33
L24:
call _clock
movl 32(%esp), %edx
movl 36(%esp), %ecx
movl %edx, 12(%esp)
movl %ecx, 16(%esp)
subl %ebp, %eax
pushl %eax
fildl (%esp)
addl $4, %esp
fstpl 4(%esp)
movl $LC2, (%esp)
call _printf
movl 52(%esp), %ebx
movl 48(%esp), %ecx
movl $LC3, (%esp)
movl %ebx, 8(%esp)
movl %ecx, 4(%esp)
call _printf
movl 80(%esp), %eax
movl 84(%esp), %edx
movl $LC4, 112(%esp)
movl %eax, 116(%esp)
movl %edx, 120(%esp)
addl $92, %esp
popl %ebx
popl %esi
popl %edi
popl %ebp
jmp _printf
.p2align 4,,7
L33:
cmpl %eax, 32(%esp)
ja L31
jmp L24
.def ___main; .scl 2; .type 32; .endef
.p2align 4,,15
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
pushl %edi
pushl %esi
xorl %esi, %esi
pushl %ebx
pushl %ecx
subl $72, %esp
call ___main
movl $-1884901888, 8(%esp)
movl $2, 12(%esp)
movl $1410065408, (%esp)
movl $2, 4(%esp)
call _longArithmetic
call _clock
movl $0, 40(%esp)
movl $2340, 48(%esp)
movl %eax, 36(%esp)
L35:
movl 48(%esp), %eax
subl $1560, %eax
movl %eax, 64(%esp)
movl 48(%esp), %eax
movl %eax, 60(%esp)
movl 40(%esp), %eax
movl %eax, 52(%esp)
addl $40, %eax
movl %eax, 28(%esp)
L41:
movl 60(%esp), %eax
movl $0, 44(%esp)
movl %eax, 56(%esp)
movl 64(%esp), %eax
movl %eax, 68(%esp)
movl 52(%esp), %eax
addl $40, %eax
movl %eax, 32(%esp)
L39:
movl 44(%esp), %ebp
movl 32(%esp), %ebx
movl 68(%esp), %edi
addl 52(%esp), %ebp
addl 44(%esp), %ebx
L37:
movl %ebp, %edx
movl %edi, %ecx
L44:
leal (%edx,%ecx), %eax
addl $1, %edx
addl %eax, %esi
addl $39, %ecx
cmpl %ebx, %edx
jne L44
addl $39, %edi
addl $1, %ebp
addl $1, %ebx
cmpl 56(%esp), %edi
jne L37
addl $1, 44(%esp)
addl $39, 56(%esp)
addl $39, 68(%esp)
cmpl $40, 44(%esp)
jne L39
addl $1, 52(%esp)
movl 28(%esp), %eax
addl $39, 64(%esp)
addl $39, 60(%esp)
cmpl %eax, 52(%esp)
jne L41
addl $1, 40(%esp)
addl $39, 48(%esp)
cmpl $40, 40(%esp)
jne L35
call _clock
movl %esi, 12(%esp)
subl 36(%esp), %eax
pushl %eax
fildl (%esp)
addl $4, %esp
fstpl 4(%esp)
movl $LC0, (%esp)
call _printf