![]() |
MMX: DWord -> QWord
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:
Mit folgender Routine addiere ich nun ein paar Farbwerte in einer Schleife zusammen:
type
TColor64 = packed record a, r, g, b: Word; end;
Delphi-Quellcode:
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:
var
c: DWord; acc: TColor64; . . asm MOVD MM1, c PUNPCKLBW MM1, MM0 MOVQ MM2, acc PADDUSW MM1, MM2 MOVQ acc, MM1 EMMS end;
Delphi-Quellcode:
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... :stupid:
asm
MOVD MM1, c PUNPCKLBW MM1, MM0 MOVQ acc, MM1 EMMS end; 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 |
Re: MMX: DWord -> QWord
Okay, Problem gelöst :)
Ein MOVQ kann wohl nicht in eine Speicheradresse schreiben, sondern nur auf MMX-Register. Schade dass das die IDE nicht bemerkt, und auch zur Laufzeit kein Fehler ausgespuckt wird. Die Lösung ist: Erst niederwertiges DWord wegschreiben, dann 32 Bits shiften, dann wieder das neue low-DWord speichern. Nachher noch zu Words zerfrickeln, und die Sache ist gegessen. Nicht ganz so schön wie ich mir das gewünscht hätte, aber immernoch schneller als ohne MMX :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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