Doch, das lässt er natürlich Habe den C code mal in eine eigene Funktion gepackt:
Code:
uint16_t test( uint16_t op1, uint16_t op2, uint16_t op3)
{
	uint16_t result;

   	result = op1*op2+op3; // <- Das hier

	return result;
}
Da kommt bei mir mit -O2 folgende Assemblercode raus:
Code:
test:
.LFB3:
.LM7:
/* prologue: frame size=0 */
/* prologue end (size=0) */
	movw r18,r22
.LM8:
	mul r24,r18
	movw r22,r0
	mul r24,r19
	add r23,r0
	mul r25,r18
	add r23,r0
	clr r1
	movw r24,r22
.LM9:
	add r24,r20
	adc r25,r21
/* epilogue: frame size=0 */
	ret
/* epilogue end (size=1) */
Ist also immer noch erheblich langsamer als die Fixpunktimplementierung. Kommt hinzu, dass, wie bereits gesagt, das Clipping in C nicht so einfach zu realisieren ist.