Hallo, ich habe ein dig. Filter, das signed 8-bit Werte multipliziert und dann auf einen 24-bit Akkumulator aufaddiert. Mich ärgert dabei die Sequenz mit clr R25, sbrc, und com R25. Das macht die ganze Performance kaputt, nur weil man auf negative Zahlen Rücksicht nehmen muss... Gibt es da irgendwelche Tricks um das noch zu beschleunigen? Hier der Code: muls R18,R19 // multiply two 8-bit values clr R25 // clear for sign ext. if result is positive sbrc r1,7 // check if result is negative com R25 // neg. sign extension if negative (0xFF) add R22,r0 // add mul result to accumulator adc R23,r1 // next with carry adc R24,R25 // add sign extension
1 | muls R18,R19 // multiply two 8-bit values |
2 | sbc R25, R25 // neg. sign extension if negative (CY = 1) |
3 | add R22,r0 // add mul result to accumulator |
4 | adc R23,r1 // next with carry |
5 | adc R24,R25 // add sign extension |
Peter
Hallo Perter, klasse, vielen Dank. Damit kann ich knapp 1Mio Instructions pro Sekunde sparen ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.