AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XE2 neue calling convention

Ein Thema von Schorschi5566 · begonnen am 12. Sep 2011 · letzter Beitrag vom 13. Sep 2011
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.756 Beiträge
 
Delphi 12 Athens
 
#1

AW: XE2 neue calling convention

  Alt 12. Sep 2011, 21:48
Und er kennt sich mit dem Thema Kryptografie offenbar so gut aus, dass er teilweise Delphifunktionen der Sicherheit wegen umgeschrieben/neugeschrieben hat (siehe Kommentare im Code). Dabei sind eben auch einige Assemblerfunktionen eingeflossen.
In diesem Fall würde ich vorrangig versuchen festzustellen, ob dieses Umschreiben Delphi-eigener Funktionen in XE2 überhaupt noch notwendig ist oder hier sogar kontraproduktiv wirkt. Spätestens bei der Portierung auf MacOS, iOS oder mit den bei XE3 zusätzlichen Zielplattformen wird das wohl kaum zu vermeiden sein. Wenn ich mich recht erinnere, war Assembler in XE2 für x64 anfangs gar nicht vorgesehen...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: XE2 neue calling convention

  Alt 12. Sep 2011, 22:07
Wenn ich viel Zeit hätte würde ich das sicherlich machen.

Ich brauche 'ne Lösung für ein Win64-Projekt und ich möchte dazu DEC verwenden.

Im Übrigen ist Plattformunabhängigkeit nicht das Ende von Assembler, so wie das hier manchmal klingt. Bei DEC spielt Performance sehr wohl eine Rolle, wie man an diversen Tabellen in Hagens Code sehen kann. Pure Pascal ist hier nur eine langsame aber saubere Alternative.

Wenn einer DEC für iOS benötigt, wird er entweder die Assemblerroutinen portieren oder in Pascal schreiben müssen.


Ach und hatte ich gesagt, dass es mir eigentlich nur darum geht, was es für Besonderheiten bei der calling convention des neuen 64-Bit-Compilers gibt? Mir war so.
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#3

AW: XE2 neue calling convention

  Alt 13. Sep 2011, 05:16
In der Hilfe steht das so:
Zitat:
The first four parameters to inline assembler functions are passed via RCX, RDX, R8, and R9 respectively, except for floating-point arguments which use XMMO, XMM1, XMM2, XMM3. The math coprocessor is not normally used from x64 code. Registers used for function parameters can be modified freely.
Nebenbei kannst du statt das Register für das Ergebnis direkt anzusprechen auch @Result benutzen.

Ich habe es gerade kurz ausprobiert, bei mir geht es auch mit RCX und RDX und deine Variante knallt. Auswertung:

XE2ParameterAsm.jpg

Das geht bei mir:
Delphi-Quellcode:
  function IsClass(AObject: Pointer; AClass: TClass): Boolean;
  asm // safer replacement for Delphi's "is" operator
          MOV @Result,0
  @@1: TEST RCX,RCX
          JE @@3
          MOV RCX,[RCX]
          TEST RCX,RCX
          JE @@3
          CMP RCX,RDX
          JE @@2
          MOV RCX,[RCX].vmtParent
          JMP @@1
  @@2: MOV @Result,1
  @@3:
  end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: XE2 neue calling convention

  Alt 13. Sep 2011, 07:56
Hallo Sebastian,

danke für den Test.

Es passt schon so. Im Original ist die Funktion innerhalb einer anderen deklariert und dann wird in RCX RBP abgelegt (hab's gerade geprüft). Damit verschieben sich die anderen Parameter nach RDX und R8. Fragt sich nur warum er das macht. Immerhin passiert das bei Win32 nicht.
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#5

AW: XE2 neue calling convention

  Alt 13. Sep 2011, 08:13
Es passt schon so. Im Original ist die Funktion innerhalb einer anderen deklariert und dann wird in RCX RBP abgelegt (hab's gerade geprüft). Damit verschieben sich die anderen Parameter nach RDX und R8. Fragt sich nur warum er das macht. Immerhin passiert das bei Win32 nicht.
Das dient dazu, damit du in der Funktion auf die Parameter und Variablen der äußeren Funktion zugreifen kannst. In X86 wird das auch gemacht, nur eben mit anderen Registern (ich hatte bei Free Pascal vor einiger Zeit was darüber gelesen, aber ich finde den Teil gerade nicht mehr).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz