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

Odpowiedz Nowy wątek
2006-12-27 02:03

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

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

Pozostało 580 znaków

2006-12-27 17:16

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

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.


I nie udawaj, że rozumiesz.

Pozostało 580 znaków

Odpowiedz

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