[asm] Jak najszybciej sprawdzić czy rejestr XMM jest zerowy?

0

Jak najszybciej sprawdzić czy cały 128 bitowy rejestr XMM zawiera same zera? (przechowuję w nim tylko wartości całkowite)
Najprościej można to zrobić tak:
...ale zależy mi na bardziej wydajnym rozwiązaniu.

;DATA
tmp	dd	4 dup(?)

;CODE
movdqa [tmp], xmm0
mov    eax, [tmp+0]
mov    ebx, [tmp+4]
or     eax, [tmp+8]
or     ebx, [tmp+12]
or     eax, ebx
jz     xmm0_zawiera_same_zera
0

może coś takiego?

pxor          xmm7, xmm7
pcmpeqd       xmm7, xmm0
pmovmskb      eax, xmm7
cmp           ax, -1 ; ew. 'inc ax'
jz            _zero  

raczej w programach z SSE unika się rozgałęzień i stosuje maski bitowe, ale skoro musi być skok warunkowy to... Cóż, pomyślę jeszcze jak to zapisać inaczej - może da się usunąć jedną instrukcję. Nie mogę sprawdzić powyższego kodu - mam tylko Pentiuma III, bez SSE2... ale chodzić powinien.

1 użytkowników online, w tym zalogowanych: 0, gości: 1