Hallo,
Danke, der erzeugte Code sieht wirklich ganz gut aus.
Schön ist auch, das C das mit Registern regelt, und nicht
stur das RAM benutzt. Wirklich interessant.
Das Array scheint allerdings ein Byte-Array zu sein,
denn er lädt nur Bytes.
Aber C behandelt die Werte ständig als INT. Deshalb
könnte man da deutlich mehr als zwei Befehle weglassen.
Gruß Jan
Hier mal mein Vorschlag:
Code:
red0 = (boden_value_red0[2*i]*256 | boden_value_red0[2*i + 1]) >> 2;
824: f7 01 movw r30, r14
826: 80 81 ld r24, Z ;ersetzen durch "ld r25,Z"
828: 99 27 eor r25, r25 ;weglassen
82a: 98 2f mov r25, r24 ;weglassen
82c: 88 27 eor r24, r24 ;weglassen
82e: 21 81 ldd r18, Z+1 ;ersetzen durch "ldd r24, Z+1"
830: 33 27 eor r19, r19 ;weglassen
832: 82 2b or r24, r18 ;weglassen
834: 93 2b or r25, r19 ;weglassen
836: 95 95 asr r25
838: 87 95 ror r24
83a: 95 95 asr r25
83c: 87 95 ror r24
83e: 68 2f mov r22, r24
oder netto (und gleich r22 benutzt):
movw r30, r14
ld r18, Z
ldd r22, Z+1
asr r18
ror r22
asr r18
ror r22
macht 7 Befehle (und Takte) statt 14
Lesezeichen