Warum ist der Mac-ABI erfordert 16-byte-stack-Ausrichtung für x86-32?

Kann ich verstehen, diese Anforderung für die alten PPC-RISC-Systemen und auch für x86-64, sondern für die alte erprobte und wahre x86? In diesem Fall wird der Stapel ausgerichtet werden muss auf 4-byte-Grenzen nur. Ja, einige der MMX/SSE Anweisungen erforderlich 16byte Ausrichtungen, aber wenn, dass ist eine Anforderung von den angerufenen, dann sollte Sie für die Zuordnungen korrekt sind. Warum Last jeder Anrufer mit dieser zusätzlichen Anforderung? Dies kann tatsächlich dazu führen, dass einige Tropfen in die Leistung, da jeder call-site verwalten müssen diese Anforderung. Bin ich etwas fehlt?

Update: Nach einigen weiteren Untersuchung dieser und einiger Beratung mit einigen internen Kolleginnen und Kollegen, ich habe einige Theorien darüber:

  1. Konsistenz zwischen der PPC -, x86-und x64-version des OS
  2. Es scheint, dass die GCC-codegen jetzt konsequent wird eine sub esp,xxx und dann "mov"s die Daten auf den Stapel, anstatt einfach ein "push" - Anweisung. Dies könnte sogar schneller sein auf einige hardware.
  3. Während dies erschwert die call sites ein wenig, es gibt sehr wenig zusätzlichen overhead bei Verwendung des Standard "cdecl" - convention, wo der Aufrufer bereinigt den stack.

Habe ich ein Problem mit dem letzten Punkt, ist, dass für den Aufruf-Konventionen, die sich auf die aufgerufene Reinigung der stack, die oben genannten Anforderungen wirklich "uglifies" die codegen. Zum Beispiel, was manche compiler beschlossen, die eine schnellere register-basierten Aufruf Stil für seine eigene interne Verwendung (ie-code, der ist nicht dazu da, genannt zu werden, die aus anderen Sprachen oder Quellen)? Diese stack-alignment-Sache verneinen könnte, einige der performance-Gewinne erreicht durch die übergabe einiger Parameter in Registern.

Update: bisher die einzige wirkliche Antworten wurden Konsistenz, aber für mich ist das eine etwas zu einfache Antwort. Ich habe über 20 Jahre Erfahrung mit der x86-Architektur, und wenn die Konsistenz, nicht die Leistung, oder etwas anderes konkretes ist, ist wirklich der Grund, dann ich respektvoll vorschlagen, dass ist ein bisschen naiv für die Entwickler, um es erfordern. Sie ignorieren fast drei Jahrzehnten tools und support. Vor allem, wenn Sie erwarten, dass Anbieter von tools, um schnell und einfach an Ihre Werkzeuge für Ihre Plattform (vielleicht auch nicht... es ist Apple...), ohne zu springen durch mehrere scheinbar unnötige Reifen.

Gebe ich dieses Thema an einem anderen Tag oder so schließen Sie es dann...

Verwandte

  • Nicht-API. ABI (Application Binär - Schnittstelle.
InformationsquelleAutor Allen Bauer | 2009-03-04
Schreibe einen Kommentar