Streaming SIMD Extensions

Streaming SIMD Extensions (SSE) er en IA-32 SIMD multimediautvidelse av x86-arkitekturen, som ble lansert i Intel Pentium III i 1999.

SSE var opprinnelig kjent som KNI (Katmai New Instructions), der «Katmai» var kodenavnet på den første versjonen av Intel Pentium III. Den ble senere omdøpt til ISSE  (Internet Streaming SIMD Extensions), og deretter til SSE.

SSE ble utviklet som et svar på AMDs 3DNow!, som var en forbedring av Intels egen MMX. SSE inneholder 70 nye instruksjoner. AMD tilføyde støtte for SSE i AMD Athlon XP og senere prosessorer.

MMX har to store begrensninger. For det første arbeider det utelukkende med heltall. For det andre kan ikke MMX-instruksjoner utføres uten å bruke desimaltallsenheten.

SSE arbeider med både heltall og desimaltall, uten å bruke desimaltallsenheten.

8 nye registre

SSE tilføyde 8 stk nye 128-bit registre, kalt XMM0–XMM7, og et nytt 32-bit kontroll- og statusregister (MXCSR). Hvert register pakker 4 stk enkelt-presisjons desimaltall. SIMD operasjoner på heltall utføres ved å bruke de 8, allerede eksisterende, 64-bit MMX-registrene.

Bruken av SSE krevde endringer i operativsystemene, fordi x86-arkitekturen måtte utvides med to nye x86-instruksjoner – FXSAVE og FXRSTR, for å lagre og gjenopprette registrenes tilstand uavhengig av og parallelt med desimaltallsenheten. Disse to nye instruksjonene kan også lagre x87-registrenes tilstand, og kan dermed også lagre MMX- og 3DNow!-instruksjoner parallelt med SSE.

Pentium III kunne imidlertid ikke utføre SSE og desimaltallsberegninger samtidig. XMM-registrene tillater imidlertid utførelsen av enkelte SIMD og skalære desimaltallsoperasjoner, uten å redusere ytelsen gjennom kontekst-skifter.

SSE-instruksjoner
SSE introduserte både nye skalære og nye SIMD-instruksjoner.

Desimal-talls instruksjoner

 RAM-til-register / Register-til-RAM / Register-til-register (flytting av data)
 Skalær – MOVSS
 SIMD – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
 Aritmetikk
 Skalær – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS 
 SIMD – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
 Sammenligning av tall
 Skalær – CMPSS, COMISS, UCOMISS 
 SIMD – CMPPS
 Slumptallsgenerering og utpakking av SIMD-instruksjoner
 SIMD – SHUFPS, UNPCKHPS, UNPCKLPS
 Data-type convertering
 Skalær – CVTSI2SS, CVTSS2SI, CVTTSS2SI
 SIMD – CVTPI2PS, CVTPS2PI, CVTTPS2PI  
 Bitvise logiske operasjoner
 SIMD – ANDPS, ORPS, XORPS, ANDNPS

Heltalls-instruksjoner

 Aritmetikk 
 PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
 Flytting av data
 PEXTRW, PINSRW
 Andre
 PMOVMSKB, PSHUFW

Andre instruksjoner

 MXCSR håndtering
 LDMXCSR, STMXCSR
 Håndtering av Cache-RAM og RAM
 MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

Se også
MMX
3DNow!
SSE2
SSE3

x86-instruksjoner
SIMD
IT-relaterte introduksjoner i 1999