System programming in D (Was: The God Language)

Mike Wey mike-wey at example.com
Sat Dec 31 05:05:31 PST 2011


On 12/31/2011 02:59 AM, so wrote:
> On Sat, 31 Dec 2011 03:40:43 +0200, Iain Buclaw <ibuclaw at ubuntu.com> wrote:
>
>> Take a pick of any examples posted on this ML. They are far better
>> fit to use as a test bed. Ideally one that does number crunching and
>> can't be easily folded away.
>
> Well not them but another dummy function, i didn't think it would differ
> this much.
>

real test() nothrow pure

> real test() // test.d
> real test() @inline // test_inl.d
> {
> real a=423123, b=432, c=10, d=100, e=4045, f=123;
> a = a / b * c / d + e - f;
> b = a / b * c / d + e - f;
> c = a / b * c / d + e - f;
> d = a / b * c / d + e - f;
> e = a / b * c / d + e - f;
> f = a / b * c / d + e - f;
> a = a / b * c / d + e - f;
> b = a / b * c / d + e - f;
> c = a / b * c / d + e - f;
> d = a / b * c / d + e - f;
> e = a / b * c / d + e - f;
> f = a / b * c / d + e - f;
> a = a / b * c / d + e - f;
> b = a / b * c / d + e - f;
> c = a / b * c / d + e - f;
> d = a / b * c / d + e - f;
> e = a / b * c / d + e - f;
> f = a / b * c / d + e - f;
> return f;
> }
>
> void main()
> {
> for(uint i=0; i<1_000_000_0; ++i)
> test();
> }

When marking the function as pure and nothrow dmd is able to optimize 
the loop:

.text._Dmain	segment
	assume	CS:.text._Dmain
_Dmain:
		push	RBP
		mov	RBP,RSP
		xor	EAX,EAX
L6:		inc	EAX
		cmp	EAX,0989680h
		jb	L6
		xor	EAX,EAX
		pop	RBP
		ret
.text._Dmain	ends


-- 
Mike Wey


More information about the Digitalmars-d mailing list