Autor: | Wojciech Muła |
---|---|
Dodany: | 29.04.2008 |
W tej chwili zdecydowana większość rozkazów nadpisuje jeden z argumentów: Ra := Ra op Rb. AMD w swoim SSE5, zaś Intel w AVX zapowiadają wprowadzenie rozkazów trójargumentowych, tj. takich, które pozwalają podać dowolny rejestr docelowy, czyli Rc := Ra op Rb. To rozwiązanie, zapożyczone z RISC, ukrywa jedno przypisanie, które (jak można przypuszczać) na poziomie sprzętowym jest za darmo. Przy okazji zmniejsza się rozmiar kodu.
Obecnie:
movdqa (%eax), %xmm0 ; wczytanie pikseli 0..15 movdqa %xmm0, %xmm1 movdqa %xmm0, %xmm2 movdqa %xmm0, %xmm3 pshufb P03, %xmm0 ; konwersja pikseli 0..3 na ARGB (A=0) ; P03 = {0, 0, 0, 0x80, 1, 1, 1, 0x80, 2, 2, 2, 0x80, 3, 3, 3 0x80} pshufb P47, %xmm1 ; konwersja pikseli 4..7 pshufb P8b, %xmm2 ; konwersja pikseli 8..11 pshufb Pcf, %xmm3 ; konwersja pikseli 12..15 movdqa %xmm0, 0(%ebx) movdqa %xmm1, 16(%ebx) movdqa %xmm2, 32(%ebx) movdqa %xmm3, 48(%ebx)
Z rozkazami trójargumentowymi (AVX):
movdqa (%eax), %xmm0 ; wczytanie pikseli 0..15 vpshufb P47, %xmm0, %xmm1 ; konwersja pikseli 4..7 vpshufb P8b, %xmm0, %xmm2 ; konwersja pikseli 8..11 vpshufb Pcf, %xmm0, %xmm3 ; konwersja pikseli 12..15 pshufb P03, %xmm0 ; konwersja pikseli 0..3 na ARGB (A=0) ; P03 = {0, 0, 0, 0x80, 1, 1, 1, 0x80, 2, 2, 2, 0x80, 3, 3, 3 0x80} movdqa %xmm0, 0(%ebx) movdqa %xmm1, 16(%ebx) movdqa %xmm2, 32(%ebx) movdqa %xmm3, 48(%ebx)