PB und MMX
Verfasst: 06.07.2006 17:02
Hier ein kleines Beispiel für die Verwendung von MMX-Befehlen in PB.
Es werden 8 Bytes gleichzeitig verändert, ohne das ein Byte das andere beeinflusst oder "überläuft". Ein möglicher Einsatzzweck wären Helligkeits-oder Farbänderungen in Bildern usw.
Gruss
Helle
Es werden 8 Bytes gleichzeitig verändert, ohne das ein Byte das andere beeinflusst oder "überläuft". Ein möglicher Einsatzzweck wären Helligkeits-oder Farbänderungen in Bildern usw.
Code: Alles auswählen
;-------- Beispiel für MMX-Addition (Saturationstest)
;-------- Byte-weise Addition ohne Überlauf und mit Rückgabe des Maximal-Wertes FFh (Saturation)
;-------- "Helle" Klaus Helbing 06.07.2006 PB4.0
;-------- Inline-Asm einschalten!!!
;-------- Test auf Verfügbarkeit von MMX geschenkt! Ebenso die Sicherung der FPU-Register-Werte
Global X.l = 0
Global Y.q = 0
Global summand1.q = $ff1111aa111111ee ;irgendwelche Beispiel-Werte
Global summand2.q = $22667788224433cc
*MemoryID = AllocateMemory(8) ;hier nur mal 8 Bytes für einen Quad-Wert reservieren
MOV esi,*MemoryID ;damit kann FAsm so nichts anfangen, deshalb Inline-Asm einschalten!
X = @summand1
MOV ebx,[v_X]
!movq mm0,[ebx] ;mit MMX-Befehlen kann PB nichts anfangen
X = @summand2
MOV ebx,[v_X]
!movq mm1,[ebx]
!paddusb mm0,mm1
!movq [esi],mm0
Y = PeekQ(*MemoryID)
MessageRequester("MMX-Addition (Saturation)",HexQ(Y))
End
Helle