SSSE3

A Wikipédiából, a szabad enciklopédiából

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.

Története[szerkesztés]

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.

Funkciók[szerkesztés]

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]

  • 6 (12) horizontális összeadást vagy kivonást végrehajtó utasítás.
  • 3 (6) abszolútérték-számító utasítás.
  • 1 (2) szorzás–összeadás műveletet végrehajtó utasítás, melyek a pontszorzatszámítást gyorsítják.
  • 1 (2) utasítás, melyek gyorsítják az egy regiszteren lévő számok szorzását és egész értékeket adnak skálázással.
  • 1 (2) utasítás, melyek helyben történő bájtonkénti átrendezést hajtanak végre a második irányító operandus függvényében.
  • 3 (6) egy regiszteren lévő egészeket a céloperandusban a forrásban lévő negatív megfelelő elem esetén negáló utasítás.
  • 1 (2) két operandus összetételéből adatot igazító utasítás.

SSSE3-at támogató processzorok[szerkesztés]

Új utasítások[szerkesztés]

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) …]

Jegyzetek[szerkesztés]

  1. a b Intel 64 and IA-32 Architectures Optimization Reference Manual pp. 92-93. Intel.com, 2016. [2018. június 20-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. június 22.)

Források[szerkesztés]

Kapcsolódó szócikkek[szerkesztés]