DCC64

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Delphi-Toolkette


DCC64 ist der Delphi-Compiler von RAD Studio für 64-Bit-Windows.

Ausgabedateien

Dateityp Dateierweiterung Dateiformat
Ausführbar .exe PE32+ (EN)
Gemeinsame Bibliothek .dll PE32+ (EN)
Statische Bibliothek .lib OMF (EN)
Objekt .obj OMF (EN)

Leistungsmerkmale

  • Native Integertypen sind 64 Bit groß.
  • Zeiger sind 64 Bit groß.
  • Dynamische Arrays haben 64-Bit-Indizes.
  • Gleitkommaoperationen können mit einfacher oder doppelter Genauigkeit durchgeführt werden. Gleitkommaoperationen mit der Genauigkeit "extended" werden nicht unterstützt.
  • SHL/SHR-Verhalten: 32-Bit-Integerwerte werden in den 32-Bit-Raum verschoben und 64-Bit-Integerwerte in den 64-Bit-Raum.
  • Das Vermischen von Pascal- und Assembly-Code wird nicht unterstützt.

64-Bit-Inline-Assembler

DCC64 unterstützt 64-Bit-Assembly-Code mit einigen Einschränkungen. Routinen müssen vollständig in Delphi oder in Assembler geschrieben werden (eine Vermischung ist nicht zulässig).

Zur Verwaltung des Stack stehen Pseudo-Ops zur Verfügung. Diese sind in der folgenden Tabelle beschrieben.

Pseudo-Op Beschreibung

.PARAMS#

Verwenden Sie diese Pseudo-Anweisung beim Aufruf externer Funktionen. Diese Pseudo-Anweisung ordnet die Funktionsparameter entsprechend der x64-Aufrufkonvention zu. Damit steht eine Pseudovariable, @params, für die Übergabe von Stack-Parametern an aufgerufene Funktionen zur Verfügung. Verwenden Sie @params als ein Byte-Array, wobei der erste Stack-Parameter @params[32] ist. Die Speicherorte 0-31 repräsentieren die 4 Registerparameter.

.PUSHNV REG

Erzeugt Code zum Speichern und Wiederherstellen des allgemeinen, nicht flüchtigen Registers im Prolog und Epilog.

.SAVENV XMM#

Hat dieselbe Funktionalität wie .PUSHNV REG, außer dass .SAVENV XMM# für nicht flüchtige XMM-Register vorgesehen ist.

.NOFRAME

Erzwingt die Deaktivierung der Erzeugung eines Stack-Frames, solange keine lokalen Variablen deklariert sind und die Parameteranzahl kleiner als 4 ist. Verwenden Sie dieses Pseudo-Op nur für "Leaf"-Funktionen.

Siehe auch