WinAVR auch ohne Union optimierter Code möglich?

Persönliche Seite #2009970
Lesenswert?
• ▲
▼
Karl heinz Buchegger schrieb:

>   *(uint8_t*)&my_int |= my_byte;

Von solchen Hacks würde ich dringend abraten. Type Punning kann 
einerseits zu unerwünschten Optimierungen führen und ist andererseits 
alles andere als hübsch.

@Ingo

Wenn du mit den 3-4 überflüssigen Ticks absolut nicht leben kannst: 
Verwende (Inline)-Assembler, nur der gibt dir garantiert bestimmte 
asm-Sequenzen.
Zudem ein Bugreport für die neueste GCC-Version (4.5.2 bzw. 4.6.0) 
machen, damit diese Optimierung vielleicht irgendwann Teil von avr-gcc 
wird.

Innerhalb von avr-gcc ist das Problem, daß es keinen Königsweg betreffs 
Subreg-Lowering gibt. Dieses geschieht in Pass .149r.subreg1 und 
.182r.subreg2 (in den Dumps mit -da)

Je nach Kontext ist es manchmal günstiger, dieses Lowering zu machen 
(also breite Variablen in 8-Bit-Stücke aufzuspalten), oder aber eine 
Variable in einem Stück zu belassen, so daß nachvollziehbar bleibt, was 
mit ihr geschieht: Ein Haufen von 8-Bit-Fragmenten ist eben nicht immer 
hilfreich...

Die Subreg-Lowering-Passes können mit -f[no-]split-wide-types 
aktiviert/deaktiviert werden, allerdings wird der Schalter nicht im 
avr-Backend berücksichtigt, und je nach Verschalterung sieht ein Backend 
andere Pattern und ist nicht auf deren Verarbeitung/Optimierung 
vorbereitet -- zumindest ist's im avr-Backend so.
OP #2010200
Lesenswert?
• ▲
▼
@Johann
Mir ging es eher um den Flash-Speicher, bin mal wieder kurz vor der 4K 
Grenze. Aber was solls, mit Union's geht das ja sauber. Ich muss nur 
halt den Code auf die Unions umbauen.

@Rolf
> my_int = (uint8_t)my_int | my_byte;
Den Versuch habe ich hinter mir  - und wech ist der Balkon ääh, das 
highByte. Der Compiler macht genau das was man ihm sagt ;-)

Gruß Ingo

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.