Nochwas: Momentan hast du einige Constraints zu eng. Bei mac müssen nur die in-ops des MUL "a" sein, op3 und result darf "r" sein (bzw "d" bei LDI).
Anstatt
Spart folgendes (bei gleiche Laufzeit) 2 Bytes:Code:ldi r24, 0x01 ; result ldi r25, 0x80 ; result brcc 0f ldi r24, 0xff ; result ldi r25, 0x7f ; result
Für weitere Tipps wär es auch hilfreich zu wissen, wohin Du optimieren willst (optimieren willst Du, sonst würdest Du kein asm anfassen).Code:ldi r24, 0x01 ; result ldi r25, 0x80 ; result brcc 0f sbiw r24, 2 ; result
Also: Größe oder Zeit. Klar, man will beides und mit Geschick bekommt man auch beides zu einem gewissen Grad, aber ab einem gewissen Punkt muss man sich dann entscheiden...
Interessant wäre auch, die Saturierung der 16-Bit-Werte in einem sibling call zu machenDas Ärgernis dabei ist, daß es keine Registerklasse für das return-Register r25:r24 gibt.







Zitieren

Lesezeichen