Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : assembler-output von gcc auf AMD64-architektur



mouk
24-03-2008, 13:16
Hi!

Ich habe mir mal den Output angesehen den der gcc auf einer AMD64-Maschine ausgibt. Der gcc erzeugt sehr viele Pseudo-Ops wie .LFB2, .LCFI0, etc.
Wenn ich das selbe Programm jedoch auf einer x86-Maschine kompiliere bekomme ich einen wesentlich schlankeren Assembler-Code. Was bedeuten diese ganzen Pseudo-Ops? Im Gnu As Manual sind sie leider nicht dokumentiert und auch in den AMD-Developer-Manuals befindet sich dazu keine Information. Kann ich vielleicht dem gcc irgendwie beibringen nur die nötigste Information in das Assembler-File zu packen?

lg, mouk

undefined
24-03-2008, 13:54
OPS sind vermutlich Meldungen auf der Kernelebene.
Schalte den -fstack-protector ein und du bekommst ausführlichere Meldungen.
Letzteres müsste -fomit-frame-pointer oder -mno-align-stringops erledigen.

Yonibear
27-03-2008, 17:47
Anweisungen wie .LFB2 sind keine Instruktionen, sondern Labels. Der Compiler markiert damit eine Stelle im Code, die er später benutzen kann. Der Assembler ersetzt die Label-Referenzen dann durch Addressen, im kompilierten Code tauchen sie dann auch nicht mehr auf. Von der Performance her musst du dir da also keine Sorgen machen.
Dass der GCC im AMD64-Modus wesentlich mehr Labels als auf x86 setzt, ist mir auch schon aufgefallen, allerdings kann ich dir dafür auch keine richtige Erklärung liefern.