Výpisy instrukcí X86 - X86 instruction listings
![]() | tento článek možná příliš dlouho pohodlně číst a navigovat.Listopad 2017) ( |
The x86 instrukční sada odkazuje na soubor pokynů, které x86 -kompatibilní mikroprocesory Podpěra, podpora. Pokyny jsou obvykle součástí spustitelný program, často uložený jako počítačový soubor a provedeno na procesoru.
Sada instrukcí x86 byla několikrát rozšířena a zavedena širší registry a datové typy a také nové funkce.[1]
instrukce pro celé číslo x86
Toto je úplná sada instrukcí Intel 8086/8088. Většina, ne-li všechny tyto pokyny, jsou k dispozici v 32bitovém režimu; fungují pouze na 32bitových registrech (eax, odlivatd.) a hodnoty namísto 16bitových (sekera, bxatd.) protějšky. Viz také x86 assembler pro rychlý výukový program pro tuto rodinu procesorů. Aktualizovaná sada instrukcí je také seskupena podle architektury (i386, i486, i686 ) a obecněji se označuje jako x86 32 a x86 64 (také známý jako AMD64 ).
Původní pokyny 8086/8088
Návod | Význam | Poznámky | Operační kód |
---|---|---|---|
AAA | ASCII upraví AL po přidání | používá se s nebaleným binárně kódováno desítkově | 0x37 |
AAD | ASCII upravte AX před rozdělením | Datový list 8086/8088 dokumentuje pouze základní verzi 10 instrukce AAD (operační kód 0xD5 0x0A), ale jakákoli jiná základna bude fungovat. Později má dokumentace Intel také obecnou podobu. NEC V20 a V30 (a možná i další procesory řady NEC řady V) vždy používají základnu 10 a ignorují argument, což způsobuje řadu nekompatibilit | 0xD5 |
AAM | ASCII upravte AX po násobení | Je zdokumentována pouze základní verze 10 (Operand je 0xA), viz poznámky k AAD | 0xD4 |
AAS | ASCII upravte AL po odečtení | 0x3F | |
ADC | Přidejte s sebou | cíl = cíl + zdroj + carry_flag | 0x10… 0x15, 0x80… 0x81 / 2, 0x82… 0x83 / 2 (od 80186) |
PŘIDAT | Přidat | (1) r / m + = r / im; (2) r + = m / im; | 0x00… 0x05, 0x80 / 0… 0x81 / 0, 0x82 / 0… 0x83 / 0 (od 80186) |
A | Logické AND | (1) r / m = r / im; (2) r & = m / im; | 0x20… 0x25, 0x80… 0x81 / 4, 0x82… 0x83 / 4 (od 80186) |
VOLÁNÍ | Postup volání | tlačit eip; eip ukazuje na instrukci hned po zavolání | 0x9A, 0xE8, 0xFF / 2, 0xFF / 3 |
CBW | Převést bajt na slovo | 0x98 | |
CLC | Průhledná nést vlajku | CF = 0; | 0xF8 |
CLD | Průhledná směrová vlajka | DF = 0; | 0xFC |
CLI | Průhledná příznak přerušení | IF = 0; | 0xFA |
CMC | Doplňte přepravní vlajku | 0xF5 | |
CMP | Porovnejte operandy | 0x38… 0x3D, 0x80… 0x81 / 7, 0x82… 0x83 / 7 (od 80186) | |
CMPSB | Porovnat bajty v paměti | 0xA6 | |
CMPSW | Porovnat slova | 0xA7 | |
CWD | Převést slovo na dvojslovo | 0x99 | |
DAA | Desetinná úprava AL po přidání | (používá se v balení binárně kódováno desítkově ) | 0x27 |
DAS | Desetinná úprava AL po odečtení | 0x2F | |
DEC | Snížení o 1 | 0x48… 0x4F, 0xFE / 1, 0xFF / 1 | |
DIV | Nepodepsané rozdělení | (1) AX = DX: AX / r / m; výsledný DX = zbytek (2) AL = AX / r / m; výsledný AH = zbytek | 0xF7 / 6, 0xF6 / 6 |
ESC | Používá se s jednotka s plovoucí desetinnou čárkou | 0xD8..0xDF | |
HLT | Zadejte stav zastavení | 0xF4 | |
IDIV | Podepsané rozdělení | (1) AX = DX: AX / r / m; výsledný DX = zbytek (2) AL = AX / r / m; výsledný AH = zbytek | 0xF7 / 7, 0xF6 / 7 |
IMUL | Podepsáno znásobení | (1) DX: AX = AX * r / m; (2) AX = AL * r / m | 0x69, 0x6B (oba od 80186), 0xF7 / 5, 0xF6 / 5, 0x0FAF (od 80386) |
V | Vstup z portu | (1) AL = port [im]; (2) AL = port [DX]; (3) AX = port [im]; (4) AX = port [DX]; | 0xE4, 0xE5, 0xEC, 0xED |
INC | Přírůstek o 1 | 0x40… 0x47, 0xFE / 0, 0xFF / 0 | |
INT | Zavolej přerušit | 0xCC, 0xCD | |
DO | Voláním přerušíte přetečení | 0xCE | |
IRET | Návrat z přerušení | 0xCF | |
Jcc | Přejít na podmínku | (JA, JAE, JB, JBE, JC, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ) | 0x70… 0x7F, 0x0F80… 0x0F8F (od 80386) |
JCXZ | Skočte, pokud je CX nula | 0xE3 | |
JMP | Skok | 0xE9… 0xEB, 0xFF / 4, 0xFF / 5 | |
LAHF | Vložte VLAJKY do registru AH | 0x9F | |
LDS | Načíst ukazatel pomocí DS | 0xC5 | |
LEA | Načíst efektivní adresu | 0x8D | |
LES | Vložte ES s ukazatelem | 0xC4 | |
ZÁMEK | Potvrďte signál BUS LOCK # | (pro více procesů) | 0xF0 |
LODSB | Načíst bajt řetězce | -li (DF==0) AL = *SI++; jiný AL = *SI--; | 0xAC |
LODSW | Načíst slovo řetězce | -li (DF==0) SEKERA = *SI++; jiný SEKERA = *SI--; | 0xAD |
LOOP / LOOPx | Ovládání smyčky | (LOOPE, LOOPNE, LOOPNZ, LOOPZ) -li (X && --CX) jít do lbl; | 0xE0… 0xE2 |
MOV | Hýbat se | kopíruje data z jednoho místa do druhého, (1) r / m = r; (2) r = r / m; | 0xA0 ... 0xA3 |
MOVSB | Přesunout bajt z řetězce na řetězec | -li (DF==0) *(byte*)DI++ = *(byte*)SI++; jiný *(byte*)DI-- = *(byte*)SI--; | 0xA4 |
MOVSW | Přesunout slovo z řetězce na řetězec | -li (DF==0) *(slovo*)DI++ = *(slovo*)SI++; jiný *(slovo*)DI-- = *(slovo*)SI--; | 0xA5 |
MUL | Nepodepsané násobení | (1) DX: AX = AX * r / m; (2) AX = AL * r / m; | 0xF7 / 4, 0xF6 / 4 |
NEG | Negace komplementu dvou | r/m *= -1; | 0xF6 / 3… 0xF7 / 3 |
NOP | Žádná operace | operační kód odpovídá XCHG EAX, EAX | 0x90 |
NE | Negovat operand, logické NE | r/m ^= -1; | 0xF6 / 2… 0xF7 / 2 |
NEBO | Logické NEBO | (1) r/m |= r/im; (2) r |= m/im; | 0x08… 0x0D, 0x80… 0x81 / 1, 0x82… 0x83 / 1 (od 80186) |
VEN | Výstup na port | (1) port [im] = AL; (2) port [DX] = AL; (3) port [im] = AX; (4) port [DX] = AX; | 0xE6, 0xE7, 0xEE, 0xEF |
POP | Pop data z zásobník | r / m = * SP ++; POP CS (operační kód 0x0F) funguje pouze na 8086/8088. Pozdější CPU používají 0x0F jako předponu pro novější pokyny. | 0x07, 0x0F (pouze 8086/8088), 0x17, 0x1F, 0x58… 0x5F, 0x8F / 0 |
POPF | Pop VLAJKY registr ze zásobníku | VLAJKY = * SP ++; | 0x9D |
TLAČIT | Zatlačte data do zásobníku | *--SP = r/m; | 0x06, 0x0E, 0x16, 0x1E, 0x50… 0x57, 0x68, 0x6A (oba od 80186), 0xFF / 6 |
PUSHF | Zatlačte VLAJKY do stohu | *--SP = VLAJKY; | 0x9C |
RCL | Otočit doleva (s nošením) | 0xC0… 0xC1 / 2 (od 80186), 0xD0… 0xD3 / 2 | |
RCR | Otočit doprava (s nošením) | 0xC0… 0xC1 / 3 (od 80186), 0xD0… 0xD3 / 3 | |
REPxx | Opakujte MOVS / STOS / CMPS / LODS / SCAS | (REP, REPE, REPNE, REPNZ, REPZ) | 0xF2, 0xF3 |
RET | Návrat z postupu | Není to skutečný návod. Assembler je přeloží na RETN nebo RETF v závislosti na paměťovém modelu cílového systému. | |
ZPĚT | Návrat z blízkého postupu | 0xC2, 0xC3 | |
RETF | Návrat ze vzdáleného postupu | 0xCA, 0xCB | |
ROL | Otočit doleva | 0xC0… 0xC1 / 0 (od 80186), 0xD0… 0xD3 / 0 | |
ROR | Otočit doprava | 0xC0… 0xC1 / 1 (od 80186), 0xD0… 0xD3 / 1 | |
SAHF | Uložte AH do VLAJKŮ | 0x9E | |
SAL | Aritmeticky posuňte doleva (podepsaný posun doleva) | (1) r / m << = 1; (2) r / m << = CL; | 0xC0… 0xC1 / 4 (od 80186), 0xD0… 0xD3 / 4 |
SAR | Posun aritmeticky vpravo (podepsaný posun vpravo) | (1) (podepsané) r / m >> = 1; (2) (podepsáno) r / m >> = CL; | 0xC0… 0xC1 / 7 (od 80186), 0xD0… 0xD3 / 7 |
SBB | Odečtení s vypůjčením | alternativní 1bajtové kódování SBB AL, AL je k dispozici prostřednictvím nezdokumentované SALC instrukce | 0x18… 0x1D, 0x80… 0x81 / 3, 0x82… 0x83 / 3 (od 80186) |
SCASB | Porovnat řetězec bajtů | 0xAE | |
SCASW | Porovnat řetězec slov | 0xAF | |
SHL | Posun vlevo (nepodepsaný posun vlevo) | 0xC0… 0xC1 / 4 (od 80186), 0xD0… 0xD3 / 4 | |
SHR | Shift right (unsigned shift right) | 0xC0… 0xC1 / 5 (od 80186), 0xD0… 0xD3 / 5 | |
STC | Nastavit vlajku | CF = 1; | 0xF9 |
STD | Nastavit směrovou vlajku | DF = 1; | 0xFD |
STI | Nastavit příznak přerušení | IF = 1; | 0xFB |
STOSB | Uložte bajt do řetězce | -li (DF==0) *ES:DI++ = AL; jiný *ES:DI-- = AL; | 0xAA |
STOSW | Uložte slovo do řetězce | -li (DF==0) *ES:DI++ = SEKERA; jiný *ES:DI-- = SEKERA; | 0xAB |
SUB | Odčítání | (1) r / m - = r / im; (2) r - = m / im; | 0x28… 0x2D, 0x80… 0x81 / 5, 0x82… 0x83 / 5 (od 80186) |
TEST | Logické porovnání (AND) | (1) r / m & r / imm; (2) r & m / imm; | 0x84, 0x84, 0xA8, 0xA9, 0xF6 / 0, 0xF7 / 0 |
POČKEJTE | Počkejte, až nebudete zaneprázdněni | Čeká, až bude pin BUSY # neaktivní (používá se s jednotka s plovoucí desetinnou čárkou ) | 0x9B |
XCHG | Výměna dat | r :=: r/m; A spinlock obvykle používá xchg jako atomová operace. (chyba v kómatu ). | 0x86, 0x87, 0x91… 0x97 |
XLAT | Překlad vyhledávání v tabulce | chová se jako MOV AL, [BX + AL] | 0xD7 |
XOR | Exkluzivní NEBO | (1) r / m ^ = r / im; (2) r ^ = m / im; | 0x30… 0x35, 0x80… 0x81 / 6, 0x82… 0x83 / 6 (od 80186) |
Přidáno v konkrétních procesorech
Přidáno s 80186 /80188
Návod | Význam | Poznámky |
---|---|---|
VÁZANÝ | Zkontrolujte index pole proti hranicím | vyvolá softwarové přerušení 5, pokud test selže |
ENTER | Zadejte rámeček stohu | Upravuje zásobník pro vstup do procedury pro jazyk na vysoké úrovni. Vezme dva operandy: množství úložiště, které má být přiděleno na zásobníku, a úroveň vnoření procedury. |
INS | Vstup z portu do řetězce | ekvivalentníV (E)SEKERA, DXMOV ES:[(E)DI], (E)SEKERA; upravte (E) DI podle velikosti operandu a DF |
ODEJÍT | Opustit rám zásobníku | Uvolní místní úložiště zásobníku vytvořené předchozí instrukcí ENTER. |
OUTS | Výstupní řetězec na port | ekvivalentníMOV (E)SEKERA, DS:[(E)SI]VEN DX, (E)SEKERA; upravit (E) SI podle velikosti operandu a DF |
POPA | Vyskakujte všechny obecné registry ze zásobníku | ekvivalentníPOP DIPOP SIPOP BPPOP SEKERA ; žádný POP SP zde, vše, co dělá, je ADD SP, 2 (protože AX bude přepsán později)POP BXPOP DXPOP CXPOP SEKERA |
PUSHA | Zatlačte všechny registry pro všeobecné použití do zásobníku | ekvivalentníTLAČIT SEKERATLAČIT CXTLAČIT DXTLAČIT BXTLAČIT SP ; Uložená hodnota je počáteční hodnota SPTLAČIT BPTLAČIT SITLAČIT DI |
PUSH okamžité | Na zásobník vložte okamžitou hodnotu bytu / slova | ekvivalentníTLAČIT 12hTLAČIT 1200h |
IMUL okamžitě | Podepsané násobení okamžité hodnoty bytu / slova | ekvivalentníIMUL BX,12hIMUL DX,1200hIMUL CX, DX, 12hIMUL BX, SI, 1200hIMUL DI, slovo ptr [BX+SI], 12hIMUL SI, slovo ptr [BP-4], 1200h |
SHL / SHR / SAL / SAR / ROL / ROR / RCL / RCR okamžitě | Otočit / posunout bity s okamžitou hodnotou větší než 1 | ekvivalentníROL SEKERA,3SHR BL,3 |
Přidáno s 80286
Návod | Význam | Poznámky |
---|---|---|
ARPL | Upravte pole RPL selektoru | |
CLTS | Vymazat příznak přepnutí úlohy v registru CR0 | |
LAR | Načíst bajt přístupových práv | |
LGDT | Načíst globální tabulku deskriptorů | |
LIDT | Načíst tabulku deskriptorů přerušení | |
LLDT | Načíst tabulku místního deskriptoru | |
LMSW | Načíst stavové slovo stroje | |
LOADALL | Načtěte všechny registry CPU, včetně interních, jako je GDT | Bez dokladů, pouze 80286 a 80386 |
LSL | Limit segmentu zatížení | |
LTR | Načíst registr úkolů | |
SGDT | Uložte tabulku globálních deskriptorů | |
SIDT | Uložte tabulku deskriptorů přerušení | |
SLDT | Uložte tabulku místního deskriptoru | |
SMSW | Uložte stavové slovo stroje | |
STR | Uložit registr úkolů | |
VERR | Ověřte segment pro čtení | |
VERW | Ověřte segment pro zápis |
Přidáno s 80386
Návod | Význam | Poznámky |
---|---|---|
BSF | Bitový sken vpřed | |
BSR | Skenování bitů zpět | |
BT | Bitový test | |
BTC | Bitový test a doplněk | |
BTR | Test bitů a reset | |
BTS | Test bitů a nastavení | |
CDQ | Převést dvouslovné na čtyřslovné | Značka rozšiřuje EAX na EDX a vytváří čtyřslovný EDX: EAX. Protože (I) DIV používá jako svůj vstup EDX: EAX, musí se po nastavení EAX volat CDQ, pokud EDX není ručně inicializován (jako v 64/32 divizi) před (I) DIV. |
CMPSD | Porovnání dvouslovného řetězce | Porovná ES: [(E) DI] s DS: [(E) SI] a zvýší nebo sníží jak (E) DI, tak (E) SI, v závislosti na DF; lze zadat prefix REP |
CWDE | Převést slovo na dvojslovné | Na rozdíl od CWD rozšiřuje CWDE znaménko AX na EAX místo AX na DX: AX |
IBTS | Vložte řetězec bitů | ukončeno krokem B1 80386 |
INSD | Vstup z portu do řetězcového dvojslova | |
IRETx | Přerušit návrat; Přípona D znamená návrat 32 bitů, přípona F negeneruje epilogový kód (tj. Instrukce LEAVE) | V 32bitových situacích použijte IRETD místo IRET |
JECXZ | Skočte, pokud je ECX nula | |
LFS, LGS | Načíst daleko ukazatel | |
LSS | Načíst segment zásobníku | |
LODSD | Načíst řetězec dvou slov | EAX = * ES: EDI ±; (± ± závisí na DF, ES nelze přepsat); lze zadat prefix REP |
LOOPW, LOOPccŽ | Smyčka, podmíněná smyčka | Stejné jako LOOP, LOOPcc pro dřívější procesory |
LOOPD, LOOPccD | Smyčka, zatímco je stejná | pokud (cc && - ECX) přejít na lbl; , cc = Z(ero), E(kvalifikace), NnaZero, N(na)E(kvalifikace) |
MOV do / z CR / DR / TR | Přesun do / ze speciálních registrů | CR = řídicí registry, DR = ladicí registry, TR = testovací registry (až 80486) |
MOVSD | Přesunutí řetězce dvou slov | * (dword *) ES: EDI ± ^ = * (dword *) ESI ± ^; (± ± závisí na DF); lze zadat prefix REP |
MOVSX | Pohybujte s příponou znaménka | (dlouhý) r = (znak se znaménkem) r / m; a podobné |
MOVZX | Pohybujte s nulovým rozšířením | (dlouhý) r = (nepodepsaný znak) r / m; a podobné |
OUTSD | Výstup na port z dvojslovného řetězce | port [DX] = * (dlouhý *) ESI ± ^; (± ± závisí na DF) |
POPAD | Vyklopte všechny dvouslovné (32bitové) registry ze zásobníku | Neregistruje ESP mimo zásobník |
POPFD | Vložte data do registru EFLAGS | |
PUSHAD | Zatlačte všechny dvouslovné (32bitové) registry do zásobníku | |
PUSHFD | Zatlačte EFLAGS registr do zásobníku | |
SCASD | Naskenujte dvojřetězcová data řetězce | Porovnává ES: [(E) DI] s EAX a přírůstky nebo úbytky (E) DI, v závislosti na DF; lze zadat prefix REP |
NASTAVIT | Nastavte bajt na jeden za podmínky, jinak nula | (NASTAVIT SETP, SETPE, SETPO, SETS, SETZ) |
SHLD | Shift levé dvojslovo | |
SHRD | Posun doprava dvou slov | r1 = r1 >> CL ∣ r2 << (32-CL); Místo CL lze použít okamžitou 1 |
STOSD | Uložte řetězec dvou slov | * ES: EDI ± ^ = EAX; (± ± závisí na DF, ES nelze přepsat); lze zadat prefix REP |
XBTS | Extrahujte řetězec bitů | ukončeno krokem B1 80386 |
Přidáno s 80486
Návod | Význam | Poznámky |
---|---|---|
BSWAP | Byte Swap | r = r<<24 | r<<8&0x00FF0000 | r>>8&0x0000FF00 | r>>24; Definováno pouze pro 32bitové registry. Obvykle se používá ke změně mezi reprezentacemi malého endianu a velkého endianu. Při použití s 16bitovými registry vytváří různé různé výsledky na 486,[2] 586 a Bochs /QEMU.[3] |
CMPXCHG | atomová CoMPare a eXCHanGe | Vidět Porovnat a vyměnit / později 80386 jako nezdokumentovaný operační kód k dispozici |
INVD | Zrušte platnost mezipaměti | Vypláchněte vnitřní mezipaměti |
INVLPG | Zneplatnit TLB Vstup | Invalidate TLB Entry for page that contains data specified |
WBINVD | Odepište a zneplatněte mezipaměť | Zapíše zpět všechny upravené řádky mezipaměti ve vnitřní mezipaměti procesoru do hlavní paměti a zneplatní vnitřní mezipaměti. |
XADD | eXchange a PŘIDAT | Vymění první operand za druhý operand a poté načte součet dvou hodnot do cílového operandu. |
Přidáno s Pentium
Návod | Význam | Poznámky |
---|---|---|
CPUID | Identifikace CPU | Vrátí data týkající se identifikace procesoru a funkcí a vrátí data do registrů EAX, EBX, ECX a EDX. Funkce instrukcí specifikované v registru EAX.[1] To bylo také přidáno později 80486 procesory |
CMPXCHG8B | CoMPare a eXCHanGe 8 bajtů | Porovnejte EDX: EAX s m64. Pokud je stejné, nastavte ZF a načtěte ECX: EBX do m64. Jinak vyčistěte ZF a načtěte m64 do EDX: EAX. |
RDMSR | ReaD od Registr specifický pro model | Zatížení MSR zadáno ECX do EDX: EAX |
RDTSC | Počítadlo časového razítka ReaD | Vrátí počet značek procesoru od doby, kdy je procesor „ONLINE“ (od posledního zapnutí systému) |
WRMSR | WRite to Model-Specific Register | Napište hodnotu do EDX: EAX do MSR specifikováno ECX |
RSM[4] | Pokračujte z režimu správy systému | To bylo zavedeno i386SL a později a je také v i486SL a později. Životopisy z Režim správy systému (SMM) |
Přidáno s Pentium MMX
Návod | Význam | Poznámky |
---|---|---|
RDPMC | Přečtěte si PMC [Counter Monitoring Performance] | Uvedeno v registru ECX do registrů EDX: EAX |
Byly také přidány registry MMX a pokyny k podpoře MMX. Jsou použitelné jak pro celé číslo, tak pro operace s plovoucí desetinnou čárkou, viz níže.
Přidáno s AMD K6
Návod | Význam | Poznámky |
---|---|---|
SYSCALL | funkčně ekvivalentní SYSENTERU | |
SYSRET | funkčně ekvivalentní SYSEXIT |
AMD změnilo detekční bit CPUID pro tuto funkci od K6-II.
Přidáno s Pentium Pro
Návod | Význam | Poznámky |
---|---|---|
CMOVcc | Podmíněný tah | (CMOVA, CMOVAE, CMOVB, CMOVBE, CMOVC, CMOVE, CMOVG, CMOVGE, CMOVL, CMOVLE, CMOVNA, CMOVNAE, CMOVNB, CMOVNBE, CMOVNC, CMOVNE, CMOVNG, CMOVNGE, CMOVNL, CMOVNLE, CMOVNO, CMOVN, CMOVN, CMOVN, CMOVN, CMOVN , CMOVP, CMOVPE, CMOVPO, CMOVS, CMOVZ) |
UD2 | Nedefinovaná instrukce | Generuje neplatnou výjimku opcode. Tato instrukce je poskytována pro testování softwaru pro výslovné vygenerování neplatného operačního kódu. Opcode pro tuto instrukci je vyhrazen pro tento účel. |
Přidáno s Pentium II
Návod | Význam | Poznámky |
---|---|---|
SYSENTER | SYStem volání ENTER | Tato instrukce, někdy nazývaná instrukce Fast System Call, byla určena ke zvýšení výkonu volání operačního systému. Všimněte si, že na Pentium Pro, CPUID instrukce nesprávně hlásí tyto pokyny jako dostupné. |
SYSEXIT | SYStem volání EXIT |
Přidáno s SSE
Návod | Operační kód | Význam | Poznámky |
---|---|---|---|
NOP r / m16 | 0F 1F / 0 | Vícebajtová instrukce bez operace. | |
NOP r / m32 | |||
PREFETCHT0 | 0F 18/1 | Předběžné načtení dat z adresy | Předběžně načíst do všech úrovní mezipaměti |
PREFETCHT1 | 0F 18/2 | Předběžné načtení dat z adresy | Předběžně načíst do všech úrovní mezipaměti KROMĚ[5][6] L1 |
PREFETCHT2 | 0F 18/3 | Předběžně načíst data z adresy | Předběžně načíst do všech úrovní mezipaměti KROMĚ L1 a L2 |
PREFETCHNTA | 0F 18/0 | Předběžné načtení dat z adresy | Předběžně načíst do dočasné struktury mezipaměti, minimalizovat znečištění mezipaměti. |
SFENCE | 0F AE F8 | Store Fence | Tip procesoru, který zajistí, že všechny operace úložiště, které proběhly před voláním SFENCE, jsou globálně viditelné |
Přidáno s SSE2
Návod | Operační kód | Význam | Poznámky |
---|---|---|---|
CLFLUSH m8 | 0F AE / 7 | Vyrovnání linky mezipaměti | Zruší platnost řádku mezipaměti, který obsahuje lineární adresu zadanou zdrojovým operandem ze všech úrovní hierarchie mezipaměti procesoru |
LFENCE | 0F AE E8 | Načíst plot | Serializuje operace načítání. |
MFENCE | 0F AE F0 | Paměťový plot | Provede operaci serializace u všech pokynů pro načtení a uložení, které byly vydány před instrukcí MFENCE. |
MOVNTI m32, r32 | 0F C3 / r | Přesunout Doubleword Non-Temporal | Přesuňte dvojslovo z r32 na m32, čímž minimalizujete znečištění v hierarchii mezipaměti. |
PAUZA | F3 90 | Nápověda k otočení smyčky | Poskytuje nápovědu pro procesor, že následující kód je smyčka rotace, pro ukládání do mezipaměti |
Přidáno s SSE3
Návod | Význam | Poznámky |
---|---|---|
MONITOR EAX, ECX, EDX | Nastavit adresu monitoru | Nastaví lineární rozsah adres, který má být monitorován hardwarem, a aktivuje monitor. |
MWAIT EAX, ECX | Monitor Počkejte | Nápověda procesoru k zastavení provádění instrukcí a vstupu do optimalizovaného stavu závislého na implementaci, dokud nedojde k výskytu třídy událostí. |
Přidáno s SSE4.2
Návod | Operační kód | Význam | Poznámky |
---|---|---|---|
CRC32 r32, r / m8 | F2 0F 38 F0 / r | Akumulujte CRC32 | Počítá CRC hodnota pomocí polynomu CRC-32C (Castagnoli) 0x11EDC6F41 (normální forma 0x1EDC6F41). Toto je polynom používaný v iSCSI. Na rozdíl od populárnějšího v Ethernetu je jeho parita sudá a dokáže tak detekovat jakoukoli chybu s lichým počtem změněných bitů. |
CRC32 r32, r / m8 | F2 REX 0F 38 F0 / r | ||
CRC32 r32, r / m16 | F2 0F 38 F1 / r | ||
CRC32 r32, r / m32 | F2 0F 38 F1 / r | ||
CRC32 r64, r / m8 | F2 REX.W 0F 38 F0 / r | ||
CRC32 r64, r / m64 | F2 REX.W 0F 38 F1 / r | ||
CRC32 r32, r / m8 | F2 0F 38 F0 / r |
Přidáno s x86-64
Návod | Význam | Poznámky |
---|---|---|
CDQE | Podepište rozšíření EAX do RAX | |
CQO | Přihlaste se k rozšíření RAX do RDX: RAX | |
CMPSQ | Řetězcové čtyřslovo CoMPare | |
CMPXCHG16B | CoMPare a eXCHanGe 16 bajtů | |
IRETQ | 64bitový návrat z přerušení | |
JRCXZ | Skočte, pokud je RCX nula | |
LODSQ | LoaD String Quadword | |
MOVSXD | MOV s funkcí Sign Extend 32-bit na 64-bit | |
POPFQ | Zaregistrujte se POP RFLAGS | |
PUSHFQ | PUSH RFLAGS Register | |
RDTSCP | Počítadlo časového razítka ReaD a ID procesoru | |
SCASQ | Řetězcové čtyřslovo SCAn | |
STOSQ | STOre String Quadword | |
SWAPGS | Vyměňte GS základnu s KernelGSBase MSR |
Přidáno s AMD-V
Návod | Význam | Poznámky | Operační kód |
---|---|---|---|
CLGI | Vymazat globální příznak přerušení | Vymaže GIF | 0x0F 0x01 0xDD |
INVLPGA | Invalidate TLB entry in a specified ASID | Invaliduje mapování TLB pro virtuální stránku uvedenou v RAX a ASID zadanou v ECX. | 0x0F 0x01 0xDF |
MOV (CRn) | Přesun do nebo z řídících registrů | Přesouvá 32- nebo 64bitový obsah k ovládání registru a naopak. | 0x0F 0x22 nebo 0x0F 0x20 |
MOV (DRn) | Přesunout do nebo z ladicích registrů | Přesouvá 32- nebo 64bitový obsah k ovládání registru a naopak. | 0x0F 0x21 nebo 0x0F 0x23 |
SKINIT | Zabezpečte Init a skočte s atestací | Ověřitelné spuštění důvěryhodného softwaru na základě bezpečného porovnání hash | 0x0F 0x01 0xDE |
STGI | Nastavit globální příznak přerušení | Nastavuje GIF. | 0x0F 0x01 0xDC |
VMLOAD | Stav zatížení z VMCB | Načte podmnožinu stavu procesoru z VMCB určeného fyzickou adresou v registru RAX. | 0x0F 0x01 0xDA |
VMMCALL | Volejte VMM | Používá se výhradně ke komunikaci s VMM | 0x0F 0x01 0xD9 |
VMRUN | Spusťte virtuální stroj | Provede přepnutí na hostující OS. | 0x0F 0x01 0xD8 |
VMSAVE | Uložit stav do VMCB | Uloží další stav hosta do VMCB. | 0x0F 0x01 0xDB |
Přidáno s Intel VT-x
Návod | Význam | Poznámky | Operační kód |
---|---|---|---|
INVEPT | Zneplatnit překlady odvozené z EPT | Invalidates EPT-derived entries in the TLBs and paging-structure caches. | 0x66 0x0F 0x38 0x80 |
INVVPID | Zneplatnit překlady na základě VPID | Invalidates entries in the TLBs and paging-structure caches based on VPID. | 0x66 0x0F 0x38 0x80 |
VMFUNC | Vyvolání funkce VM | Vyvolejte funkci VM uvedenou v EAX. | 0x0F 0x01 0xD4 |
VMPTRLD | Načíst ukazatel na strukturu řízení virtuálního stroje | Načte aktuální ukazatel VMCS z paměti. | 0x0F 0xC7 / 6 |
VMPTRST | Uložte ukazatel na řídicí strukturu virtuálního stroje | Uloží aktuální ukazatel VMCS do zadané adresy paměti. Operand této instrukce je vždy 64 bitů a je vždy v paměti. | 0x0F 0xC7 / 7 |
VMCLEAR | Vymažte strukturu řízení virtuálního stroje | Zapíše všechna data uložená v mezipaměti na VMCS | 0x66 0x0F 0xC7 / 6 |
VMREAD | Číst pole ze struktury řízení virtuálního stroje | Přečte pole ve VMCS | 0x0F 0x78 |
VMWRITE | Zápis pole do struktury řízení virtuálního stroje | Upravuje pole ve VMCS | 0x0F 0x79 |
VMCALL | Volání na VM Monitor | Volá funkci VM Monitor z hostujícího systému | 0x0F 0x01 0xC1 |
VMLAUNCH | Spusťte virtuální stroj | Spusťte virtuální stroj spravovaný aktuálním VMCS | 0x0F 0x01 0xC2 |
VMRESUME | Obnovit virtuální stroj | Obnovit virtuální stroj spravovaný aktuálním VMCS | 0x0F 0x01 0xC3 |
VMXOFF | Opusťte provoz VMX | Zastaví virtualizační prostředí podporované hardwarem | 0x0F 0x01 0xC4 |
VMXON | Zadejte operaci VMX | Vstupuje do virtualizačního prostředí podporovaného hardwarem | 0xF3 0x0F 0xC7 / 6 |
Přidáno s ABM
LZCNT, POPCNT (POPulation CouNT) - pokročilá bitová manipulace
Přidáno s BMI1
ANDN, BEXTR, BLSI, BLSMSK, BLSR, TZCNT
Přidáno s BMI2
BZHI, MULX, PDEP, PEXT, RORX, SARX, SHRX, SHLX
Přidáno s TBM
AMD představilo TBM společně s BMI1 ve svém Piledriver[7] řada procesorů; později procesory AMD Jaguar a Zen nepodporují TBM.[8] Žádné procesory Intel (od roku 2020) nepodporují TBM.
Návod | Popis[9] | Ekvivalentní výraz C.[10] |
---|---|---|
BEXTR | Výpis bitového pole (s okamžitým) | (src >> start) & ((1 << len) - 1) |
BLCFILL | Vyplňte od nejnižšího čistého bitu | x & (x + 1) |
BLCI | Izolujte nejnižší čistý bit | x | ~ (x + 1) |
BLCIC | Izolujte nejnižší jasný bit a doplňte se | ~ x & (x + 1) |
BLCMSK | Maska od nejnižšího čistého bitu | x ^ (x + 1) |
BLCS | Nastavit nejnižší jasný bit | x | (x + 1) |
BLSFILL | Naplňte od nejnižšího nastaveného bitu | x | (x - 1) |
BLSIC | Izolujte nejnižší nastavený bit a doplňte se | ~ x | (x - 1) |
T1MSKC | Inverzní maska od koncových | ~ x | (x + 1) |
TZMSK | Maska z koncových nul | ~ x & (x - 1) |
Přidáno s Sada instrukcí CLMUL
Návod | Operační kód | Popis |
---|---|---|
PCLMULQDQ xmmreg, xmmrm, imm | 66 0f 3a 44 / r ib | Proveďte násobení dvou 64bitových polynomů bez přenášení přes konečné pole GF(2k). |
PCLMULLQLQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 00 | Vynásobte nízké poloviny obou registrů. |
PCLMULHQLQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 01 | Vynásobte horní polovinu cílového registru dolní polovinou zdrojového registru. |
PCLMULLQHQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 10 | Vynásobte dolní polovinu cílového registru vysokou polovinou zdrojového registru. |
PCLMULHQHQDQ xmmreg, xmmrm | 66 0f 3a 44 / r 11 | Vynásobte vysoké poloviny dvou registrů. |
Přidáno s Intel ADX
Návod | Popis |
---|---|
ADCX | Přidá dvě celá čísla bez znaménka plus carry, načte carry z příznaku carry a v případě potřeby jej tam nastaví. Neovlivňuje jiné vlajky než carry. |
ADOX | Přidá dvě celá čísla bez znaménka plus carry, načte carry z příznaku overflow a v případě potřeby jej tam nastaví. Neovlivňuje jiné příznaky než přetečení. |
x87 pokyny s plovoucí desetinnou čárkou
Originál 8087 instrukce
Návod | Význam | Poznámky |
---|---|---|
F2XM1 | přesnější než pro X téměř na nulu | |
FABS | Absolutní hodnota | |
FADD | Přidat | |
FADDP | Přidat a pop | |
FBLD | Vložte BCD | |
FBSTP | Uložte BCD a pop | |
FCHS | Změnit znaménko | |
FCLEX | Jasné výjimky | |
FCOM | Porovnat | |
FCOMP | Porovnejte a popujte | |
FCOMPP | Porovnejte a pop dvakrát | |
FDECSTP | Snížení ukazatele zásobníku s plovoucí desetinnou čárkou | |
FDISI | Zakázat přerušení | Pouze 8087, jinak FNOP |
FDIV | Rozdělit | Chyba Pentium FDIV |
FDIVP | Rozdělte a popujte | |
FDIVR | Rozdělit obráceně | |
FDIVRP | Rozdělit obráceně a pop | |
FENI | Povolit přerušení | Pouze 8087, jinak FNOP |
ZDARMA | Registrace zdarma | |
FIADD | Celé číslo přidat | |
FICOM | Porovnání celých čísel | |
FICOMP | Porovnání a vyskakování celého čísla | |
FIDIV | Celé dělení | |
FIDIVR | Celé dělení obrácené | |
FILD | Načíst celé číslo | |
FIMUL | Násobení celého čísla | |
FINCSTP | Zvýšení ukazatele zásobníku s plovoucí desetinnou čárkou | |
FINIT | Inicializujte procesor s plovoucí desetinnou čárkou | |
PĚST | Uložit celé číslo | |
FISTP | Uložit celé číslo a pop | |
FISUB | Odečíst celé číslo | |
FISUBR | Odečtení celého čísla obráceno | |
FLD | Zatížení s plovoucí desetinnou čárkou | |
FLD1 | Načíst 1,0 do zásobníku | |
FLDCW | Načíst kontrolní slovo | |
FLDENV | Načíst stav prostředí | |
FLDENVW | Načíst stav prostředí, 16 bitů | |
FLDL2E | Zatížení log2(E) do zásobníku | |
FLDL2T | Zatížení log2(10) do zásobníku | |
FLDLG2 | Zatížení log10(2) do zásobníku | |
FLDLN2 | Zatížení ln (2) do zásobníku | |
FLDPI | Zatížení π do zásobníku | |
FLDZ | Načtěte 0,0 do zásobníku | |
FMUL | Násobit | |
FMULP | Násobte a popujte | |
FNCLEX | Jasné výjimky, žádné čekání | |
FNDISI | Zakázat přerušení, žádné čekání | Pouze 8087, jinak FNOP |
FNENI | Povolte přerušení, žádné čekání | Pouze 8087, jinak FNOP |
FNINIT | Inicializujte procesor s plovoucí desetinnou čárkou, žádné čekání | |
FNOP | Žádná operace | |
FNSAVE | Uložte stav FPU, žádné čekání, 8 bitů | |
FNSAVEW | Uložte stav FPU, žádné čekání, 16 bitů | |
FNSTCW | Uložte kontrolní slovo, žádné čekání | |
FNSTENV | Skladujte prostředí FPU, žádné čekání | |
FNSTENVW | Ukládejte prostředí FPU, bez čekání, 16bitové | |
FNSTSW | Uložit stavové slovo, žádné čekání | |
FPATAN | Částečná arkustangens | |
FPREM | Částečný zbytek | |
FPTAN | Částečná tečna | |
FRNDINT | Zaokrouhlit na celé číslo | |
FRSTOR | Obnovit uložený stav | |
FRSTORW | Obnovit uložený stav | Možná není ve skutečnosti k dispozici v roce 8087 |
FSAVE | Uložit stav FPU | |
FSAVEW | Uložit stav FPU, 16bitový | |
FSCALE | Měřítko 2 | |
FSQRT | Odmocnina | |
FST | Obchod s plovoucí desetinnou čárkou | |
FSTCW | Uložte kontrolní slovo | |
FSTENV | Uložte prostředí FPU | |
FSTENVW | Store FPU environment, 16-bit | |
FSTP | Obchod a pop | |
FSTSW | Uložit stavové slovo | |
FSUB | Odčítat | |
FSUBP | Odečíst a pop | |
FSUBR | Zpětné odečtení | |
FSUBRP | Zpětné odečítání a pop | |
FTST | Vyzkoušejte nulu | |
FWAIT | Počkejte, až se FPU spustí | |
FXAM | Prozkoumejte příznaky podmínek | |
FXCH | Výměnné registry | |
FXTRACT | Extrahujte exponent a význam | |
FYL2X | y · Log2 X | -li y = logb 2, pak základnab logaritmus je vypočítán |
FYL2XP1 | y · Log2 (X+1) | přesnější než log2 z je-li x blízko nule |
Přidáno v konkrétních procesorech
Přidáno s 80287
Návod | Význam | Poznámky |
---|---|---|
FSETPM | Nastavte chráněný režim | Pouze 80287, jinak FNOP |
Přidáno s 80387
Návod | Význam | Poznámky |
---|---|---|
FCOS | Kosinus | |
FLDENVD | Načíst stav prostředí, 32 bitů | |
FSAVED | Uložte stav FPU, 32bitový | |
FPREM1 | Částečný zbytek | Vypočítá zbytek IEEE |
FRSTORD | Obnovit uložený stav, 32bitový | |
FSIN | Sinus | |
FSINCOS | Sinus a kosinus | |
FSTENVD | Store FPU environment, 32-bit | |
FUCOM | Neuspořádané porovnání | |
FUCOMP | Neuspořádané porovnání a pop | |
FUCOMPP | Neuspořádané porovnání a dvakrát vyskočení |
Přidáno s Pentium Pro
- FCMOV varianty: FCMOVB, FCMOVBE, FCMOVE, FCMOVNB, FCMOVNBE, FCMOVNE, FCMOVNU, FCMOVU
- FCOMI varianty: FCOMI, FCOMIP, FUCOMI, FUCOMIP
Přidáno s SSE
FXRSTOR, FXSAVE
Ty jsou také podporovány na pozdějších Pentium II, které neobsahují podporu SSE
Přidáno pomocí SSE3
FISTTP (převod z x87 na celé číslo se zkrácením bez ohledu na stavové slovo)
SIMD instrukce
MMX instrukce
Pokyny MMX fungují na registrech mm, které jsou široké 64 bitů. Jsou sdíleny s registry FPU.
Originální pokyny MMX
Přidáno s Pentium MMX
Návod | Operační kód | Význam | Poznámky |
---|---|---|---|
EMMS | 0F 77 | Prázdný stav technologie MMX | Označí všechny registry x87 FPU pro použití FPU |
MOVD mm, r / m32 | 0F 6E / r | Přesunout dvojslovo | |
MOVD r / m32, mm | 0F 7E / r | Přesunout dvojslovo | |
MOVQ mm / m64, mm | 0F 7F / r | Přesunout čtyřslovo | |
MOVQ mm, mm / m64 | 0F 6F / r | Přesunout čtyřslovo | |
MOVQ mm, r / m64 | REX.W + 0F 6E / r | Přesunout čtyřslovo | |
MOVQ r / m64, mm | REX.W + 0F 7E / r | Přesunout čtyřslovo | |
PACKSSDW mm1, mm2 / m64 | 0F 6B / r | Zabalte do slov dvojitá slova (podepsaná sytostí) | |
PACKSSWB mm1, mm2 / m64 | 0F 63 / r | Sbalit slova na bajty (podepsáno se sytostí) | |
PACKUSWB mm, mm / m64 | 0F 67 / r | Sbalit slova na bajty (bez znaménka se sytostí) | |
PADDB mm, mm / m64 | 0F FC / r | Přidejte zabalená celá čísla bajtů | |
PADDW mm, mm / m64 | 0F FD / r | Přidejte celá celá slova | |
PADDD mm, mm / m64 | 0F FE / r | Přidejte zabalená celá čísla dvou slov | |
PADDQ mm, mm / m64 | 0F D4 / r | Přidejte zabalená celá čísla čtyřslov | |
PADDSB mm, mm / m64 | 0F EC / r | Přidejte zabalená celá čísla podepsaných bajtů a nasyťte | |
PADDSW mm, mm / m64 | 0F ED / r | Přidejte celá celá čísla se znaménkem a nasyťte | |
PADDUSB mm, mm / m64 | 0F DC / r | Přidejte zabalená celá čísla bez znaménka a nasyťte | |
PADDUSW mm, mm / m64 | 0F DD / r | Přidejte zabalená celá čísla bez znaménka a nasyťte | |
PAND mm, mm / m64 | 0F DB / r | Bitové AND | |
PANDN mm, mm / m64 | 0F DF / r | Bitové A NE | |
POR mm, mm / m64 | 0F EB / r | Bitové NEBO | |
PXOR mm, mm / m64 | 0F EF / r | Bitový XOR | |
PCMPEQB mm, mm / m64 | 0F 74 / r | Porovnejte zabalené bajty pro rovnost | |
PCMPEQW mm, mm / m64 | 0F 75 / r | Porovnejte zabalená slova pro rovnost | |
PCMPEQD mm, mm / m64 | 0F 76 / r | Porovnejte zabalená dvojí slova pro rovnost | |
PCMPGTB mm, mm / m64 | 0F 64 / r | Porovnejte celá zabalená podepsaná bajtová celá čísla pro větší než | |
PCMPGTW mm, mm / m64 | 0F 65 / r | Porovnejte celá celá čísla podepsaného slova s větším než | |
PCMPGTD mm, mm / m64 | 0F 66 / r | Porovnejte celá podepsaná dvojslovná celá čísla s větším než | |
PMADDWD mm, mm / m64 | 0F F5 / r | Několikanásobně zabalená slova, přidejte výsledky sousedních dvou slov | |
PMULHW mm, mm / m64 | 0F E5 / r | Několikanásobně zabalená celá čísla se znaménkem, ukládejte vysokých 16 bitů výsledků | |
PMULLW mm, mm / m64 | 0F D5 / r | Násobte celá podepsaná celá čísla, uložte nízkých 16 bitů výsledků | |
PSLLW mm1, imm8 | 0F 71/6 ib | Posun vlevo slov, posun v nulách | |
PSLLW mm, mm / m64 | 0F F1 / r | Posun vlevo slov, posun v nulách | |
PSLLD mm, imm8 | 0F 72/6 ib | Posuňte levé dvojité slovo, posuňte nuly | |
PSLLD mm, mm / m64 | 0F F2 / r | Posuňte levé dvojité slovo, posuňte nuly | |
PSLLQ mm, imm8 | 0F 73/6 ib | Shift left quadword, shift in nuly | |
PSLLQ mm, mm / m64 | 0F F3 / r | Shift left quadword, shift in nuly | |
PSRAD mm, imm8 | 0F 72/4 ib | Posuňte správná dvojitá slova, posuňte znaménkové bity | |
PSRAD mm, mm / m64 | 0F E2 / r | Posun doprava dvojitých slov, posun bitů znaménka | |
PSRAW mm, imm8 | 0F 71/4 ib | Posuňte správná slova, posuňte znakové bity | |
PSRAW mm, mm / m64 | 0F E1 / r | Posuňte správná slova, posuňte znakové bity | |
PSRLW mm, imm8 | 0F 71/2 ib | Posuňte správná slova, posuňte nuly | |
PSRLW mm, mm / m64 | 0F D1 / r | Posuňte správná slova, posuňte nuly | |
PSRLD mm, imm8 | 0F 72/2 ib | Posun doprava dvojitých slov, posun v nulách | |
PSRLD mm, mm / m64 | 0F D2 / r | Posun doprava dvojitých slov, posun v nulách | |
PSRLQ mm, imm8 | 0F 73/2 ib | Posunout pravé čtvercové slovo, posunout nuly | |
PSRLQ mm, mm / m64 | 0F D3 / r | Posunout pravé čtvercové slovo, posunout nuly | |
PSUBB mm, mm / m64 | 0F F8 / r | Odečtěte celá bajtová celá čísla | |
PSUBW mm, mm / m64 | 0F F9 / r | Odečtěte celá celá slova | |
PSUBD mm, mm / m64 | 0F FA / r | Odečtěte zabalená celá čísla dvou slov | |
PSUBSB mm, mm / m64 | 0F E8 / r | Odečtěte podepsané zabalené bajty se sytostí | |
PSUBSW mm, mm / m64 | 0F E9 / r | Odečtěte podepsaná zabalená slova se sytostí | |
PSUBUSB mm, mm / m64 | 0F D8 / r | Odečtěte nepodepsané zabalené bajty se sytostí | |
PSUBUSW mm, mm / m64 | 0F D9 / r | Odečtěte nepodepsaná zabalená slova se sytostí | |
PUNPCKHBW mm, mm / m64 | 0F 68 / r | Rozbalte a prokládejte bajty vysoké objednávky | |
PUNPCKHWD mm, mm / m64 | 0F 69 / r | Rozbalte a prokládejte slova vyššího řádu | |
PUNPCKHDQ mm, mm / m64 | 0F 6A / r | Rozbalte a prokládejte dvojitá slova vysoké řádu | |
PUNPCKLBW mm, mm / m32 | 0F 60 / r | Rozbalte a prokládejte bajty nízké objednávky | |
PUNPCKLWD mm, mm / m32 | 0F 61 / r | Rozbalte a prokládejte slova nízkého řádu | |
PUNPCKLDQ mm, mm / m32 | 0F 62 / r | Rozbalte a vložte dvojitá slova nízkého řádu |
Pokyny MMX přidané do konkrétních procesorů
EMMI instrukce
Přidáno s 6x86MX z Cyrix, nyní zastaralé
PAVEB, PADDSIW, PMAGW, PDISTIB, PSUBSIW, PMVZB, PMULHRW, PMVNZB, PMVLZB, PMVGEZB, PMULHRIW, PMACHRIW
Pokyny MMX přidány s MMX + a SSE
Následující instrukce MMX byla přidána pomocí SSE. Jsou také k dispozici na internetu Athlon pod názvem MMX +.
Návod | Operační kód | Význam |
---|---|---|
MASKMOVQ mm1, mm2 | 0F F7 / r | Maskovaný tah čtyřslov |
MOVNTQ m64, mm | 0F E7 / r | Přesuňte Quadword pomocí Non-Temporal Hint |
PSHUFW mm1, mm2 / m64, imm8 | 0F 70 / r ib | Zamíchejte zabalená slova |
PINSRW mm, r32 / m16, imm8 | 0F C4 / r | Vložte slovo |
PEXTRW reg, mm, imm8 | 0F C5 / r | Extrahujte slovo |
PMOVMSKB reg, mm | 0F D7 / r | Přesunout bajtovou masku |
PMINUB mm1, mm2 / m64 | 0F DA / r | Minimum zabalených celých nepodepsaných bajtů |
PMAXUB mm1, mm2 / m64 | 0F DE / r | Maximum zabalených nepodepsaných bajtů celých čísel |
PAVGB mm1, mm2 / m64 | 0F E0 / r | Průměrné zabalené celá čísla |
PAVGW mm1, mm2 / m64 | 0F E3 / r | Průměrné zabalené celá čísla |
PMULHUW mm1, mm2 / m64 | 0F E4 / r | Několikanásobné zabalení nepodepsaných celých čísel a uložení vysokého výsledku |
PMINSW mm1, mm2 / m64 | 0F EA / r | Minimum celých celých celých podepsaných slov |
PMAXSW mm1, mm2 / m64 | 0F EE / r | Maximum zabalených podepsaných slov |
PSADBW mm1, mm2 / m64 | 0F F6 / r | Vypočítejte součet absolutních rozdílů |
Pokyny MMX přidané s SSE2
Následující pokyny MMX byly přidány do SSE2:
Návod | Operační kód | Význam |
---|---|---|
PSUBQ mm1, mm2 / m64 | 0F FB / r | Odečíst celé číslo čtyřslovy |
PMULUDQ mm1, mm2 / m64 | 0F F4 / r | Vynásobte celé celé číslo bez znaménka |
Pokyny MMX přidané s SSSE3
Návod | Operační kód | Význam |
---|---|---|
PSIGNB mm1, mm2 / m64 | 0F 38 08 / r | Záporná / nulová / zachovat zabalená celá čísla bajtů v závislosti na odpovídajícím znaménku |
PSIGNW mm1, mm2 / m64 | 0F 38 09 / r | Negace / nula / zachování celých celých slov v závislosti na odpovídajícím znaménku |
PSIGND mm1, mm2 / m64 | 0F 38 0A / r | Vyloučit / vynulovat / zachovat zabalená celá dvojslovná celá čísla v závislosti na odpovídajícím znaménku |
PSHUFB mm1, mm2 / m64 | 0F 38 00 / r | Zamíchat bajty |
PMULHRSW mm1, mm2 / m64 | 0F 38 0B / r | Znásobte 16bitová podepsaná slova, škálovejte a zaokrouhlujte dvojitá slova, zabalte vysokých 16 bitů |
PMADDUBSW mm1, mm2 / m64 | 0F 38 04 / r | Znásobte podepsané a nepodepsané bajty, přidejte vodorovnou dvojici podepsaných slov, zabalte nasycená podepsaná slova |
PHSUBW mm1, mm2 / m64 | 0F 38 05 / r | Odečtěte a zabalte 16bitová celá čísla se znaménkem vodorovně |
PHSUBSW mm1, mm2 / m64 | 0F 38 07 / r | Odečtěte a zabalte 16bitové celé číslo se znaménkem vodorovně se sytostí |
PHSUBD mm1, mm2 / m64 | 0F 38 06 / r | Odečtěte a zabalte 32bitová celá čísla se znaménkem vodorovně |
PHADDSW mm1, mm2 / m64 | 0F 38 03 / r | Přidejte a zabalte 16bitová celá čísla se znaménkem vodorovně, nasycená celá čísla zabalte do mm1. |
PHADDW mm1, mm2 / m64 | 0F 38 01 / r | Přidejte a zabalte 16bitová celá čísla vodorovně |
PHADDD mm1, mm2 / m64 | 0F 38 02 / r | Přidejte a zabalte celá 32bitová celá čísla vodorovně |
PALIGNR mm1, mm2 / m64, imm8 | 0F 3A 0F / r ib | Zřetězit cílové a zdrojové operandy, extrahovat výsledek zarovnaný na bajt posunut doprava |
PABSB mm1, mm2 / m64 | 0F 38 1C / r | Vypočítejte absolutní hodnotu bajtů a uložte nepodepsaný výsledek |
PABSW mm1, mm2 / m64 | 0F 38 1D / r | Vypočítejte absolutní hodnotu 16bitových celých čísel a uložte nepodepsaný výsledek |
PABSD mm1, mm2 / m64 | 0F 38 1E / r | Vypočítejte absolutní hodnotu 32bitových celých čísel a uložte nepodepsaný výsledek |
3DNow! instrukce
Přidáno s K6-2
FEMMS, PAVGUSB, PF2ID, PFACC, PFADD, PFCMPEQ, PFCMPGE, PFCMPGT, PFMAX, PFMIN, PFMUL, PFRCP, PFRCPIT1, PFRCPIT2, PFRSQIT1, PFRSQRT, PFSUB, PFSUBR, PICHF
Pokyny 3DNow! +
Přidáno s Athlon a K6-2 +
PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD
Přidáno s Geode GX
PFRSQRTV, PFRCPV
SSE instrukce
Přidáno s Pentium III
Pokyny SSE fungují na registrech xmm, které jsou široké 128 bitů.
SSE se skládá z následujících pokynů SSE s plovoucí desetinnou čárkou:
Návod | Operační kód | Význam |
---|---|---|
ANDPS * xmm1, xmm2 / m128 | 0F 54 / r | Bitové logické AND souhrnných hodnot s plovoucí desetinnou čárkou s přesnou přesností |
ANDNPS * xmm1, xmm2 / m128 | 0F 55 / r | Bitové logické A NE sbalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
ORPS * xmm1, xmm2 / m128 | 0F 56 / r | Bitový logický NEBO hodnot s plovoucí desetinnou čárkou s přesnou přesností |
XORPS * xmm1, xmm2 / m128 | 0F 57 / r | Bitový logický XOR pro jednopřesné hodnoty s plovoucí desetinnou čárkou |
MOVUPS xmm1, xmm2 / m128 | 0F 10 / r | Přesunutí nezarovnaných zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
MOVSS xmm1, xmm2 / m32 | F3 0F 10 / r | Přesuňte skalární hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVUPS xmm2 / m128, xmm1 | 0F 11 / r | Přesunout nezarovnané zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVSS xmm2 / m32, xmm1 | F3 0F 11 / r | Přesuňte skalární hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVLPS xmm, m64 | 0F 12 / r | Přesuňte nízko zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVHLPS xmm1, xmm2 | 0F 12 / r | Přesuňte zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností z nejvyšší na nejnižší |
MOVLPS m64, xmm | 0F 13 / r | Přesuňte nízko zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
UNPCKLPS xmm1, xmm2 / m128 | 0F 14 / r | Rozbalte a prokládejte nízko zabalené jednopřesné hodnoty s plovoucí desetinnou čárkou |
UNPCKHPS xmm1, xmm2 / m128 | 0F 15 / r | Rozbalte a prokládejte vysoce zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVHPS xmm, m64 | 0F 16 / r | Přesuňte vysoce zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVLHPS xmm1, xmm2 | 0F 16 / r | Přesuňte zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností z nejnižší na nejvyšší |
MOVHPS m64, xmm | 0F 17 / r | Přesuňte vysoce zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVAPS xmm1, xmm2 / m128 | 0F 28 / r | Přesunout zarovnané zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVAPS xmm2 / m128, xmm1 | 0F 29 / r | Přesuňte zarovnané zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
MOVNTPS m128, xmm1 | 0F 2B / r | Přesun Zarovnáno čtyři zabalené Single-FP Non Temporal |
MOVMSKPS reg, xmm | 0F 50 / r | Extrahujte balenou jednopřesnou plovoucí desetinnou čárkou se 4bitovou maskou znamení. Horní bity registru jsou vyplněny nulami. |
CVTPI2PS xmm, mm / m64 | 0F 2A / r | Convert Packed Dword Integers to Packed Single-Precision FP Values |
CVTSI2SS xmm, r/m32 | F3 0F 2A /r | Convert Dword Integer to Scalar Single-Precision FP Value |
CVTSI2SS xmm, r/m64 | F3 REX.W 0F 2A /r | Convert Qword Integer to Scalar Single-Precision FP Value |
MOVNTPS m128, xmm | 0F 2B /r | Store Packed Single-Precision Floating-Point Values Using Non-Temporal Hint |
CVTTPS2PI mm, xmm/m64 | 0F 2C /r | Convert with Truncation Packed Single-Precision FP Values to Packed Dword Integers |
CVTTSS2SI r32, xmm/m32 | F3 0F 2C /r | Convert with Truncation Scalar Single-Precision FP Value to Dword Integer |
CVTTSS2SI r64, xmm1/m32 | F3 REX.W 0F 2C /r | Convert with Truncation Scalar Single-Precision FP Value to Qword Integer |
CVTPS2PI mm, xmm/m64 | 0F 2D /r | Convert Packed Single-Precision FP Values to Packed Dword Integers |
CVTSS2SI r32, xmm/m32 | F3 0F 2D /r | Convert Scalar Single-Precision FP Value to Dword Integer |
CVTSS2SI r64, xmm1/m32 | F3 REX.W 0F 2D /r | Convert Scalar Single-Precision FP Value to Qword Integer |
UCOMISS xmm1, xmm2/m32 | 0F 2E /r | Unordered Compare Scalar Single-Precision Floating-Point Values and Set EFLAGS |
COMISS xmm1, xmm2/m32 | 0F 2F /r | Compare Scalar Ordered Single-Precision Floating-Point Values and Set EFLAGS |
SQRTPS xmm1, xmm2/m128 | 0F 51 /r | Compute Square Roots of Packed Single-Precision Floating-Point Values |
SQRTSS xmm1, xmm2/m32 | F3 0F 51 /r | Compute Square Root of Scalar Single-Precision Floating-Point Value |
RSQRTPS xmm1, xmm2/m128 | 0F 52 /r | Compute Reciprocal of Square Root of Packed Single-Precision Floating-Point Value |
RSQRTSS xmm1, xmm2/m32 | F3 0F 52 /r | Compute Reciprocal of Square Root of Scalar Single-Precision Floating-Point Value |
RCPPS xmm1, xmm2/m128 | 0F 53 /r | Compute Reciprocal of Packed Single-Precision Floating-Point Values |
RCPSS xmm1, xmm2/m32 | F3 0F 53 /r | Compute Reciprocal of Scalar Single-Precision Floating-Point Values |
ADDPS xmm1, xmm2/m128 | 0F 58 /r | Add Packed Single-Precision Floating-Point Values |
ADDSS xmm1, xmm2/m32 | F3 0F 58 /r | Add Scalar Single-Precision Floating-Point Values |
MULPS xmm1, xmm2/m128 | 0F 59 /r | Multiply Packed Single-Precision Floating-Point Values |
MULSS xmm1, xmm2/m32 | F3 0F 59 /r | Multiply Scalar Single-Precision Floating-Point Values |
SUBPS xmm1, xmm2/m128 | 0F 5C /r | Subtract Packed Single-Precision Floating-Point Values |
SUBSS xmm1, xmm2/m32 | F3 0F 5C /r | Subtract Scalar Single-Precision Floating-Point Values |
MINPS xmm1, xmm2/m128 | 0F 5D /r | Return Minimum Packed Single-Precision Floating-Point Values |
MINSS xmm1, xmm2/m32 | F3 0F 5D /r | Return Minimum Scalar Single-Precision Floating-Point Values |
DIVPS xmm1, xmm2/m128 | 0F 5E /r | Divide Packed Single-Precision Floating-Point Values |
DIVSS xmm1, xmm2/m32 | F3 0F 5E /r | Divide Scalar Single-Precision Floating-Point Values |
MAXPS xmm1, xmm2/m128 | 0F 5F /r | Return Maximum Packed Single-Precision Floating-Point Values |
MAXSS xmm1, xmm2/m32 | F3 0F 5F /r | Return Maximum Scalar Single-Precision Floating-Point Values |
LDMXCSR m32 | 0F AE /2 | Load MXCSR Register State |
STMXCSR m32 | 0F AE /3 | Store MXCSR Register State |
CMPPS xmm1, xmm2/m128, imm8 | 0F C2 /r ib | Compare Packed Single-Precision Floating-Point Values |
CMPSS xmm1, xmm2/m32, imm8 | F3 0F C2 /r ib | Compare Scalar Single-Precision Floating-Point Values |
SHUFPS xmm1, xmm2/m128, imm8 | 0F C6 /r ib | Shuffle Packed Single-Precision Floating-Point Values |
- The floating point single bitwise operations ANDPS, ANDNPS, ORPS and XORPS produce the same result as the SSE2 integer (PAND, PANDN, POR, PXOR) and double ones (ANDPD, ANDNPD, ORPD, XORPD), but can introduce extra latency for domain changes when applied values of the wrong type.[11]
SSE2 instrukce
Přidáno s Pentium 4
SSE2 SIMD floating-point instructions
SSE2 data movement instructions
Návod | Operační kód | Význam |
---|---|---|
MOVAPD xmm1, xmm2/m128 | 66 0F 28 /r | Move Aligned Packed Double-Precision Floating-Point Values |
MOVAPD xmm2/m128, xmm1 | 66 0F 29 /r | Move Aligned Packed Double-Precision Floating-Point Values |
MOVNTPD m128, xmm1 | 66 0F 2B /r | Store Packed Double-Precision Floating-Point Values Using Non-Temporal Hint |
MOVHPD xmm1, m64 | 66 0F 16 /r | Move High Packed Double-Precision Floating-Point Value |
MOVHPD m64, xmm1 | 66 0F 17 /r | Move High Packed Double-Precision Floating-Point Value |
MOVLPD xmm1, m64 | 66 0F 12 /r | Move Low Packed Double-Precision Floating-Point Value |
MOVLPD m64, xmm1 | 66 0F 13/r | Move Low Packed Double-Precision Floating-Point Value |
MOVUPD xmm1, xmm2/m128 | 66 0F 10 /r | Move Unaligned Packed Double-Precision Floating-Point Values |
MOVUPD xmm2/m128, xmm1 | 66 0F 11 /r | Move Unaligned Packed Double-Precision Floating-Point Values |
MOVMSKPD reg, xmm | 66 0F 50 /r | Extract Packed Double-Precision Floating-Point Sign Mask |
MOVSD* xmm1, xmm2/m64 | F2 0F 10 /r | Move or Merge Scalar Double-Precision Floating-Point Value |
MOVSD xmm1/m64, xmm2 | F2 0F 11 /r | Move or Merge Scalar Double-Precision Floating-Point Value |
SSE2 packed arithmetic instructions
Návod | Operační kód | Význam |
---|---|---|
ADDPD xmm1, xmm2/m128 | 66 0F 58 /r | Add Packed Double-Precision Floating-Point Values |
ADDSD xmm1, xmm2/m64 | F2 0F 58 /r | Add Low Double-Precision Floating-Point Value |
DIVPD xmm1, xmm2/m128 | 66 0F 5E /r | Divide Packed Double-Precision Floating-Point Values |
DIVSD xmm1, xmm2/m64 | F2 0F 5E /r | Divide Scalar Double-Precision Floating-Point Value |
MAXPD xmm1, xmm2/m128 | 66 0F 5F /r | Maximum of Packed Double-Precision Floating-Point Values |
MAXSD xmm1, xmm2/m64 | F2 0F 5F /r | Return Maximum Scalar Double-Precision Floating-Point Value |
MINPD xmm1, xmm2/m128 | 66 0F 5D /r | Minimum of Packed Double-Precision Floating-Point Values |
MINSD xmm1, xmm2/m64 | F2 0F 5D /r | Return Minimum Scalar Double-Precision Floating-Point Value |
MULPD xmm1, xmm2/m128 | 66 0F 59 /r | Multiply Packed Double-Precision Floating-Point Values |
MULSD xmm1,xmm2/m64 | F2 0F 59 /r | Multiply Scalar Double-Precision Floating-Point Value |
SQRTPD xmm1, xmm2/m128 | 66 0F 51 /r | Square Root of Double-Precision Floating-Point Values |
SQRTSD xmm1,xmm2/m64 | F2 0F 51/r | Compute Square Root of Scalar Double-Precision Floating-Point Value |
SUBPD xmm1, xmm2/m128 | 66 0F 5C /r | Subtract Packed Double-Precision Floating-Point Values |
SUBSD xmm1, xmm2/m64 | F2 0F 5C /r | Subtract Scalar Double-Precision Floating-Point Value |
SSE2 logical instructions
Návod | Operační kód | Význam |
---|---|---|
ANDPD xmm1, xmm2/m128 | 66 0F 54 /r | Bitwise Logical AND of Packed Double Precision Floating-Point Values |
ANDNPD xmm1, xmm2/m128 | 66 0F 55 /r | Bitwise Logical AND NOT of Packed Double Precision Floating-Point Values |
ORPD xmm1, xmm2/m128 | 66 0F 56/r | Bitwise Logical OR of Packed Double Precision Floating-Point Values |
XORPD xmm1, xmm2/m128 | 66 0F 57/r | Bitwise Logical XOR of Packed Double Precision Floating-Point Values |
SSE2 compare instructions
Návod | Operační kód | Význam |
---|---|---|
CMPPD xmm1, xmm2/m128, imm8 | 66 0F C2 /r ib | Compare Packed Double-Precision Floating-Point Values |
CMPSD* xmm1, xmm2/m64, imm8 | F2 0F C2 /r ib | Compare Low Double-Precision Floating-Point Values |
COMISD xmm1, xmm2/m64 | 66 0F 2F /r | Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS |
UCOMISD xmm1, xmm2/m64 | 66 0F 2E /r | Unordered Compare Scalar Double-Precision Floating-Point Values and Set EFLAGS |
SSE2 shuffle and unpack instructions
Návod | Operační kód | Význam |
---|---|---|
SHUFPD xmm1, xmm2/m128, imm8 | 66 0F C6 /r ib | Packed Interleave Shuffle of Pairs of Double-Precision Floating-Point Values |
UNPCKHPD xmm1, xmm2/m128 | 66 0F 15 /r | Unpack and Interleave High Packed Double-Precision Floating-Point Values |
UNPCKLPD xmm1, xmm2/m128 | 66 0F 14 /r | Unpack and Interleave Low Packed Double-Precision Floating-Point Values |
SSE2 conversion instructions
Návod | Operační kód | Význam |
---|---|---|
CVTDQ2PD xmm1, xmm2/m64 | F3 0F E6 /r | Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values |
CVTDQ2PS xmm1, xmm2/m128 | 0F 5B /r | Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values |
CVTPD2DQ xmm1, xmm2/m128 | F2 0F E6 /r | Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers |
CVTPD2PI mm, xmm/m128 | 66 0F 2D /r | Convert Packed Double-Precision FP Values to Packed Dword Integers |
CVTPD2PS xmm1, xmm2/m128 | 66 0F 5A /r | Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision Floating-Point Values |
CVTPI2PD xmm, mm/m64 | 66 0F 2A /r | Convert Packed Dword Integers to Packed Double-Precision FP Values |
CVTPS2DQ xmm1, xmm2/m128 | 66 0F 5B /r | Convert Packed Single-Precision Floating-Point Values to Packed Signed Doubleword Integer Values |
CVTPS2PD xmm1, xmm2/m64 | 0F 5A /r | Convert Packed Single-Precision Floating-Point Values to Packed Double-Precision Floating-Point Values |
CVTSD2SI r32, xmm1/m64 | F2 0F 2D /r | Convert Scalar Double-Precision Floating-Point Value to Doubleword Integer |
CVTSD2SI r64, xmm1/m64 | F2 REX.W 0F 2D /r | Convert Scalar Double-Precision Floating-Point Value to Quadword Integer With Sign Extension |
CVTSD2SS xmm1, xmm2/m64 | F2 0F 5A /r | Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value |
CVTSI2SD xmm1, r32/m32 | F2 0F 2A /r | Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value |
CVTSI2SD xmm1, r/m64 | F2 REX.W 0F 2A /r | Convert Quadword Integer to Scalar Double-Precision Floating-Point value |
CVTSS2SD xmm1, xmm2/m32 | F3 0F 5A /r | Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value |
CVTTPD2DQ xmm1, xmm2/m128 | 66 0F E6 /r | Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers |
CVTTPD2PI mm, xmm/m128 | 66 0F 2C /r | Convert with Truncation Packed Double-Precision FP Values to Packed Dword Integers |
CVTTPS2DQ xmm1, xmm2/m128 | F3 0F 5B /r | Convert with Truncation Packed Single-Precision Floating-Point Values to Packed Signed Doubleword Integer Values |
CVTTSD2SI r32, xmm1/m64 | F2 0F 2C /r | Convert with Truncation Scalar Double-Precision Floating-Point Value to Signed Dword Integer |
CVTTSD2SI r64, xmm1/m64 | F2 REX.W 0F 2C /r | Convert with Truncation Scalar Double-Precision Floating-Point Value To Signed Qword Integer |
- CMPSD a MOVSD have the same name as the tětiva instruction mnemonics CMPSD (CMPS) a MOVSD (MOVS); however, the former refer to scalar dvojnásobná přesnost floating-points whereas the latters refer to doubleword struny.
SSE2 SIMD integer instructions
SSE2 MMX-like instructions extended to SSE registers
SSE2 allows execution of MMX instructions on SSE registers, processing twice the amount of data at once.
Návod | Operační kód | Význam |
---|---|---|
MOVD xmm, r/m32 | 66 0F 6E /r | Move doubleword |
MOVD r/m32, xmm | 66 0F 7E /r | Move doubleword |
MOVQ xmm1, xmm2/m64 | F3 0F 7E /r | Move quadword |
MOVQ xmm2/m64, xmm1 | 66 0F D6 /r | Move quadword |
MOVQ r/m64, xmm | 66 REX.W 0F 7E /r | Move quadword |
MOVQ xmm, r/m64 | 66 REX.W 0F 6E /r | Move quadword |
PMOVMSKB reg, xmm | 66 0F D7 /r | Move a byte mask, zeroing the upper bits of the register |
PEXTRW reg, xmm, imm8 | 66 0F C5 /r ib | Extract specified word and move it to reg, setting bits 15-0 and zeroing the rest |
PINSRW xmm, r32/m16, imm8 | 66 0F C4 /r ib | Move low word at the specified word position |
PACKSSDW xmm1, xmm2/m128 | 66 0F 6B /r | Converts 4 packed signed doubleword integers into 8 packed signed word integers with saturation |
PACKSSWB xmm1, xmm2/m128 | 66 0F 63 /r | Converts 8 packed signed word integers into 16 packed signed byte integers with saturation |
PACKUSWB xmm1, xmm2/m128 | 66 0F 67 /r | Converts 8 signed word integers into 16 unsigned byte integers with saturation |
PADDB xmm1, xmm2/m128 | 66 0F FC /r | Add packed byte integers |
PADDW xmm1, xmm2/m128 | 66 0F FD /r | Add packed word integers |
PADDD xmm1, xmm2/m128 | 66 0F FE /r | Add packed doubleword integers |
PADDQ xmm1, xmm2/m128 | 66 0F D4 /r | Add packed quadword integers. |
PADDSB xmm1, xmm2/m128 | 66 0F EC /r | Add packed signed byte integers with saturation |
PADDSW xmm1, xmm2/m128 | 66 0F ED /r | Add packed signed word integers with saturation |
PADDUSB xmm1, xmm2/m128 | 66 0F DC /r | Add packed unsigned byte integers with saturation |
PADDUSW xmm1, xmm2/m128 | 66 0F DD /r | Add packed unsigned word integers with saturation |
PAND xmm1, xmm2/m128 | 66 0F DB /r | Bitové AND |
PANDN xmm1, xmm2/m128 | 66 0F DF /r | Bitwise AND NOT |
POR xmm1, xmm2/m128 | 66 0F EB /r | Bitové NEBO |
PXOR xmm1, xmm2/m128 | 66 0F EF /r | Bitový XOR |
PCMPEQB xmm1, xmm2/m128 | 66 0F 74 /r | Compare packed bytes for equality. |
PCMPEQW xmm1, xmm2/m128 | 66 0F 75 /r | Compare packed words for equality. |
PCMPEQD xmm1, xmm2/m128 | 66 0F 76 /r | Compare packed doublewords for equality. |
PCMPGTB xmm1, xmm2/m128 | 66 0F 64 /r | Compare packed signed byte integers for greater than |
PCMPGTW xmm1, xmm2/m128 | 66 0F 65 /r | Compare packed signed word integers for greater than |
PCMPGTD xmm1, xmm2/m128 | 66 0F 66 /r | Compare packed signed doubleword integers for greater than |
PMULLW xmm1, xmm2/m128 | 66 0F D5 /r | Multiply packed signed word integers with saturation |
PMULHW xmm1, xmm2/m128 | 66 0F E5 /r | Multiply the packed signed word integers, store the high 16 bits of the results |
PMULHUW xmm1, xmm2/m128 | 66 0F E4 /r | Multiply packed unsigned word integers, store the high 16 bits of the results |
PMULUDQ xmm1, xmm2/m128 | 66 0F F4 /r | Multiply packed unsigned doubleword integers |
PSLLW xmm1, xmm2/m128 | 66 0F F1 /r | Shift words left while shifting in 0s |
PSLLW xmm1, imm8 | 66 0F 71 /6 ib | Shift words left while shifting in 0s |
PSLLD xmm1, xmm2/m128 | 66 0F F2 /r | Shift doublewords left while shifting in 0s |
PSLLD xmm1, imm8 | 66 0F 72 /6 ib | Shift doublewords left while shifting in 0s |
PSLLQ xmm1, xmm2/m128 | 66 0F F3 /r | Shift quadwords left while shifting in 0s |
PSLLQ xmm1, imm8 | 66 0F 73 /6 ib | Shift quadwords left while shifting in 0s |
PSRAD xmm1, xmm2/m128 | 66 0F E2 /r | Shift doubleword right while shifting in sign bits |
PSRAD xmm1, imm8 | 66 0F 72 /4 ib | Shift doublewords right while shifting in sign bits |
PSRAW xmm1, xmm2/m128 | 66 0F E1 /r | Shift words right while shifting in sign bits |
PSRAW xmm1, imm8 | 66 0F 71 /4 ib | Shift words right while shifting in sign bits |
PSRLW xmm1, xmm2/m128 | 66 0F D1 /r | Shift words right while shifting in 0s |
PSRLW xmm1, imm8 | 66 0F 71 /2 ib | Shift words right while shifting in 0s |
PSRLD xmm1, xmm2/m128 | 66 0F D2 /r | Shift doublewords right while shifting in 0s |
PSRLD xmm1, imm8 | 66 0F 72 /2 ib | Shift doublewords right while shifting in 0s |
PSRLQ xmm1, xmm2/m128 | 66 0F D3 /r | Shift quadwords right while shifting in 0s |
PSRLQ xmm1, imm8 | 66 0F 73 /2 ib | Shift quadwords right while shifting in 0s |
PSUBB xmm1, xmm2/m128 | 66 0F F8 /r | Subtract packed byte integers |
PSUBW xmm1, xmm2/m128 | 66 0F F9 /r | Subtract packed word integers |
PSUBD xmm1, xmm2/m128 | 66 0F FA /r | Subtract packed doubleword integers |
PSUBQ xmm1, xmm2/m128 | 66 0F FB /r | Subtract packed quadword integers. |
PSUBSB xmm1, xmm2/m128 | 66 0F E8 /r | Subtract packed signed byte integers with saturation |
PSUBSW xmm1, xmm2/m128 | 66 0F E9 /r | Subtract packed signed word integers with saturation |
PMADDWD xmm1, xmm2/m128 | 66 0F F5 /r | Multiply the packed word integers, add adjacent doubleword results |
PSUBUSB xmm1, xmm2/m128 | 66 0F D8 /r | Subtract packed unsigned byte integers with saturation |
PSUBUSW xmm1, xmm2/m128 | 66 0F D9 /r | Subtract packed unsigned word integers with saturation |
PUNPCKHBW xmm1, xmm2/m128 | 66 0F 68 /r | Unpack and interleave high-order bytes |
PUNPCKHWD xmm1, xmm2/m128 | 66 0F 69 /r | Unpack and interleave high-order words |
PUNPCKHDQ xmm1, xmm2/m128 | 66 0F 6A /r | Unpack and interleave high-order doublewords |
PUNPCKLBW xmm1, xmm2/m128 | 66 0F 60 /r | Interleave low-order bytes |
PUNPCKLWD xmm1, xmm2/m128 | 66 0F 61 /r | Interleave low-order words |
PUNPCKLDQ xmm1, xmm2/m128 | 66 0F 62 /r | Interleave low-order doublewords |
PAVGB xmm1, xmm2/m128 | 66 0F E0, /r | Average packed unsigned byte integers with rounding |
PAVGW xmm1, xmm2/m128 | 66 0F E3 /r | Average packed unsigned word integers with rounding |
PMINUB xmm1, xmm2/m128 | 66 0F DA /r | Compare packed unsigned byte integers and store packed minimum values |
PMINSW xmm1, xmm2/m128 | 66 0F EA /r | Compare packed signed word integers and store packed minimum values |
PMAXSW xmm1, xmm2/m128 | 66 0F EE /r | Compare packed signed word integers and store maximum packed values |
PMAXUB xmm1, xmm2/m128 | 66 0F DE /r | Compare packed unsigned byte integers and store packed maximum values |
PSADBW xmm1, xmm2/m128 | 66 0F F6 /r | Computes the absolute differences of the packed unsigned byte integers; the 8 low differences and 8 high differences are then summed separately to produce two unsigned word integer results |
SSE2 integer instructions for SSE registers only
The following instructions can be used only on SSE registers, since by their nature they do not work on MMX registers
Návod | Operační kód | Význam |
---|---|---|
MASKMOVDQU xmm1, xmm2 | 66 0F F7 /r | Non-Temporal Store of Selected Bytes from an XMM Register into Memory |
MOVDQ2Q mm, xmm | F2 0F D6 /r | Move low quadword from XMM to MMX register. |
MOVDQA xmm1, xmm2/m128 | 66 0F 6F /r | Move aligned double quadword |
MOVDQA xmm2/m128, xmm1 | 66 0F 7F /r | Move aligned double quadword |
MOVDQU xmm1, xmm2/m128 | F3 0F 6F /r | Move unaligned double quadword |
MOVDQU xmm2/m128, xmm1 | F3 0F 7F /r | Move unaligned double quadword |
MOVQ2DQ xmm, mm | F3 0F D6 /r | Move quadword from MMX register to low quadword of XMM register |
MOVNTDQ m128, xmm1 | 66 0F E7 /r | Store Packed Integers Using Non-Temporal Hint |
PSHUFHW xmm1, xmm2/m128, imm8 | F3 0F 70 /r ib | Shuffle packed high words. |
PSHUFLW xmm1, xmm2/m128, imm8 | F2 0F 70 /r ib | Shuffle packed low words. |
PSHUFD xmm1, xmm2/m128, imm8 | 66 0F 70 /r ib | Shuffle packed doublewords. |
PSLLDQ xmm1, imm8 | 66 0F 73 /7 ib | Packed shift left logical double quadwords. |
PSRLDQ xmm1, imm8 | 66 0F 73 /3 ib | Packed shift right logical double quadwords. |
PUNPCKHQDQ xmm1, xmm2/m128 | 66 0F 6D /r | Unpack and interleave high-order quadwords, |
PUNPCKLQDQ xmm1, xmm2/m128 | 66 0F 6C /r | Interleave low quadwords, |
SSE3 instrukce
Added with Pentium 4 supporting SSE3
SSE3 SIMD floating-point instructions
Návod | Operační kód | Význam | Poznámky |
---|---|---|---|
ADDSUBPS xmm1, xmm2/m128 | F2 0F D0 /r | Add/subtract single-precision floating-point values | for Complex Arithmetic |
ADDSUBPD xmm1, xmm2/m128 | 66 0F D0 /r | Add/subtract double-precision floating-point values | |
MOVDDUP xmm1, xmm2/m64 | F2 0F 12 /r | Move double-precision floating-point value and duplicate | |
MOVSLDUP xmm1, xmm2/m128 | F3 0F 12 /r | Move and duplicate even index single-precision floating-point values | |
MOVSHDUP xmm1, xmm2/m128 | F3 0F 16 /r | Move and duplicate odd index single-precision floating-point values | |
HADDPS xmm1, xmm2/m128 | F2 0F 7C /r | Horizontal add packed single-precision floating-point values | for Graphics |
HADDPD xmm1, xmm2/m128 | 66 0F 7C /r | Horizontal add packed double-precision floating-point values | |
HSUBPS xmm1, xmm2/m128 | F2 0F 7D /r | Horizontal subtract packed single-precision floating-point values | |
HSUBPD xmm1, xmm2/m128 | 66 0F 7D /r | Horizontal subtract packed double-precision floating-point values |
SSE3 SIMD integer instructions
Návod | Operační kód | Význam | Poznámky |
---|---|---|---|
LDDQU xmm1, mem | F2 0F F0 /r | Load unaligned data and return double quadword | Instructionally equivalent to MOVDQU. For video encoding |
SSSE3 instrukce
Přidáno s Xeon 5100 series and initial Jádro 2
The following MMX-like instructions extended to SSE registers were added with SSSE3
Návod | Operační kód | Význam |
---|---|---|
PSIGNB xmm1, xmm2/m128 | 66 0F 38 08 /r | Negate/zero/preserve packed byte integers depending on corresponding sign |
PSIGNW xmm1, xmm2/m128 | 66 0F 38 09 /r | Negate/zero/preserve packed word integers depending on corresponding sign |
PSIGND xmm1, xmm2/m128 | 66 0F 38 0A /r | Negate/zero/preserve packed doubleword integers depending on corresponding |
PSHUFB xmm1, xmm2/m128 | 66 0F 38 00 /r | Shuffle bytes |
PMULHRSW xmm1, xmm2/m128 | 66 0F 38 0B /r | Multiply 16-bit signed words, scale and round signed doublewords, pack high 16 bits |
PMADDUBSW xmm1, xmm2/m128 | 66 0F 38 04 /r | Multiply signed and unsigned bytes, add horizontal pair of signed words, pack saturated signed-words |
PHSUBW xmm1, xmm2/m128 | 66 0F 38 05 /r | Subtract and pack 16-bit signed integers horizontally |
PHSUBSW xmm1, xmm2/m128 | 66 0F 38 07 /r | Subtract and pack 16-bit signed integer horizontally with saturation |
PHSUBD xmm1, xmm2/m128 | 66 0F 38 06 /r | Subtract and pack 32-bit signed integers horizontally |
PHADDSW xmm1, xmm2/m128 | 66 0F 38 03 /r | Add and pack 16-bit signed integers horizontally with saturation |
PHADDW xmm1, xmm2/m128 | 66 0F 38 01 /r | Add and pack 16-bit integers horizontally |
PHADDD xmm1, xmm2/m128 | 66 0F 38 02 /r | Add and pack 32-bit integers horizontally |
PALIGNR xmm1, xmm2/m128, imm8 | 66 0F 3A 0F /r ib | Concatenate destination and source operands, extract byte-aligned result shifted to the right |
PABSB xmm1, xmm2/m128 | 66 0F 38 1C /r | Compute the absolute value of bytes and store unsigned result |
PABSW xmm1, xmm2/m128 | 66 0F 38 1D /r | Compute the absolute value of 16-bit integers and store unsigned result |
PABSD xmm1, xmm2/m128 | 66 0F 38 1E /r | Compute the absolute value of 32-bit integers and store unsigned result |
SSE4 instrukce
SSE4.1
Přidáno s Jádro 2 vyrobeno v 45nm
SSE4.1 SIMD floating-point instructions
Návod | Operační kód | Význam |
---|---|---|
DPPS xmm1, xmm2/m128, imm8 | 66 0F 3A 40 /r ib | Selectively multiply packed SP floating-point values, add and selectively store |
DPPD xmm1, xmm2/m128, imm8 | 66 0F 3A 41 /r ib | Selectively multiply packed DP floating-point values, add and selectively store |
BLENDPS xmm1, xmm2/m128, imm8 | 66 0F 3A 0C /r ib | Select packed single precision floating-point values from specified mask |
BLENDVPS xmm1, xmm2/m128, | 66 0F 38 14 /r | Select packed single precision floating-point values from specified mask |
BLENDPD xmm1, xmm2/m128, imm8 | 66 0F 3A 0D /r ib | Select packed DP-FP values from specified mask |
BLENDVPD xmm1, xmm2/m128 , | 66 0F 38 15 /r | Select packed DP FP values from specified mask |
ROUNDPS xmm1, xmm2/m128, imm8 | 66 0F 3A 08 /r ib | Round packed single precision floating-point values |
ROUNDSS xmm1, xmm2/m32, imm8 | 66 0F 3A 0A /r ib | Round the low packed single precision floating-point value |
ROUNDPD xmm1, xmm2/m128, imm8 | 66 0F 3A 09 /r ib | Round packed double precision floating-point values |
ROUNDSD xmm1, xmm2/m64, imm8 | 66 0F 3A 0B /r ib | Round the low packed double precision floating-point value |
INSERTPS xmm1, xmm2/m32, imm8 | 66 0F 3A 21 /r ib | Insert a selected single-precision floating-point value at the specified destination element and zero out destination elements |
EXTRACTPS reg/m32, xmm1, imm8 | 66 0F 3A 17 /r ib | Extract one single-precision floating-point value at specified offset and store the result (zero-extended, if applicable) |
SSE4.1 SIMD integer instructions
Návod | Operační kód | Význam |
---|---|---|
MPSADBW xmm1, xmm2/m128, imm8 | 66 0F 3A 42 /r ib | Sums absolute 8-bit integer difference of adjacent groups of 4 byte integers with starting offset |
PHMINPOSUW xmm1, xmm2/m128 | 66 0F 38 41 /r | Find the minimum unsigned word |
PMULLD xmm1, xmm2/m128 | 66 0F 38 40 /r | Multiply the packed dword signed integers and store the low 32 bits |
PMULDQ xmm1, xmm2/m128 | 66 0F 38 28 /r | Multiply packed signed doubleword integers and store quadword result |
PBLENDVB xmm1, xmm2/m128, | 66 0F 38 10 /r | Select byte values from specified mask |
PBLENDW xmm1, xmm2/m128, imm8 | 66 0F 3A 0E /r ib | Select words from specified mask |
PMINSB xmm1, xmm2/m128 | 66 0F 38 38 /r | Compare packed signed byte integers |
PMINUW xmm1, xmm2/m128 | 66 0F 38 3A/r | Compare packed unsigned word integers |
PMINSD xmm1, xmm2/m128 | 66 0F 38 39 /r | Compare packed signed dword integers |
PMINUD xmm1, xmm2/m128 | 66 0F 38 3B /r | Compare packed unsigned dword integers |
PMAXSB xmm1, xmm2/m128 | 66 0F 38 3C /r | Compare packed signed byte integers |
PMAXUW xmm1, xmm2/m128 | 66 0F 38 3E/r | Compare packed unsigned word integers |
PMAXSD xmm1, xmm2/m128 | 66 0F 38 3D /r | Compare packed signed dword integers |
PMAXUD xmm1, xmm2/m128 | 66 0F 38 3F /r | Compare packed unsigned dword integers |
PINSRB xmm1, r32/m8, imm8 | 66 0F 3A 20 /r ib | Insert a byte integer value at specified destination element |
PINSRD xmm1, r/m32, imm8 | 66 0F 3A 22 /r ib | Insert a dword integer value at specified destination element |
PINSRQ xmm1, r/m64, imm8 | 66 REX.W 0F 3A 22 /r ib | Insert a qword integer value at specified destination element |
PEXTRB reg/m8, xmm2, imm8 | 66 0F 3A 14 /r ib | Extract a byte integer value at source byte offset, upper bits are zeroed. |
PEXTRW reg/m16, xmm, imm8 | 66 0F 3A 15 /r ib | Extract word and copy to lowest 16 bits, zero-extended |
PEXTRD r/m32, xmm2, imm8 | 66 0F 3A 16 /r ib | Extract a dword integer value at source dword offset |
PEXTRQ r/m64, xmm2, imm8 | 66 REX.W 0F 3A 16 /r ib | Extract a qword integer value at source qword offset |
PMOVSXBW xmm1, xmm2/m64 | 66 0f 38 20 /r | Sign extend 8 packed 8-bit integers to 8 packed 16-bit integers |
PMOVZXBW xmm1, xmm2/m64 | 66 0f 38 30 /r | Zero extend 8 packed 8-bit integers to 8 packed 16-bit integers |
PMOVSXBD xmm1, xmm2/m32 | 66 0f 38 21 /r | Sign extend 4 packed 8-bit integers to 4 packed 32-bit integers |
PMOVZXBD xmm1, xmm2/m32 | 66 0f 38 31 /r | Zero extend 4 packed 8-bit integers to 4 packed 32-bit integers |
PMOVSXBQ xmm1, xmm2/m16 | 66 0f 38 22 /r | Sign extend 2 packed 8-bit integers to 2 packed 64-bit integers |
PMOVZXBQ xmm1, xmm2/m16 | 66 0f 38 32 /r | Zero extend 2 packed 8-bit integers to 2 packed 64-bit integers |
PMOVSXWD xmm1, xmm2/m64 | 66 0f 38 23/r | Sign extend 4 packed 16-bit integers to 4 packed 32-bit integers |
PMOVZXWD xmm1, xmm2/m64 | 66 0f 38 33 /r | Zero extend 4 packed 16-bit integers to 4 packed 32-bit integers |
PMOVSXWQ xmm1, xmm2/m32 | 66 0f 38 24 /r | Sign extend 2 packed 16-bit integers to 2 packed 64-bit integers |
PMOVZXWQ xmm1, xmm2/m32 | 66 0f 38 34 /r | Zero extend 2 packed 16-bit integers to 2 packed 64-bit integers |
PMOVSXDQ xmm1, xmm2/m64 | 66 0f 38 25 /r | Sign extend 2 packed 32-bit integers to 2 packed 64-bit integers |
PMOVZXDQ xmm1, xmm2/m64 | 66 0f 38 35 /r | Zero extend 2 packed 32-bit integers to 2 packed 64-bit integers |
PTEST xmm1, xmm2/m128 | 66 0F 38 17 /r | Set ZF if AND result is all 0s, set CF if AND NOT result is all 0s |
PCMPEQQ xmm1, xmm2/m128 | 66 0F 38 29 /r | Compare packed qwords for equality |
PACKUSDW xmm1, xmm2/m128 | 66 0F 38 2B /r | Convert 2 × 4 packed signed doubleword integers into 8 packed unsigned word integers with saturation |
MOVNTDQA xmm1, m128 | 66 0F 38 2A /r | Move double quadword using non-temporal hint if WC memory type |
SSE4a
Přidáno s Phenom procesory
- EXTRQ / INSERTQ
- MOVNTSD / MOVNTSS
SSE4.2
Přidáno s Nehalem procesory
Návod | Operační kód | Význam |
---|---|---|
PCMPESTRI xmm1, xmm2 / m128, imm8 | 66 0F 3A 61 / r im8 | Sbalené porovnání řetězcových dat s explicitními délkami, generování indexu |
PCMPESTRM xmm1, xmm2 / m128, imm8 | 66 0F 3A 60 / r im8 | Sbalené srovnání řetězcových dat s explicitními délkami, generující masku |
PCMPISTRI xmm1, xmm2 / m128, imm8 | 66 0F 3A 63 / r im8 | Sbalené porovnání řetězcových dat s implicitní délkou, generování indexu |
PCMPISTRM xmm1, xmm2 / m128, imm8 | 66 0F 3A 62 / r im8 | Sbalené srovnání řetězcových dat s implicitními délkami, generující masku |
PCMPGTQ xmm1, xmm2 / m128 | 66 0F 38 37 / r | Porovnejte zabalená podepsaná slova s více než. |
SSE5 odvozené pokyny
SSE5 bylo navrhované rozšíření SSE společností AMD. Balíček neobsahoval úplnou sadu instrukcí Intel SSE4, což z něj dělá spíše konkurenta SSE4 než jeho nástupce. AMD se rozhodla neimplementovat SSE5, jak bylo původně navrženo, nicméně byla zavedena odvozená rozšíření SSE.
XOP
Představeno s jádrem procesoru buldozeru, opět odstraněno z Zen (mikroarchitektura) Kupředu.
Revize většiny instrukční sady SSE5
F16C
Převod s plovoucí desetinnou čárkou s poloviční přesností.
Návod | Význam |
---|---|
VCVTPH2PS xmmreg, xmmrm64 | Převést čtyři hodnoty s plovoucí desetinnou čárkou s poloviční přesností v paměti nebo dolní polovině registru XMM na čtyři hodnoty s plovoucí desetinnou čárkou s jednou přesností v registru XMM |
VCVTPH2PS ymmreg, xmmrm128 | Převést osm hodnot s plovoucí desetinnou čárkou s poloviční přesností v paměti nebo registru XMM (spodní polovina registru YMM) na osm hodnot s plovoucí desetinnou čárkou s jednou přesností v registru YMM |
VCVTPS2PH xmmrm64, xmmreg, imm8 | Převést čtyři hodnoty s plovoucí desetinnou čárkou s jednoduchou přesností v registru XMM na hodnoty s plovoucí desetinnou čárkou s poloviční přesností v paměti nebo dolní polovinu registru XMM |
VCVTPS2PH xmmrm128, ymmreg, imm8 | Převést osm hodnot s plovoucí desetinnou čárkou s jednoduchou přesností v registru YMM na hodnoty s plovoucí desetinnou čárkou s poloviční přesností v paměti nebo registru XMM |
FMA3
Podporováno v procesorech AMD počínaje architekturou Piledriver a Intel počínaje procesory Haswell a Broadwell od roku 2014.
Tavené násobení-přidání (vektor s plovoucí desetinnou čárkou násobit – akumulovat) se třemi operandy.
Návod | Význam |
---|---|
VFMADD132PD | Sloučené vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMADD213PD | Fúzované vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMADD231PD | Sloučené vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMADD132PS | Sloučené vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMADD213PS | Sloučené vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMADD231PS | Sloučené vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMADD132SD | Fúzované vícenásobné přidání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFMADD213SD | Fúzované vícenásobné přidání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFMADD231SD | Fúzované vícenásobné přidání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFMADD132SS | Fúzované vícenásobné přidání skalárních jednopřesných hodnot s plovoucí desetinnou čárkou |
VFMADD213SS | Fúzované vícenásobné přidání skalárních jednopřesných hodnot s plovoucí desetinnou čárkou |
VFMADD231SS | Fúzované vícenásobné přidání skalárních jednopřesných hodnot s plovoucí desetinnou čárkou |
VFMADDSUB132PD | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMADDSUB213PD | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMADDSUB231PD | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMADDSUB132PS | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMADDSUB213PS | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMADDSUB231PS | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMSUB132PD | Fúzované násobení-odečtení zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMSUB213PD | Fúzované násobení-odečtení zabalených hodnot s dvojitou přesností s plovoucí desetinnou čárkou |
VFMSUB231PD | Fúzované násobení-odečtení zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFMSUB132PS | Fúzované násobení-odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMSUB213PS | Fúzované násobné odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMSUB231PS | Fúzované násobení-odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFMSUB132SD | Fúzované násobení a odčítání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFMSUB213SD | Fúzované násobení a odčítání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFMSUB231SD | Fúzované násobení a odčítání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFMSUB132SS | Fúzované násobné odečtení skalárních hodnot s jednoduchou plovoucí desetinnou čárkou |
VFMSUB213SS | Fúzované násobné odečtení skalárních hodnot s jednoduchou plovoucí desetinnou čárkou |
VFMSUB231SS | Fúzované násobné odečtení skalárních hodnot s jednoduchou plovoucí desetinnou čárkou |
VFMSUBADD132PD | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s dvojitou přesností |
VFMSUBADD213PD | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s dvojitou přesností |
VFMSUBADD231PD | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s dvojitou přesností |
VFMSUBADD132PS | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
VFMSUBADD213PS | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
VFMSUBADD231PS | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností |
VFNMADD132PD | Fúzované záporné násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFNMADD213PD | Fúzované záporné násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFNMADD231PD | Fúzované záporné násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností |
VFNMADD132PS | Fúzované záporné násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFNMADD213PS | Fúzované záporné násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFNMADD231PS | Fúzované záporné násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFNMADD132SD | Fúzované záporné násobení - přidání skalárních hodnot s dvojitou přesností s plovoucí desetinnou čárkou |
VFNMADD213SD | Fúzované záporné násobení - přidání skalárních hodnot s dvojitou přesností s plovoucí desetinnou čárkou |
VFNMADD231SD | Fúzované záporné násobení - přidání skalárních hodnot s dvojitou přesností s plovoucí desetinnou čárkou |
VFNMADD132SS | Fúzované záporné násobení - přidání skalárních hodnot s jednoduchou plovoucí desetinnou čárkou |
VFNMADD213SS | Fúzované záporné násobení - přidání skalárních hodnot s jednoduchou přesností s plovoucí desetinnou čárkou |
VFNMADD231SS | Fúzované záporné násobení - přidání skalárních hodnot s jednoduchou přesností s plovoucí desetinnou čárkou |
VFNMSUB132PD | Fúzované záporné násobení-odečtení zabalených hodnot s dvojitou přesností s plovoucí desetinnou čárkou |
VFNMSUB213PD | Fúzované záporné násobení-odečtení zabalených hodnot s dvojitou přesností s plovoucí desetinnou čárkou |
VFNMSUB231PD | Fúzované záporné násobení-odečtení zabalených hodnot s dvojitou přesností s plovoucí desetinnou čárkou |
VFNMSUB132PS | Fúzovaný záporný násobek odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFNMSUB213PS | Fúzovaný záporný násobek odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFNMSUB231PS | Fúzovaný záporný násobek odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností |
VFNMSUB132SD | Fúzované záporné násobení-odečtení skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFNMSUB213SD | Fúzované záporné násobení a odčítání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFNMSUB231SD | Fúzované záporné násobení a odčítání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou |
VFNMSUB132SS | Fúzované záporné násobení-odečtení skalárních hodnot s jednoduchou přesností s plovoucí desetinnou čárkou |
VFNMSUB213SS | Fúzované záporné násobení-odečtení skalárních hodnot s jednoduchou přesností s plovoucí desetinnou čárkou |
VFNMSUB231SS | Fúzované záporné násobení-odečtení skalárních hodnot s jednoduchou přesností s plovoucí desetinnou čárkou |
FMA4
Podporováno v procesorech AMD počínaje architekturou Bulldozer. Od roku 2017 není podporován žádným čipem Intel.
Tavené násobení-přidání se čtyřmi operandy. FMA4 byl realizován v hardwaru před FMA3.
Návod | Operační kód | Význam | Poznámky |
---|---|---|---|
VFMADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 69 / r / is4 | Fúzované vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností | |
VFMADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 68 / r / is4 | Sloučené vícenásobné přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností | |
VFMADDSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6B / r / is4 | Fúzované vícenásobné přidání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou | |
VFMADDSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6A / r / is4 | Fúzované vícenásobné přidání skalárních jednopřesných hodnot s plovoucí desetinnou čárkou | |
VFMADDSUBPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5D / r / is4 | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností | |
VFMADDSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5C / r / is4 | Fúzované vícenásobné střídání sčítání / odčítání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností | |
VFMSUBADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5F / r / is4 | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s dvojitou přesností | |
VFMSUBADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5E / r / is4 | Fúzované vícenásobné střídání Odečíst / Přidat zabalené hodnoty s plovoucí desetinnou čárkou s přesnou přesností | |
VFMSUBPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6D / r / is4 | Fúzované násobení-odečtení zabalených hodnot s dvojitou přesností s plovoucí desetinnou čárkou | |
VFMSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6C / r / is4 | Fúzované násobení-odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností | |
VFMSUBSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6F / r / is4 | Fúzované násobení a odčítání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou | |
VFMSUBSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6E / r / is4 | Fúzované násobné odečtení skalárních hodnot s jednoduchou plovoucí desetinnou čárkou | |
VFNMADDPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 79 / r / is4 | Fúzované negativní násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s dvojitou přesností | |
VFNMADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 78 / r / is4 | Fúzované záporné násobení - přidání zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností | |
VFNMADDSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7B / r / is4 | Fúzované záporné násobení - přidání skalárních hodnot s dvojitou přesností s plovoucí desetinnou čárkou | |
VFNMADDSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7A / r / is4 | Fúzované záporné násobení - přidání skalárních hodnot s jednoduchou přesností s plovoucí desetinnou čárkou | |
VFNMSUBPD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7D / r / is4 | Fúzované záporné násobení-odečtení zabalených hodnot s dvojitou přesností s plovoucí desetinnou čárkou | |
VFNMSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7C / r / is4 | Fúzovaný záporný násobek odečtení zabalených hodnot s plovoucí desetinnou čárkou s přesnou přesností | |
VFNMSUBSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7F / r / is4 | Fúzované záporné násobení a odčítání skalárních hodnot dvojité přesnosti s plovoucí desetinnou čárkou | |
VFNMSUBSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7E / r / is4 | Fúzované záporné násobení-odečtení skalárních hodnot s jednoduchou přesností s plovoucí desetinnou čárkou |
AVX
AVX byly nejprve podporovány Intel s Sandy Bridge a AMD s Buldozer.
Vektorové operace na 256 bitových registrech.
Návod | Popis |
---|---|
VBROADCASTSS | Zkopírujte 32bitový, 64bitový nebo 128bitový paměťový operand na všechny prvky vektorového registru XMM nebo YMM. |
VBROADCASTSD | |
VBROADCASTF128 | |
VINSERTF128 | Nahradí dolní nebo horní polovinu 256bitového registru YMM hodnotou 128bitového zdrojového operandu. Druhá polovina cíle se nezmění. |
VEXTRACTF128 | Extrahuje dolní nebo horní polovinu 256bitového registru YMM a zkopíruje hodnotu do 128bitového cílového operandu. |
VMASKMOVPS | Podmíněně načte libovolný počet prvků z operandu vektorové paměti SIMD do cílového registru, přičemž zbývající vektorové prvky nepřečtené a odpovídající prvky v cílovém registru nastaví na nulu. Alternativně podmíněně zapíše libovolný počet prvků z operandu vektorového registru SIMD na operand vektorové paměti, přičemž zbývající prvky paměťového operandu ponechá beze změny. Na architektuře procesoru AMD Jaguar tato instrukce s operandem zdroje paměti trvá více než 300 hodinových cyklů, když je maska nulová, v takovém případě by instrukce neměla dělat nic. Zdá se, že jde o konstrukční chybu.[12] |
VMASKMOVPD | |
VPERMILPS | Permute In-Lane. Zamíchejte 32bitové nebo 64bitové vektorové prvky jednoho vstupního operandu. Jedná se o 256bitové pokyny v pruhu, což znamená, že fungují na všech 256 bitech se dvěma samostatnými 128bitovými mícháním, takže nemohou míchat přes 128bitové pruhy.[13] |
VPERMILPD | |
VPERM2F128 | Zamíchejte čtyři 128bitové vektorové prvky dvou 256bitových zdrojových operandů do 256bitového cílového operandu s okamžitou konstantou jako selektor. |
VZEROALL | Nastavte všechny registry YMM na nulu a označte je jako nepoužívané. Používá se při přepínání mezi 128bitovým a 256bitovým použitím. |
VZEROUPPER | Nastavte horní polovinu všech registrů YMM na nulu. Používá se při přepínání mezi 128bitovým a 256bitovým použitím. |
AVX2
Představeno v Intel Mikroarchitektura Haswell a AMD Rypadlo.
Rozšíření většiny vektorových instrukcí SSE a AVX na 256 bitů
Návod | Popis |
---|---|
VBROADCASTSS | Zkopírujte 32bitový nebo 64bitový operand registru na všechny prvky vektorového registru XMM nebo YMM. Jedná se o registrační verze stejných pokynů v AVX1. Neexistuje však žádná 128bitová verze, ale stejného efektu lze jednoduše dosáhnout pomocí VINSERTF128. |
VBROADCASTSD | |
VPBROADCASTB | Zkopírujte 8, 16, 32 nebo 64bitový celočíselný registr nebo paměťový operand na všechny prvky vektorového registru XMM nebo YMM. |
VPBROADCASTW | |
VPBROADCASTD | |
VPBROADCASTQ | |
VBROADCASTI128 | Zkopírujte 128bitový paměťový operand na všechny prvky vektorového registru YMM. |
VINSERTI128 | Nahradí dolní nebo horní polovinu 256bitového registru YMM hodnotou 128bitového zdrojového operandu. Druhá polovina cíle se nezmění. |
VEXTRACTI128 | Extrahuje dolní nebo horní polovinu 256bitového registru YMM a zkopíruje hodnotu do 128bitového cílového operandu. |
VGATHERDPD | Shromažďuje se hodnoty s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností pomocí 32 nebo 64bitových indexů a měřítka. |
VGATHERQPD | |
VGATHERDPS | |
VGATHERQPS | |
VPGATHERDD | Shromažďuje 32 nebo 64bitové celočíselné hodnoty pomocí 32 nebo 64bitových indexů a škálování. |
VPGATHERDQ | |
VPGATHERQD | |
VPGATHERQQ | |
VPMASKMOVD | Podmíněně načte libovolný počet prvků z operandu vektorové paměti SIMD do cílového registru, přičemž zbývající vektorové prvky nepřečtené a odpovídající prvky v cílovém registru nastaví na nulu. Alternativně podmíněně zapíše libovolný počet prvků z operandu vektorového registru SIMD na operand vektorové paměti, přičemž zbývající prvky paměťového operandu ponechá beze změny. |
VPMASKMOVQ | |
VPERMPS | Zamíchejte osm 32bitových vektorových prvků jednoho 256bitového zdrojového operandu do 256bitového cílového operandu s voličem registru nebo paměťového operandu. |
VPERMD | |
VPERMPD | Zamíchejte čtyři 64bitové vektorové prvky jednoho 256bitového zdrojového operandu do 256bitového cílového operandu s voličem registru nebo paměťového operandu. |
VPERMQ | |
VPERM2I128 | Zamíchejte (dva) ze čtyř 128bitových vektorových prvků dva 256bitové zdrojové operandy na 256bitový cílový operand s okamžitou konstantou jako selektor. |
VPBLENDD | Doubleword okamžitá verze pokynů PBLEND od SSE4. |
VPSLLVD | Posun doleva logický. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
VPSLLVQ | |
VPSRLVD | Posun doprava logicky. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
VPSRLVQ | |
VPSRAVD | Aritmeticky posuňte doprava. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
AVX-512
Představeno v Intel Xeon Phi x200
Vektorové operace na 512bitových registrech.
Základ AVX-512
Návod | Popis |
---|---|
VBLENDMPD | Smíchejte vektory float64 pomocí ovládání opmasky |
VBLENDMPS | Smíchejte vektory float32 pomocí ovládání opmasky |
VPBLENDMD | Směšujte vektory int32 pomocí ovládání opmasky |
VPBLENDMQ | Směšujte vektory int64 pomocí ovládání opmasky |
VPCMPD | Porovnejte podepsaná / nepodepsaná dvojí slova do masky |
VPCMPUD | |
VPCMPQ | Porovnejte podepsaná / nepodepsaná hesla do masky |
VPCMPUQ | |
VPTESTMD | Logické AND a nastavená maska pro 32 nebo 64 bitová celá čísla. |
VPTESTMQ | |
VPTESTNMD | Logický NAND a nastavená maska pro 32 nebo 64 bitová celá čísla. |
VPTESTNMQ | |
VCOMPRESSPD | Ukládejte řídce zabalené hodnoty s plovoucí desetinnou čárkou s dvojitou / jednou přesností do husté paměti |
VCOMPRESSPS | |
VPCOMPRESSD | Ukládejte řídce zabalené celočíselné hodnoty dvou slov / čtyř slov do husté paměti / registru |
VPCOMPRESSQ | |
VEXPANDPD | Načíst řídce zabalené hodnoty s plovoucí desetinnou čárkou s dvojitou / jednou přesností z husté paměti |
VEXPANDPS | |
VPEXPANDD | Načíst řídce zabalené dvojité / čtyřslovné celočíselné hodnoty z husté paměti / registru |
VPEXPANDQ | |
VPERMI2PD | Plná jednoduchá / dvojitá plovoucí desetinná čárka permutuje přepis indexu. |
VPERMI2PS | |
VPERMI2D | Plné dvojslovo / čtyřslovo permutuje přepsání indexu. |
VPERMI2Q | |
VPERMT2PS | Plná jednoduchá / dvojitá plovoucí desetinná čárka permutuje přepsání prvního zdroje. |
VPERMT2PD | |
VPERMT2D | Plné dvouslovné / čtyřslovné permutační přepsání prvního zdroje. |
VPERMT2Q | |
VSHUFF32x4 | Zamíchejte čtyři zabalené 128bitové řádky. |
VSHUFF64x2 | |
VSHUFFI32x4 | |
VSHUFFI64x2 | |
VPTERNLOGD | Bitová ternární logika |
VPTERNLOGQ | |
VPMOVQD | Dolů převeďte čtyřslovo nebo dvojslovo na dvojslovo, slovo nebo bajt; nenasycené, nasycené nebo nasycené bez znaménka. Zadní strana instrukcí znaménko / nulové prodloužení od SSE4.1. |
VPMOVSQD | |
VPMOVUSQD | |
VPMOVQW | |
VPMOVSQW | |
VPMOVUSQW | |
VPMOVQB | |
VPMOVSQB | |
VPMOVUSQB | |
VPMOVDW | |
VPMOVSDW | |
VPMOVUSDW | |
VPMOVDB | |
VPMOVSDB | |
VPMOVUSDB | |
VCVTPS2UDQ | Převádějte se zkrácením nebo bez zkrácení, sbalená jednoduchá nebo dvojitá přesnost s plovoucí desetinnou čárkou na zabalená nepodepsaná celá čísla dvou slov. |
VCVTPD2UDQ | |
VCVTTPS2UDQ | |
VCVTTPD2UDQ | |
VCVTSS2USI | Převod s trakcí nebo bez ní, skalární jednoduchá nebo dvojitá přesnost s plovoucí desetinnou čárkou na celé číslo bez znaménka. |
VCVTSD2USI | |
VCVTTSS2USI | |
VCVTTSD2USI | |
VCVTUDQ2PS | Převést zabalená celá čísla bez znaménka na dvojslovo na sbalenou jednoduchou nebo dvojitou přesností s plovoucí desetinnou čárkou. |
VCVTUDQ2PD | |
VCVTUSI2PS | Převést skalární nepodepsaná celá čísla dvou slov na plovoucí desetinnou čárku s jednoduchou nebo dvojitou přesností. |
VCVTUSI2PD | |
VCVTUSI2SD | Převést skalární celá čísla bez znaménka na plovoucí desetinnou čárku s jednoduchou nebo dvojitou přesností. |
VCVTUSI2SS | |
VCVTQQ2PD | Převeďte zabalená celá čísla čtyř slov na zabalenou plovoucí desetinnou čárku s jednoduchou nebo dvojitou přesností. |
VCVTQQ2PS | |
VGETEXPPD | Převést exponenty zabalených hodnot fp na hodnoty fp |
VGETEXPPS | |
VGETEXPSD | Konvertovat exponent skalární hodnoty fp na hodnotu fp |
VGETEXPSS | |
VGETMANTPD | Extrahujte vektor normalizovaných mantiss z vektoru float32 / float64 |
VGETMANTPS | |
VGETMANTSD | Extrahujte float32 / float64 normalizovaných mantisa ze float32 / float64 skalární |
VGETMANTSS | |
VFIXUPIMMPD | Opravte speciální zabalené hodnoty float32 / float64 |
VFIXUPIMMPS | |
VFIXUPIMMSD | Opravte speciální skalární hodnoty float32 / float64 |
VFIXUPIMMSS | |
VRCP14PD | Vypočítejte přibližné převrácené hodnoty zabalených hodnot float32 / float64 |
VRCP14PS | |
VRCP14SD | Vypočítejte přibližné převrácené hodnoty skalární hodnoty float32 / float64 |
VRCP14SS | |
VRNDSCALEPS | Zaokrouhleno zabalené hodnoty float32 / float64 tak, aby zahrnovaly daný počet zlomkových bitů |
VRNDSCALEPD | |
VRNDSCALESS | Zaokrouhlená skalární hodnota float32 / float64 tak, aby zahrnovala daný počet zlomkových bitů |
VRNDSCALESD | |
VRSQRT14PD | Vypočítejte přibližné převrácené hodnoty druhé odmocniny zabalených hodnot float32 / float64 |
VRSQRT14PS | |
VRSQRT14SD | Vypočítejte přibližnou převrácenou hodnotu druhé odmocniny skalární hodnoty float32 / float64 |
VRSQRT14SS | |
VSCALEFPS | Škálovat zabalené hodnoty float32 / float64 s hodnotami float32 / float64 |
VSCALEFPD | |
VSCALEFSS | Měřítko skalární hodnoty float32 / float64 s hodnotou float32 / float64 |
VSCALEFSD | |
VALIGND | Zarovnejte vektory dvou slov nebo čtyř slov |
VALIGNQ | |
VPABSQ | Zabalené čtyřslovo absolutní hodnoty |
VPMAXSQ | Maximum zabaleného podepsaného / nepodepsaného čtyřslova |
VPMAXUQ | |
VPMINSQ | Minimum zabaleného podepsaného / nepodepsaného čtyřslova |
VPMINUQ | |
VPROLD | Bit se otáčí doleva nebo doprava |
VPROLVD | |
VPROLQ | |
VPROLVQ | |
VPRORD | |
VPRORVD | |
VPRORQ | |
VPRORVQ | |
VPSCATTERDD | Rozptýlené dvojité slovo / čtyřslovo s podepsanými dvojslovnými a čtyřslovými indexy |
VPSCATTERDQ | |
VPSCATTERQD | |
VPSCATTERQQ | |
VSCATTERDPS | Rozptýlené float32 / float64 s podepsanými dvojslovými a čtyřslovými indexy |
VSCATTERDPD | |
VSCATTERQPS | |
VSCATTERQPD |
Kryptografické pokyny
Pokyny Intel AES
6 nových pokynů.
Návod | Popis |
---|---|
AESENC | Proveďte jedno kolo an AES tok šifrování |
AESENCLAST | Proveďte poslední kolo toku šifrování AES |
AESDEC | Proveďte jedno kolo dešifrovacího toku AES |
AESDECLAST | Proveďte poslední kolo dešifrovacího toku AES |
AESKEYGENASSIST | Pomáhat při generování kulatých klíčů AES |
AESIMC | Pomáhat ve sloupcích inverzní směsi AES |
RDRAND a RDSEED
Návod | Popis |
---|---|
RDRAND | Přečtěte si náhodné číslo |
RDSEED | Přečtěte si náhodné semeno |
Pokyny Intel SHA
7 nových pokynů.
Návod | Popis |
---|---|
SHA1RNDS4 | Proveďte čtyři kola operace SHA1 |
SHA1NEXTE | Po čtyřech kolech vypočítejte stavovou proměnnou E SHA1 |
SHA1MSG1 | Proveďte přechodný výpočet pro další čtyři hesla zpráv SHA1 |
SHA1MSG2 | Proveďte závěrečný výpočet pro další čtyři hesla zpráv SHA1 |
SHA256RNDS2 | Proveďte dvě kola operace SHA256 |
SHA256MSG1 | Proveďte přechodný výpočet pro další čtyři hesla zpráv SHA256 |
SHA256MSG2 | Proveďte závěrečný výpočet pro další čtyři hesla zpráv SHA256 |
Nedokumentované pokyny
Nedokumentované pokyny x86
Procesory x86 obsahují nedokumentované pokyny které jsou implementovány na čipech, ale nejsou uvedeny v některých oficiálních dokumentech. Lze je najít v různých zdrojích přes internet, například Seznam přerušení Ralfa Browna a v sandpile.org
Mnemotechnická pomůcka | Operační kód | Popis | Postavení |
---|---|---|---|
AAM imm8 | D4 imm8 | Vydělte AL im8, vložte kvocient do AH a zbytek do AL | K dispozici od 8086, dokumentováno od Pentia (dřívější dokumentace neobsahuje žádné argumenty) |
AAD imm8 | D5 imm8 | Násobení protějšek AAM | K dispozici od 8086, dokumentováno od Pentia (dřívější dokumentace neobsahuje žádné argumenty) |
SALC | D6 | Nastavit AL v závislosti na hodnotě Carry Flag (alternativa 1 bajtu SBB AL, AL) | K dispozici od 8086, ale dokumentováno pouze od Pentium Pro. |
ICEBP | F1 | Jednobajtová jednokroková výjimka / vyvolání LED | K dispozici od 80386, dokumentováno (jako INT1) od Pentium Pro |
Neznámá mnemotechnická pomůcka | 0F 04 | Přesný účel neznámý, způsobí zablokování CPU (HCF ). Jedinou cestou ven je reset CPU.[14] V některých implementacích emulováno prostřednictvím BIOS jako zastavení sekvence.[15] v příspěvek na fóru u Vintage Computing Federation, tato instrukce je vysvětlena jako SAVEALL. Interaguje s režimem ICE. | K dispozici pouze na 80286 |
LOADALL | 0F 05 | Načte všechny registry z adresy paměti 0x000800H | K dispozici pouze na 80286 |
LOADALLD | 0F 07 | Načte všechny registry z adresy paměti ES: EDI | K dispozici pouze na 80386 |
UD1 | 0F B9 | Záměrně nedefinovaná instrukce, ale na rozdíl od UD2 nebyla zveřejněna | |
ALTINST | 0F 3F | Skočte a proveďte pokyny v nezdokumentovaném Alternativní instrukční sada. | K dispozici pouze u některých procesorů x86 od společnosti VIA Technologies. |
Nedokumentované pokyny x87
FFREEP provádí FFREE ST (i) a pop stack
Viz také
Reference
- ^ A b „Re: Identifikace procesoru Intel a instrukce CPUID“. Citováno 2013-04-21.
- ^ Toth, Ervin (1998-03-16). „BSWAP s 16bitovými registry“. Archivovány od originál dne 03.11.1999.
Instrukce snižuje horní slovo registru dvou slov, aniž by to ovlivnilo jeho horních 16 bitů.
- ^ Coldwin, Gynvael (29. 12. 2009). „BSWAP + 66h prefix“. Citováno 2018-10-03.
interní (nula) rozšiřující hodnotu menšího (16bitového) registru… použití bswap na 32bitovou hodnotu „00 00 AH AL“,… zkrácen na nižších 16 bitů, které jsou „00 00“. … Bochs… bswap reg16 funguje stejně jako bswap reg32… QEMU… ignoruje předponu 66 h
- ^ „RSM - obnovení z režimu správy systému“. Archivovány od originálu dne 2012-03-12.CS1 maint: BOT: stav původní adresy URL neznámý (odkaz)
- ^ Referenční příručka k optimalizaci architektury Intel 64 a IA-32, oddíl 7.3.2
- ^ Příručka pro vývojáře softwaru Intel 64 a IA-32 Architectures, oddíl 4.3, pododdíl „PREFETCHh - Předběžné načtení dat do mezipaměti“
- ^ Hollingsworth, Brent. „Nové pokyny„ Buldozer “a„ Piledriver ““ (pdf). Advanced Micro Devices, Inc.. Citováno 11. prosince 2014.
- ^ „Datový list rodiny 16h AMD řady A“ (PDF). amd.com. AMD. Říjen 2013. Citováno 2014-01-02.
- ^ „Příručka programátora architektury AMD64, svazek 3: Obecné pokyny a systémové pokyny“ (PDF). amd.com. AMD. Říjen 2013. Citováno 2014-01-02.
- ^ „tbmintrin.h z GCC 4.8“. Citováno 2014-03-17.
- ^ https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf oddíl 3.5.2.3
- ^ „Mikroarchitektura procesorů Intel, AMD a VIA: Průvodce optimalizací pro programátory sestavení a výrobce kompilátorů“ (PDF). Citováno 17. října 2016.
- ^ "Šachové programování AVX2". Citováno 17. října 2016.
- ^ „Re: nezdokumentované opcodes (HINT_NOP)“. Archivovány od originál dne 06.11.2004. Citováno 2010-11-07.
- ^ „Re: Také některé nezdokumentované 0Fh kódování“. Archivovány od originál dne 26. 6. 2003. Citováno 2010-11-07.