Hat es einen besonderen Grund, daß du avr-gcc deinen C-Code nicht optimieren lässt (zumindest sieht der erzeugte asm stark danach aus)?Zitat:
Zitat von ogni42
Druckbare Version
Hat es einen besonderen Grund, daß du avr-gcc deinen C-Code nicht optimieren lässt (zumindest sieht der erzeugte asm stark danach aus)?Zitat:
Zitat von ogni42
Doch, das lässt er natürlich :) Habe den C code mal in eine eigene Funktion gepackt:
Da kommt bei mir mit -O2 folgende Assemblercode raus:Code:uint16_t test( uint16_t op1, uint16_t op2, uint16_t op3)
{
uint16_t result;
result = op1*op2+op3; // <- Das hier
return result;
}
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.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) */