[flac-dev] Again about encoding speed of different compiles

lvqcl lvqcl.mail at gmail.com
Wed Oct 9 08:03:20 PDT 2013

Erik de Castro Lopo wrote:

> Googling suggests that use of restrict is a little controvertial.

Maybe, but Opus encoder uses this keyword in its en-/decoding routines.
So I think it's not dangerous.

> Also, do you have any idea why this causes such a slow down in VS10 and
> VS12?

Without __restrict, VS12 generates the following pattern:
	mov	eax, DWORD PTR [edi+32]
	adc	esi, edx
	imul	DWORD PTR [ebx+8]
	add	ecx, eax

With __restrict:
	mov	eax, DWORD PTR [ecx+16]
	mov	DWORD PTR tv7279[esp+116], eax
	mov	DWORD PTR tv7278[esp+116], edx

followed by

	push	DWORD PTR tv7278[esp+116]
	mov	eax, DWORD PTR [ebx+24]
	push	DWORD PTR tv7279[esp+120]
	adc	edi, edx
	push	edx
	push	eax
	call	__allmul
	add	esi, eax

I have no idea why it does this. Maybe it tries to "optimize"
32bit * 32bit -> 64bit multiplication?

More information about the flac-dev mailing list