Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi 16 Byte Alignment? (SSE) (https://www.delphipraxis.net/165047-16-byte-alignment-sse.html)

himitsu 13. Dez 2011 09:18

AW: 16 Byte Alignment? (SSE)
 
Das ALIGN hat dann allerdings nur auf direkte Variablen (lokal, global oder als Feld) eine wirkung, aber indirekt ist das auch schon bei Pointern (GetMem und Co.) gegeben, denn FastMM richtet jeden Speicher schon seit Jahren so aus und nutzt selber SSE-Moves, oder warn's MMX?.

Memnarch 13. Dez 2011 09:31

AW: 16 Byte Alignment? (SSE)
 
@Himi: Klär mich auf, bei mir sind nur die globalen aligned, die lokalen NICHT(wahrscheinlich weil die funktionen erst gar nicht aligned werden v.v).


PS:

kan mir mal jemdan den unterschied zwischen:

Delphi-Quellcode:
function name():TTest
asm
  movups [result], xmm0;
end;
und


Delphi-Quellcode:
function name():TTest
begin
  asm
    movups [result], xmm0;
  end;
end;
erklären? Bei letzterem würde ich nämlich nen Operandsize missmatch error bekommen o.O

TRomano 13. Dez 2011 10:25

AW: 16 Byte Alignment? (SSE)
 
Ich denke, dass bei deiner ersten Version kein Stack-Rahmen angelegt wird, bei der zweiten, mit "begin ... end" umschlossenen sehr wohl.

Neutral General 13. Dez 2011 10:33

AW: 16 Byte Alignment? (SSE)
 
Davon abgesehen funktioniert die 2. Methode ab XE2 nicht mehr.

Memnarch 13. Dez 2011 10:42

AW: 16 Byte Alignment? (SSE)
 
@NeutralGeneral: Da gehts dan nur mit kompletten ASM funktionen oder gar nicht, richtig?(wegen inline asm)

Uwe Raabe 13. Dez 2011 10:48

AW: 16 Byte Alignment? (SSE)
 
Zitat:

Zitat von Neutral General (Beitrag 1141110)
Davon abgesehen funktioniert die 2. Methode ab XE2 nicht mehr.

Unter 32-Bit sollte es prinzipiell schon noch gehen. Lediglich unter 64-Bit gibt es kein Inline-Assembler mehr.

himitsu 13. Dez 2011 12:33

AW: 16 Byte Alignment? (SSE)
 
Delphi alignmentiert :lol: standardmäßig nur soweit, wie es jeweils der größte Type verlangt.

Deine Double sind nur 8 Byte, also werden sie auch an 8 Byte-Grenzen ausgerichtet.

Bytes werden an Byte-Grenzen ausgerichtet, wie z.B. ein
Delphi-Quellcode:
array[0..7] of Byte
oder ein Record mit 8 Byte, da der größe Eineltyp ja ein Byte ist.

himitsu 13. Dez 2011 12:35

AW: 16 Byte Alignment? (SSE)
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1141117)
Zitat:

Zitat von Neutral General (Beitrag 1141110)
Davon abgesehen funktioniert die 2. Methode ab XE2 nicht mehr.

Unter 32-Bit sollte es prinzipiell schon noch gehen. Lediglich unter 64-Bit gibt es kein Inline-Assembler mehr.



Zitat:

Lediglich unter 64-Bit gibt es kein Inline-Assembler mehr.
Den sollte es noch geben (für z.B. Win32), aber es gibt keine gemischten Assembler/Pascal-Codes mehr.
> die ganze Funktion in Assembler oder garnichts (die haben es sich halt leicht gemacht und diesen MixedMode garnicht erst implementiert)

Memnarch 13. Dez 2011 14:07

AW: 16 Byte Alignment? (SSE)
 
@Himitsu: Hab mir jetzt unter D7 eine art MemoryManager geschrieben.

Die klasse implimentiert unter anderem die methoden MemGet/MemFree.

MemGet hat neben der angefragten größe noch einen parameter Alignment. Mein Manager spuckt dann auch nur ne adresse aus, die an dem Parameter Alignment ausgerichtet ist :D

himitsu 13. Dez 2011 14:18

AW: 16 Byte Alignment? (SSE)
 
Du könntest natürlich auch einfach FastMM einbinden. (der ist eh besser, als der alte DelphiMM)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz