AVR-ASM: geht das noch effizienter?

Gast #280622
Lesenswert?

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
Gast #280623
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren