Az SSE4 az Intel Core mikroarchitektúra utasításkészlete , amelyet először a Penryn sorozatú processzorokban valósítottak meg (nem tévesztendő össze az AMD SSE4A -jával ) [1] .
2006. szeptember 27-én jelentették be , de a részletes leírás csak 2007 tavaszán volt elérhető . A programozóknak szánt új processzorszolgáltatások részletesebb leírása az Intel honlapján található.
Az SSE4 54 utasításból áll, ebből 47 az SSE4.1-hez tartozik (Penryn processzorokban vannak). Az utasítások teljes készlete (SSE4.1 és SSE4.2, azaz 47 + a maradék 7 utasítás) elérhető Nehalem mikroarchitektúrával rendelkező Intel processzorokban, amelyek 2008. november közepén és későbbi kiadásokban jelentek meg. Az SSE4 utasítások egyike sem működik 64 bites mmx regiszterekkel (csak 128 bites xmm0-15 esetén).
Új SSE4 parancsokAlcsoport | A processzor utasításai | Leírás | Várható fejlesztések az alkalmazásban |
---|---|---|---|
Különféle csomagolt duplaszó-műveletek | PMULLD, PMULDQ | Új támogatás négy előjeles (és előjel nélküli) 32x32 bites szorzáshoz utasításonként, valamint előjeles szorzásokhoz, például 32x32->64. | Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására. |
Lebegőpontos pont termék | DPPS, DPPD | Javított feldolgozási teljesítmény az AOS adattípusokhoz (struktúrák tömbje) az egy- és kétpontos precíziós termékek támogatásával. | Háromdimenziós tartalom, játékok készítése. Programozási nyelvek, például CG és HLSL támogatása. |
Csomagolt párosítás | BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDDW | Megállapodás szerint a párosítási művelet egy mezőt másol a forrásból, és továbbítja a célállomásra. Ezek az új processzorutasítások javítják a konjugációs műveletek teljesítményét a legtöbb mezőméretnél, mivel a szorzási műveleteket egyetlen utasításba csomagolják. | Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. Multimédiás és játékforrások. |
Csomagolt egész számok maximális és minimális értékei | PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINDS, PMAXSD | Összehasonlítja a csomagolt előjeles/előjel nélküli bájt/szó/szavas szintű egész értékeket a cél operandusban és a forrás operandusban, és visszaadja a minimális vagy maximális értéket utasításonként minden egyes csomagolt operandushoz a cél operandusban. | Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. |
Lebegőpontos értékek kerekítése | ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD | Hatékonyan kerekíti a skalár és a csomagolt egyszeres vagy dupla precíziós operandust egész értékre, támogatva a Fortran, Java és C99 programozási nyelvek követelményeit. | Képek, grafikák, videó információk feldolgozása. Alkalmazások 2D/3D multimédiás és játékforrásokkal. |
Regiszterek beszúrása/kiadása | INSERTPS, PINSRB, PINSRD, PINSRQ, EXTRACTPS, PEXTRB, PEXTRD, PEXTRW, PEXTRQ | Ezek az új processzorutasítások leegyszerűsítik a GPR-ek (vagy memória) és az XMM-ek közötti beillesztési és kibontási folyamatot. | Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. |
Csomagolt formátum konvertálása | PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ | A dobozos egész értéket (XMM regiszterből vagy memóriából) egy szélesebb típusú, előjeles vagy null kiterjesztésű egész számmá alakítja. | Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. |
Csomagolt csekk és telepítés | PTEST | A SIMD architektúra gyorsabb elágazása a vektorizált kód támogatása érdekében. | Alkalmazható adatfeldolgozás fordítói vektorizálására, kép- és videó információfeldolgozásra, háromdimenziós tartalom létrehozására. Multimédiás és játékforrások. |
Csomagolt identitás meghatározása | PCMPEQQ, PCMPGTQ | A SIMD architektúra meghatározza, hogy a QWORD-ok csomagolt értékei a céloperandusban és a forrás operandusban azonosak. | Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. Multimédiás és játékforrások. |
A DWORD csomagolása aláíratlan WORD formátumba | PACKUSDW | A csomagolt aláírt duplaszót előjel nélküli csomagolt WORD-dá alakítja a túlcsordulási feltételek kezeléséhez használt előjel nélküli állomásozással. Ez az új processzor-utasítás kiegészíti az ebben a formátumú egyéb utasításokat. | Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. Multimédiás és játékforrások. |
Továbbfejlesztett karakterlánc-műveletek | PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM | Ezek az új processzorutasítások nagyszámú karakterlánc- és szövegfeldolgozási képességet tartalmaznak, amelyek általában több műveleti kódot igényelnek. | Jobb teljesítmény a víruskereséshez, szöveges kereséshez, karakterlánc-feldolgozó könyvtárakhoz, például a ZLIB-hez, adatbázisokhoz, fordítókhoz és állapotgép-alkalmazásokhoz. |
Az Intel C fordítója a 10-es verzió óta SSE4 utasításokat állít elő, ha a -QxS opció meg van adva . A Sun Microsystems Sun Studio fordítója a 12-es frissítés 1. verziója óta SSE4 utasításokat állít elő a -xarch=sse4_1 (SSE4.1) és -xarch=sse4_2 (SSE4.2) [2] beállítások használatával . A GCC fordító a 4.3-as verzió óta támogatja az SSE4.1-et és az SSE4.2-t [3] , az -msse4.1 és -msse4.2 kapcsolókkal , vagy az -msse4 -vel , hogy mindkettőt tartalmazza.
Utasítások kerültek hozzáadásra a videokodekek mozgáskompenzációjának felgyorsítására , gyors olvasás az USWC memóriából, sok utasítás a programok fordítók általi vektorizálásának egyszerűsítésére.
Ezenkívül a 8/16 bites karakterláncok feldolgozására, a CRC32 számításokra és a POPCNT-re vonatkozó utasításokat hozzáadtuk az SSE4.2-hez . Az SSE4-ben először az xmm0 regisztert használták implicit argumentumként néhány utasításhoz.
Az eltolásos 4 bájtos előjel nélküli csoportok különbségeinek abszolút értékének (SAD) nyolc összegének kiszámítása. A 16 bites SAD-ok operandusainak helyét az imm8 közvetlen argumentum három bitje határozza meg.
s1 = imm8[2]*4 s2 = imm8[1:0]*4 SAD 0 = |A (s1+0) -B (s2+0) | + |A (s1+1) -B (s2+1) | + |A (s1+2) -B (s2+2) | + |A (s1+3) -B (s2+3) | SAD 1 = |A (s1+1) -B (s2+0) | + |A (s1+2) -B (s2+1) | + |A (s1+3) -B (s2+2) | + |A (s1+4) -B (s2+3) | EV 2 = |A (s1+2) -B (s2+0) | + |A (s1+3) -B (s2+1) | + |A (s1+4) -B (s2+2) | + |A (s1+5) -B (s2+3) | ... EV 7 = |A (s1+7) -B (s2+0) | + |A (s1+8) -B (s2+1) | + |A (s1+9) -B (s2+2) | + |A (s1+10) -B (s2+3) |Keresés a 16 bites előjel nélküli A 0 ... A 7 mezők között , amelyeknek minimális értéke van (és kisebb számmal, ha több ilyen mező van). A rendszer egy 16 bites értéket és annak pozícióját adja vissza.
12 utasításból álló csoport a csomagolt mezők formátumának bővítéséhez. Az argumentum alsó részének csomagolt 8, 16 vagy 32 bites mezői (előjeles vagy előjel nélküli) 16, 32 vagy 64 bites eredménymezőkre bővülnek.
Beviteli formátum | Eredmény formátum | ||
---|---|---|---|
8 bites | 16 bites | 32 bites | |
PMOVSXBW | 16 bites | ||
PMOVZXBW | PMOVZXWW | ||
PMOVSXBD | PMOVSXWD | 32 bites | |
PMOVZXBD | PMOVZXWD | PMOVSXDD | |
PMOVSXBQ | PMOVSXWQ | PMOVSXDQ | 64 bites |
PMOVZXBQ | PMOVZXWQ | PMOVZXDQ |
Mindegyik eredménymező a két argumentum megfelelő mezőinek minimális/maximális értéke. A bájtmezőket csak előjeles számként, a 16 bites mezőket csak előjel nélküli számként kezeli a rendszer. A 32 bites csomagolt mezőknél aláírt és aláíratlan opciók is rendelkezésre állnak.
Szorozza meg az előjeles 32 bites mezőket, és állítsa elő az eredmény teljes 64 bitjét (két szorzási művelet 0 és 2 argumentum mezőn).
Szorozza meg az előjeles 32 bites mezőket úgy, hogy az eredmények közül a legkevésbé szignifikáns 32 bitet állítsa elő (négy szorzási művelet az összes argumentummezőn).
A 32 bites aláírt mezők telítettségű, 16 bites aláíratlan mezőkbe történő csomagolása.
A 64 bites mezők egyenlőségének ellenőrzése és 64 bites maszkok kiadása.
32 bites mező beszúrása xmm2-ből (a regiszter 4 mezője közül bármelyik választható), vagy egy 32 bites memóriahelyről tetszőleges eredménymezőbe. Ezenkívül minden egyes eredménymezőnél beállíthatja, hogy +0,0-ra állítsa vissza.
Az xmm regiszterből kivonva egy 32 bites mezőt a mező száma az imm8 alsó 2 bitjében jelenik meg. Ha eredményként egy 64 bites regisztert adunk meg, akkor annak felső 32 bitje visszaáll (előjel nélküli kiterjesztés).
Szúrjon be egy 8, 32 vagy 64 bites értéket a regiszter megadott xmm mezőjébe (a többi mező változatlan).
8, 16, 32, 64 bites mező kinyerése a regiszter imm8-ában megadott xmm mezőből. Ha az eredményként kis- és nagybetűt adunk meg, akkor a magas része el lesz vetve (aláírás nélküli kiterjesztés).
32/64 bites mezők vektor skaláris szorzása (pontszorzata). Az imm8-ban bitmaszk segítségével jelzi, hogy a mezők mely szorzatait kell összesíteni, és mit kell írni az eredmény egyes mezőibe: a megadott szorzatok összegét vagy +0,0.
Minden 32/64 bites eredménymező az xmm0 implicit argumentumban szereplő mező előjelétől függően kerül kiválasztásra: az első vagy a második argumentumból.
Az imm8 bitmaszkja (4 vagy 2 bit) határozza meg, hogy melyik argumentumból kell venni az egyes 32/64 bites eredménymezőket.
Az eredmény minden bájtmezőjének kiválasztása az xmm0 implicit argumentumban ugyanazon mező bájtjának előjelétől függően történik: az első vagy a második argumentumból.
Az imm8 bitmaszkja (8 bit) határozza meg, hogy az egyes 16 bites eredménymezők melyik argumentumból származnak.
Csak akkor állítsa be a ZF jelzőt , ha az xmm2/m128-ban az xmm1 maszkkal jelölt összes bitje nulla. Ha minden jelöletlen bit nulla, akkor állítsa be a CF jelzőt . A fennmaradó jelzők ( AF , OF , PF , SF ) mindig alaphelyzetbe állnak. Az utasítás nem módosítja az xmm1-et.
Az összes 32/64 bites mező kerekítése. A kerekítési mód (4 lehetőség) az MXCSR.RC-ből választható ki, vagy közvetlenül az imm8-ban állítható be. Elnyomhatja a precizitásvesztés kivételének generálását is.
Csak a legkisebb jelentőségű 32/64 bites mező kerekítése (a többi bit változatlan marad).
Olvasási művelet, amely felgyorsítja (akár 7,5-szeresére) az írás-kombinációs memóriaterületek munkáját .
Ezek az utasítások számtani összehasonlításokat végeznek az összes lehetséges mezőpár között (64 vagy 256 összehasonlítás) mindkét karakterláncból, amelyeket xmm1 és xmm2/m128 tartalmaz. Az összehasonlítások logikai eredményeit ezután feldolgozzák a kívánt eredmények elérése érdekében. Az imm8 direct argumentum vezérli a méretet (byte vagy unicode karakterláncok, egyenként legfeljebb 16/8 elem), a mezők (karakterláncelemek) jellemzését, az összehasonlítás típusát és az eredmények értelmezését.
Egy karakterláncban (memóriaterületen) kereshetnek egy adott halmazból vagy adott tartományból. Összehasonlíthatja a karakterláncokat (memóriaterületeket), vagy kereshet részkarakterláncokat.
Mindegyik befolyásolja a processzorjelzőket: SF akkor van beállítva, ha az xmm1 nem egy teljes karakterlánc, a ZF akkor van beállítva, ha az xmm2/m128 nem egy teljes karakterlánc, a CF, ha az eredmény nem nulla, az OF, ha a legkisebb jelentőségű bit az eredmény nem nulla. Az AF és PF jelzők törlődnek.
A sorok méretének explicit beállítása <eax>, <edx>-ben (a regiszterek abszolút értékét a telítettségtől 8/16-ig vesszük, a sorok elemeinek méretétől függően. Az eredmény az ecx regiszterben van .
A sorok méretének explicit beállítása <eax>, <edx>-ben (a regiszterek abszolút értékét telítettségtől 8/16-ig vesszük, a sorok elemeinek méretétől függően. Az eredmény az xmm0 regiszterben van .
A karakterláncok méretének implicit beállítása (minden karakterlánchoz nulla elemet kell keresni). Az eredmény az ecx regiszterben található.
A karakterláncok méretének implicit beállítása (minden karakterlánchoz nulla elemet kell keresni). Az eredmény az xmm0 regiszterben található.
A CRC-32C érték felhalmozása (más jelöléssel CRC-32/ISCSI CRC-32/CASTAGNOLI ) egy 8, 16, 32 vagy 64 bites argumentumhoz (a 0x1EDC6F41 polinom használatával ).
Az egyes bitek számának számolása. Három utasítási lehetőség: 16, 32 és 64 bites regiszterekhez. Az AMD SSE4A -jában is megtalálható .
A 64 bites mezők „nagyobb, mint” ellenőrzése és 64 bites maszkok kiadása.
Az SSE4a utasításkészletet az AMD vezette be a Barcelona architektúrájú processzoraiba . Ez a bővítmény nem érhető el Intel processzorokon. A támogatást a CPUID.80000001H:ECX.SSE4A[Bit 6] jelző határozza meg. [négy]
Utasítás | Leírás |
---|---|
LZCNT/POPCNT | A nulla/egy bitek számának számolása. |
EXTRQ/INSERTQ | Kombinált maszk és váltás utasítások [5] |
MOVNTSD/MOVNTSS | Scalar Stream írási utasítások [6] |
x86 processzor utasításkészletek | |
---|---|
Intel | |
AMD | |
Cyrix |