SSE4

Streaming SIMD Extensions 4 (SSE4) – rozszerzenie zestawu instrukcji SSE opublikowane w kwietniu 2007 przez firmę Intel. SSE4 wprowadza 54 nowe instrukcje, podzielone na dwie podgrupy (wersje): SSE4.1 zawierający 47 rozkazów oraz SSE4.2 zawierający dodatkowe 7.

Rozkazy SSE4.1 stanowią rozszerzenie istniejących instrukcji wektorowych operujących na liczbach całkowitych oraz zmiennoprzecinkowych; instrukcje MPSADBW i PHMINPOSUW ułatwiają i przyspieszają kompresję wideo. Rozkazy SSE4.2 są bardziej specjalizowane, np. istnieje rozkaz obliczający sumę kontrolną CRC-32, czy liczbę ustawionych bitów, a także instrukcje działające na łańcuchach znaków.

Nowością w SSE4 są rozkazy stałoprzecinkowe, które modyfikują rejestr flag procesora - dotychczas żaden z rozkazów SSE działający na liczbach całkowitych tego nie robił. Ponadto nowe instrukcje wektorowe działają wyłącznie na rejestrach XMM - w SSE2, SSE3 i SSSE3 istniała możliwość przeprowadzania większości obliczeń również na rejestrach MMX.

SSE4 nie wprowadza nowych typów danych, używa typów zdefiniowanych w SSE i SSE2.

Procesory posiadające rozszerzenie SSE4

Rozkazy SSE4.1

InstrukcjaDziałanie
BLENDPS
BLENDPD
BLENDVPS
BLENDVPD
PBLENDVB
PBLENDW
przepisanie tylko wybranych elementów wektorów (wskazanych maską bitową lub maską bajtową).
DPPS
DPPD
obliczanie iloczynu skalarnego.
EXTRACTPS
PEXTRB
PEXTRW
PEXTRD
PEXTRQ
wybranie elementu z wektora (z rejestru XMM) i zapisanie go do rejestru ogólnego przeznaczenia lub pamięci.
INSERTPS
PINSRB
PINSRD
PINSRQ
zapisanie rejestru ogólnego przeznaczenia albo pamięci na wskazanej pozycji wektora.
PMAXSB
PMAXSD
PMAXUB
PMAXD
PMINSB
PMINSD
PMINUB
PMIND
wybranie maskymalnych/minimalnych elementów z dwóch wektorów bajtów lub podwójnych słów (ze znakiem albo bez znaku).
PMULDQ
PMULLD
rozkazy mnożą wektory 32-bitowych liczb ze znakiem; PMULDQ zapisuje wyniki 64-bitowe, natomiast PMULLD tylko młodsze 32 bity wyniku.
PMOVSXBW
PMOVSXBD
PMOVSXBQ
PMOVSXWD
PMOVSXWD
PMOVSXDQ
rozszerzenie zakresu liczb ze znakiem (z 8 na 16, 32 lub 64 bity, z 16 na 32 lub 64 bity, z 32 na 64 bity)
PMOVZXBW
PMOVZXBD
PMOVZXBQ
PMOVZXWD
PMOVZXWD
PMOVZXDQ
rozszerzenie zakresu liczb bez znaku (z 8 na 16, 32 lub 64 bity, z 16 na 32 lub 64 bity, z 32 na 64 bity)
PACKUSDWkonwersja wektora czterech 32-bitowych liczb całkowitych ze znakiem na wektor liczb całkowitych 16-bitowych bez znaku; przy konwersji następuje nasycenie wyniku
PCMPEQQporównanie wektorów poczwórnych słów ze znakiem (elementy 64-bitowe) relacją "równy".
ROUNDPD
ROUNDPS
ROUNDSD
ROUNDSS
zaokrąglanie wektorów lub skalarów liczb zmiennoprzecinkowych pojedynczej bądź podwójnej precyzji. Tryb zaokrąglania jest wybierany w trzecim argumencie (stałej natychmiastowej):
  • tryb zaokrąglania jest ustawiony bezpośrednio w stałej,
  • tryb zaokrąglania taki, jak ustawiony w rejestrze kontrolnym SSE MXSCR.
PHMINPOSUWrozkaz wyszukuje w wektorze liczb 16-bitowych bez znaku wartość najmniejszą; zwraca wartość elementu oraz jego indeks.
PTESTrozkaz pozwala na sprawdzenie, które bity w rejestrze XMM są ustawione; rozkaz modyfikuje rejestr flag mikroprocesora.
MPSADBWrozkaz oblicza 8 kolejnych sum modułów różnic wektorów 4-elementowych.
MOVNTDQAładuje 128 bitów z pamięci, z pominięciem pamięci podręcznej

Rozkazy SSE4.2

InstrukcjaDziałanie
CRC32aktualizacja sumy kontrolnej CRC-32; używany wielomian 11edc6f41h.
POPCNT (ang. population count)zliczenie liczby zapalonych bitów w słowach 16-, 32-, lub 64 bitowych (argumentami mogą być rejestry, bądź adresy pamięci).
PCMPGTQporównanie wektorów poczwórnych słów ze znakiem (elementy 64-bitowe) relacją "większy".
PCMPESTRI
PCMPESTRM
PCMPISTRI
PCMPISTRM
rozkazy działają na łańcuchach bajtów lub słów, ze znakiem lub bez znaku i pozwalają na:
  • stwierdzenie czy łańcuchy są równe,
  • stwierdzenie które znaki z pierwszego łańcucha znajdują się w drugim (ewentualnie czy znajdują się w przedziałach zdefiniowanych w łańcuchu drugim),
  • wyszukanie wystąpień jednego z łańcuchów w drugim.

Rozkazy łańcuchowe (PCMPxSTRx) noszą nazwę STTNI: STring & Text New Instructions.

Bibliografia

  • Intel SSE4 Programming Reference (D91561), kwiecień 2007

Zobacz też