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.
Lesezeichen