2012-04-03 12 views
2

Bei Verwendung der Inline-Assemblierung mit XLC-Compiler (für PowerPC) werden die Beschriftungen übersetzt und es ist daher unmöglich, den endgültigen Markennamen für Sprünge zu kennen. Beispiel:Wie vermeidet man die Label-Übersetzung bei der Verwendung von Inline-Assembly im XLC-Compiler?

Wenn ich den vorherigen Code mit GCC kompiliere, funktioniert alles wie erwartet. Wenn jedoch XLC verwenden, erzeugt die Baugruppe ist folgende:

... 
.L1 
nop 
b mylabel 
... 

Offensichtlich schlägt das Programm zu kompilieren, weil „mylabel“ wird nie definiert. Die Definition von "Mylabel" wird automatisch in den Namen ".L1" übersetzt. Tatsächlich hängt dieser Name von der Anzahl der definierten lokalen Labels ab. So kann es ".L1", ".L2" sein ...

Ich versuchte mit asm, __asm ​​anstelle von __asm__, aber ich bekomme die gleiche Ausgabe. Das Deaktivieren von Compiler-Optimierungen funktioniert ebenfalls nicht. Kann jemand lokale Label-Namen bei der Generierung von Baugruppen in XLC beibehalten? Irgendein anderer Workaround wird auch helfen.

Danke,

Antwort

1

This sagt Branching to a label in another asm statement is not supported.

Versuchen Sie, alle Ihre Inline-Assembler-Code in einer einzigen __asm__ Aussage etwas wie setzen:

__asm__("mylabel:\n" 
      "nop\n" 
      "b mylabel"); 
+0

Danke. Ich habe deine Lösung versucht und es hat gut funktioniert. Trotzdem weiß ich nicht, warum es so große Kompatibilitätsprobleme gibt ... – user1310915

Verwandte Themen