Thema: Delphi MMX: DWord -> QWord

Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

MMX: DWord -> QWord

  Alt 25. Okt 2005, 17:13
Hiho, mal eine Frage an unsere MMX-Spezis.

Ich möchte gerne mehrere Farbwerte zueinander addieren, dabei aber pro Farbe auch Werte von über 255 zulassen. In meinem Fall würde ein Word reichen. Somit kam ich drauf, das mit MMX zu tun, da in die Register ja genau 4 Words hinein passen.
Damit ich überhaupt einen QuadWord-Datentyp habe, an den ich das Ergebnis übergeben kann, habe ich mir folgenden Typ deklariert:
Delphi-Quellcode:
type
  TColor64 = packed record
    a, r, g, b: Word;
  end;
Mit folgender Routine addiere ich nun ein paar Farbwerte in einer Schleife zusammen:
Delphi-Quellcode:
var
  c: DWord;
  acc: TColor64;
.
.
  asm
    MOVD MM1, c
    PUNPCKLBW MM1, MM0
    MOVQ MM2, acc
    PADDUSW MM1, MM2
    MOVQ acc, MM1
    EMMS
  end;
Das scheint nur leider nicht so zu klappen - die Werte die hinten herauskommen sind schlicht nicht plausibel. Allein schon das reine Entpacken von "c" in "acc" mit folgendem Code führt zu nicht nachvollziehbaren Ergebnissen:
Delphi-Quellcode:
asm
  MOVD MM1, c
  PUNPCKLBW MM1, MM0
  MOVQ acc, MM1
  EMMS
end;
In "acc" stehen nachher wilde Werte. Bytes vertauschen hat subjektiv jetzt auch nicht grad geholfen, und das "acc" in "[acc]" zu ändern auch nicht wirklich...

Ziel wäre also, dass wenn in "c" z.B. $FF0000C0 steht, nachher acc.a=255(FF), acc.r=0, acc.g=0, acc.b=192(C0) wird. Wo liegt mein Hirnknoten?

Besten Dank schonmal!
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat