avr-gcc: Optimierung von Addition uint8_t + int8_t

Gast #4776974
Lesenswert?
• ▲
▼
Hallo,

mir ist gerade aufgefallen, dass avr-g++ (im Gegensatz zu avr-gcc) 
folgendes nicht durchoptimiert:
1
volatile signed char s;
2
volatile unsigned char i;
3
int main() {
4
  s += i;
5
}


avr-g++ macht daraus:
1
volatile signed char s;
2
volatile unsigned char i;
3
int main() {
4
  s += i;
5
  7c:  80 91 60 00   lds  r24, 0x0060  ; 0x800060 <_edata>
6
  80:  20 91 61 00   lds  r18, 0x0061  ; 0x800061 <s>
7
  84:  90 e0         ldi  r25, 0x00  ; 0
8
  86:  82 0f         add  r24, r18
9
  88:  91 1d         adc  r25, r1
10
  8a:  27 fd         sbrc  r18, 7
11
  8c:  9a 95         dec  r25
12
  8e:  80 93 61 00   sts  0x0061, r24  ; 0x800061 <s>
13
  for (;;) {
14

15
  }

avr-gcc dagegen optimiert das obere Byte weg:
1
volatile signed char s;
2
volatile unsigned char i;
3
int main() {
4
  s += i;
5
  7c:  80 91 60 00   lds  r24, 0x0060  ; 0x800060 <_edata>
6
  80:  90 91 61 00   lds  r25, 0x0061  ; 0x800061 <s>
7
  84:  89 0f         add  r24, r25
8
  86:  80 93 61 00   sts  0x0061, r24  ; 0x800061 <s>
9
}
Vermutlich greift ein Pattern nicht beim Optimieren.

Ich schreibs hierher, da ich z.Zt. keine Möglichkeit habe, mich auf dem 
Bugzilla anzumelden und es bis dahin sicher wieder vergessen habe...

Danke und Grüße,
Nase

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.