Einzelnen Beitrag anzeigen

mathias l.

Registriert seit: 23. Dez 2003
Ort: Bei Hamburg
4 Beiträge
 
#2

Re: SIMD-Dll in asm für Delphi

  Alt 23. Dez 2003, 16:07
Hallo nochmal, habe versucht die Matrix-arrays auf diesem Weg an 16-Byte-Grenzen auszurichten, (aber es funktioniert trotzdem noch nicht):

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TRec = packed Record
    Data: packed Array of single; //16 * 4 Byte =>sollte an 16 Byte ausgerichtet sein
  end;
  PRec = ^TRec;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

function MultMatrix(x, y: Pointer): Pointer; stdcall; external 'test.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, c: TRec;
  pa, pb, pc: PRec;
  i: Integer;
begin
  //a,b: Einheitsmatrizen; c: Nullmatrix.
  SetLength(a.Data, 16);
  SetLength(b.Data, 16);
  SetLength(c.Data, 16);

  for i:=0 to 15 do a.Data[i]:=0.0;
  for i:=0 to 15 do b.Data[i]:=0.0;
  for i:=0 to 15 do c.Data[i]:=0.0;
  a.Data[0]:= 1.0;
  a.Data[5]:= 1.0;
  a.Data[10]:= 1.0;
  a.Data[15]:= 1.0;

  b.Data[0]:= 1.0;
  b.Data[5]:= 1.0;
  b.Data[10]:= 1.0;
  b.Data[15]:= 1.0;

  pa:= @a;
  pb:= @b;
  pc:= @c;

  //nach Multiplikation sollte c eine Einheitsmatrix sein
  pc:= MultMatrix(pb, pb);
end;

end.
  Mit Zitat antworten Zitat