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







Zitieren

Lesezeichen