2651Fermer2653
bearbecueLe 15/11/2011 à 12:08
et encore mieux, en utilisant xmm4/5 pour eviter une dependance toutes les deux instructions entre les minps/maxps:
	__asm
	{
		mov		eax, streamAligned16
		mov		ebx, count

		movaps	xmm4, [eax]
		add		ebx, ebx
		movaps	xmm5, xmm4
		movaps	xmm6, xmm4
		movaps	xmm7, xmm4
		lea		ebx, [eax + ebx * 8]	// end = stream + count*16
		add		eax, 16
		lea		ecx, [ebx - 64]

		cmp		eax, ecx
		jg		_SkipUnrolled
_LoopUnrolled:
		movaps	xmm0, [eax]
		movaps	xmm1, [eax + 0x10]
		movaps	xmm2, [eax + 0x20]
		movaps	xmm3, [eax + 0x30]

		minps	xmm4, xmm0		// <--
		maxps	xmm5, xmm0		// <--
		add		eax, 64
		minps	xmm6, xmm1
		maxps	xmm7, xmm1
		cmp		eax, ecx
		minps	xmm4, xmm2		// <--
		maxps	xmm5, xmm2		// <--
		minps	xmm6, xmm3
		maxps	xmm7, xmm3

		jbe		_LoopUnrolled


entre 3.5 et 4 * plus rapide que la daube compilee par visual... pfff