A Supplemental Streaming SIMD Extensions 3 (SSSE3 vagy SSE3S) az Intel által létrehozott SIMD-utasításkészlet, az SSE-technológia negyedik változata.
Az SSSE3-at az Intel Core mikroarchitektúrán alapuló processzoraiba 2006. június 26-án vezette be a Woodcrest Xeonokkal.
Az SSSE3-ra Tejas New Instructions (TNI) és Merom New Instructions kódnéven hivatkoztak az első azt támogatni kívánt processzorváltozatokra.
Az SSSE3 16 új utasítást tartalmaz, melyek 64 bites MMX- vagy 128 bites XMM-regisztereken is működhetnek. Ezért az Intel közleményei 32 új utasításról szólnak. Ezek közé az alábbiak tartoznak:[1]
Az alábbi táblázatban a satsw(X) (olv. „saturate to signed word”, jelentése: „töltsd fel előjeles szóra”) egy előjeles X egészet átalakít −32768-ra, ha annál kisebb, +32767-re, ha annál nagyobb, ellenkező esetben változatlanul hagyja. Az Intel-architektúrának megfelelően a bájtok 8, a szavak 16, a duplaszavak 32 bitesek, a „regiszter” MMX- vagy XMM-vektorregiszter.[1]
Utasítás | Jelentés | Magyarázat |
---|---|---|
PSIGNB , PSIGNW , PSIGND
|
Packed Sign | Egy bájt-, szó- vagy duplaszóregiszter elemeit negálja, ha egy másik regiszter megfelelő elemei negatívak. |
PABSB , PABSW , PABSD
|
Packed Absolute Value | Egy bájt-, szó- vagy duplaszóregiszter értékeit egy másik regiszter abszolút értékeivel tölti fel. |
PALIGNR
|
Packed Align Right | Két regiszter értékeit összefűzi, és az eltolódás regiszterhosszú részét adja ki, melyet az utasításban kódolt közvetlen érték ad meg. |
PSHUFB
|
Packed Shuffle Bytes | A = [a0 a1 a2 …] és B = [b0 b1 b2 …] bemeneti regiszterek esetén A elemeit lecseréli az [ab0 ab1 ab2 …] sorozatra, de az i. elemet 0-ra cseréli, ha bi első bitje 1. |
PMULHRSW
|
Packed Multiply High with Round and Scale | Az A és B regiszterek 16 bites szavait előjeles 16 bites –1 és +0,99996948… közti fixpontos számokként kezeli (például a 0x4000-et +0,5-ként, a 0xA000-t −0,75-ként kezeli), és megfelelő kerekítéssel összeszorozza őket. |
PMADDUBSW
|
Multiply and Add Packed Signed and Unsigned Bytes | A és B regiszterek bájtjait összeszorozza, páronként összeadja, előjelesen tölti, az eredményt tárolja. [a0 a1 a2 …] PMADDUBSW [b0 b1 b2 …] = [satsw(a0b0 + a1b1) satsw(a2b2 + a3b3) ...]
|
PHSUBW , PHSUBD
|
Packed Horizontal Subtract (Words or Doublewords) | A = [a0 a1 a2 …] és B = [b0 b1 b2 …] bemeneti regiszterekre a kimenet [a0−a1 a2−a3 … b0−b1 b2−b3 …] |
PHSUBSW
|
Packed Horizontal Subtract and Saturate Words | hasonlít a PHSUBW-re, de kimenete [satsw(a0−a1) satsw(a2−a3) … satsw(b0−b1) satsw(b2−b3) ...] |
PHADDW , PHADDD
|
Packed Horizontal Add (Words or Doublewords) | A = [a0 a1 a2 …] és B = [b0 b1 b2 …] bemeneti regiszterekre kimenete [a0+a1 a2+a3 … b0+b1 b2+b3 …] |
PHADDSW
|
Packed Horizontal Add and Saturate Words | hasonlít a PHADDW-re, de kimenete [satsw(a0+a1) satsw(a2+a3) … satsw(b0+b1) satsw(b2+b3) …] |