Пояснения:
Операнды: r = регистр, m = память, i = число, sr = сегментный регистр, m32 = 32-х битный операнд в памяти и так далее.
Микрооперации: количество микроопераций, которые генерит инструкция для каждого порта выполнения.
Задержка:
Это задержка, которую генерирует инструкция в цепочке зависимости. (Это не то же самое, что время, потраченное в модуле выполнения. Значения могут быть неточны в тех ситуациях, когда они не могут быть измерены точно, особенно, что касается операндов в памяти). Значения являются минимальными. Промахи кэша, невыравненность и исключения могут повысить количество тактов весьма значительно. Предполагается, что операнды с плавающей запятой являются нормальными. Ненормальные числа, NAN'ы и бесконечность увеличивают задержку на 50-150 тактов, кроме перемещений XMM, перемешиваний и булевых инструкций. Переполнения FPU, потеря значимости, ненормальные или NAN-результаты дают аналогичную задержку.
Производительность: максимальная производительность для нескольких инструкций одного вида. Например, производительность в 1/2 для FMUL означает, что новая инструкция FMUL может начинать выполнение каждые 2 такта.
29.1 Целочисленные инструкции (PPro, PII и PIII)
Инструкции Операнды микрооперации задержка производительность
p0 p1 p01 p2 p3 p4
NOP 1
MOV r,r/i 1
MOV r,m 1
MOV m,r/i 1 1
MOV r,sr 1
MOV m,sr 1 1 1
MOV sr,r 8 5
MOV sr,m 7 1 8
MOVSX MOVZX r,r 1
MOVSX MOVZX r,m 1
CMOVcc r,r 1 1
CMOVcc r,m 1 1 1
XCHG r,r 3
XCHG r,m 4 1 1 1 high b)
XLAT 1 1
PUSH r/i 1 1 1
POP r 1 1
POP (E)SP 2 1
PUSH m 1 1 1 1
POP m 5 1 1 1
PUSH sr 2 1 1
POP sr 8 1
PUSHF(D) 3 11 1 1
POPF(D) 10 6 1
PUSHA(D) 2 8 8
POPA(D) 2 8
LAHF SAHF 1
LEA r,m 1 1 c)
LDS LES LFS LGS
LSS m 8 3
ADD SUB AND OR XOR r,r/i 1
ADD SUB AND OR XOR r,m 1 1
ADD SUB AND OR XOR m,r/i 1 1 1 1
ADC SBB r,r/i 2
ADC SBB r,m 2 1
ADC SBB m,r/i 3 1 1 1
CMP TEST r,r/i 1
CMP TEST m,r/i 1 1
INC DEC NEG NOT r 1
INC DEC NEG NOT m 1 1 1 1
AAS DAA DAS 1
AAD 1 2 4
AAM 1 1 2 15
MUL IMUL r,(r),(i) 1 4 1/1
MUL IMUL (r),m 1 1 4 1/1
DIV IDIV r8 2 1 19 1/12
DIV IDIV r16 3 1 23 1/21
DIV IDIV r32 3 1 39 1/37
DIV IDIV m8 2 1 1 19 1/12
DIV IDIV m16 2 1 1 23 1/21
DIV IDIV m32 2 1 1 39 1/37
CBW CWDE 1
CWD CDQ 1
SHR SHL SAR ROR
ROL r,i/CL 1
SHR SHL SAR ROR
ROL m,i/CL 1 1 1 1
RCR RCL r,1 1 1
RCR RCL r8,i/CL 4 4
RCR RCL r16/32,i/CL 3 3
RCR RCL m,1 1 2 1 1 1
RCR RCL m8,i/CL 4 3 1 1 1
RCR RCL m16/32,i/CL 4 2 1 1 1
SHLD SHRD r,r,i/CL 2
SHLD SHRD m,r,i/CL 2 1 1 1 1
BT r,r/i 1
BT m,r/i 1 6 1
BTR BTS BTC r,r/i 1
BTR BTS BTC m,r/i 1 6 1 1 1
BSF BSR r,r 1 1
BSF BSR r,m 1 1 1
SETcc r 1
SETcc m 1 1 1
JMP short/near 1 1/2
JMP far 21 1
JMP r 1 1/2
JMP m(near) 1 1 1/2
JMP m(far) 21 2
conditional jump short/near 1 1/2
CALL near 1 1 1 1 1/2
CALL far 28 1 2 2
CALL r 1 2 1 1 1/2
CALL m(near) 1 4 1 1 1 1/2
CALL m (far) 28 2 2 2
RETN 1 2 1 1/2
RETN i 1 3 1 1/2
RETF 23 3
RETF i 23 3
J(E)CXZ short 1 1
LOOP short 2 1 8
LOOP(N)E short 2 1 8
ENTER i,0 12 1 1
ENTER a,b ca. 18+4b b-1 2b
LEAVE 2 1
BOUND r,m 7 6 2
CLC STC CMC 1
CLD STD 4
CLI 9
STI 17
INTO 5
LODS 2
REP LODS 10+6n
STOS 1 1 1
REP STOS ca. 5n a)
MOVS 1 3 1 1
REP MOVS ca. 6n a)
SCAS 1 2
REP(N)E SCAS 12+7n
CMPS 4 2
REP(N)E CMPS 12+9n
BSWAP 1 1
CPUID 23-48
RDTSC 31
IN 18 >300
OUT 18 >300
PREFETCHNTA d) m 1
PREFETCHT0 d) m 1
PREFETCHT1 d) m 1
PREFETCHT2 d) m 1
SFENCE d) 1 1 1/6
Примечания:
a) быстро при определенных условиях: смотри главу 26.3.
b) смотри главу 26.1.
c) 3, если константа без базового или индексного регистра.
d) только PIII.
29.2 Инструкции FPU (PPro, PII и PIII)
Инструкции Операнды микрооперации задержка производительность
p0 p1 p01 p2 p3 p4
FLD r 1
FLD m32/64 1 1
FLD m80 2 2
FBLD m80 38 2
FST(P) r 1
FST(P) m32/m64 1 1 1
FSTP m80 2 2 2
FBSTP m80 165 2 2
FXCH r 0 3/1 f)
FILD m 3 1 5
FIST(P) m 2 1 1 5
FLDZ 1
FLD1 FLDPI FLDL2E etc. 2
FCMOVcc r 2 2
FNSTSW AX 3 7
FNSTSW m16 1 1 1
FLDCW m16 1 1 1 10
FNSTCW m16 1 1 1
FADD(P) FSUB(R)(P) r 1 3 1/1
FADD(P) FSUB(R)(P) m 1 1 3-4 1/1
FMUL(P) r 1 5 1/2 g)
FMUL(P) m 1 1 5-6 1/2 g)
FDIV(R)(P) r 1 38 h) 1/37
FDIV(R)(P) m 1 1 38 h) 1/37
FABS 1
FCHS 3 2
FCOM(P) FUCOM r 1 1
FCOM(P) FUCOM m 1 1 1
FCOMPP FUCOMPP 1 1 1
FCOMI(P) FUCOMI(P) r 1 1
FCOMI(P) FUCOMI(P) m 1 1 1
FIADD FISUB(R) m 6 1
FIMUL m 6 1
FIDIV(R) m 6 1
FICOM(P) m 6 1
FTST 1 1
FXAM 1 2
FPREM 23
FPREM1 33
FRNDINT 30
FSCALE 56
FXTRACT 15
FSQRT 1 69 e,i)
FSIN FCOS 17-97 27-103 e)
FSINCOS 18-110 29-130 e)
F2XM1 17-48 66 e)
FYL2X 36-54 103 e)
FYL2XP1 31-53 98-107 e)
FPTAN 21-102 13-143 e)
FPATAN 25-86 44-143 e)
FNOP 1
FINCSTP FDECSTP 1
FFREE r 1
FFREEP r 2
FNCLEX 3
FNINIT 13
FNSAVE 141
FRSTOR 72
WAIT 2
Примечания:
e) не конвееризуется
f) FXCH генерирует 1 микрооперацию, что делается с помощью переименования
регистром, порты при этом не задействуются.
g) FMUL использует ту же схему, что и целочисленное умножение. Поэтому
комбинированная производительность целочисленных умножений и умножений FPU
равна 1 FMUL + 1 IMUL за 3 такта.
h) задержка FDIV зависит от заданной в контрольном слове точности: 64 бита
дают задержку в 38 тактов, 53 - в 32 такта, 24 - в 18. Деление на степень от
двух занимает 9 тактов. Производительность равна 1/(задержка-1).
i) быстрее для низкой точности.
29.3 Инструкции MMX (PII и PIII)
Инструкция Операнды микрооперации задержка производительность
p0 p1 p01 p2 p3 p4
MOVD MOVQ r,r 1 2/1
MOVD MOVQ r64,m32/64 1 1/1
MOVD MOVQ m32/64,r64 1 1 1/1
PADD PSUB PCMP r64,r64 1 1/1
PADD PSUB PCMP r64,m64 1 1 1/1
PMUL PMADD r64,r64 1 3 1/1
PMUL PMADD r64,m64 1 1 3 1/1
PAND PANDN POR
PXOR r64,r64 1 2/1
PAND PANDN POR
PXOR r64,m64 1 1 1/1
PSRA PSRL PSLL r64,r64/i 1 1/1
PSRA PSRL PSLL r64,m64 1 1 1/1
PACK PUNPCK r64,r64 1 1/1
PACK PUNPCK r64,m64 1 1 1/1
EMMS 11 6 k)
MASKMOVQ d) r64,r64 1 1 1 2-8 1/30-1/2
PMOVMSKB d) r32,r64 1 1 1/1
MOVNTQ d) m64,r64 1 1 1/30-1/1
PSHUFW d) r64,r64,i 1 1 1/1
PSHUFW d) r64,m64,i 1 1 2 1/1
PEXTRW d) r32,r64,i 1 1 2 1/1
PISRW d) r64,r32,i 1 1 1/1
PISRW d) r64,m16,i 1 1 2 1/1
PAVGB PAVGW d) r64,r64 1 1 2/1
PAVGB PAVGW d) r64,m64 1 1 2 1/1
PMINUB PMAXUB PMINSW
PMAXSW d) r64,r64 1 1 2/1
PMINUB PMAXUB PMINSW
PMAXSW d) r64,m64 1 1 2 1/1
PMULHUW d) r64,r64 1 3 1/1
PMULHUW d) r64,m64 1 1 4 1/1
PSADBW d) r64,r64 2 1 5 1/2
PSADBW d) r64,m64 2 1 1 6 1/2
Примечания:
d) только PIII.
k) Вы можете спрятать задержку, вставив другие инструкции между EMMS и
последующими инструкциями FPU.
29.4 Инструкции XMM (PIII)
Инструкция Операнды микрооперации задержка производительность
p0 p1 p01 p2 p3 p4
MOVAPS r128,r128 2 1 1/1
MOVAPS r128,m128 2 2 1/2
MOVAPS m128,r128 2 2 3 1/2
MOVUPS r128,m128 4 2 1/4
MOVUPS m128,r128 1 4 4 3 1/4
MOVSS r128,r128 1 1 1/1
MOVSS r128,m32 1 1 1 1/1
MOVSS m32,r128 1 1 1 1/1
MOVHPS MOVLPS r128,m64 1 1 1/1
MOVHPS MOVLPS m64,r128 1 1 1 1/1
MOVLHPS MOVHLPS r128,r128 1 1 1/1
MOVMSKPS r32,r128 1 1 1/1
MOVNTPS m128,r128 2 2 1/15-1/2
CVTPI2PS r128,r64 2 3 1/1
CVTPI2PS r128,m64 2 1 4 1/2
CVTPS2PI
CVTTPS2PI r64,r128 2 3 1/1
CVTPS2PI r64,m128 1 2 4 1/1
CVTSI2SS r128,r32 2 1 4 1/2
CVTSI2SS r128,m32 2 2 5 1/2
CVTSS2SI
CVTTSS2SI r32,r128 1 1 3 1/1
CVTSS2SI r32,m128 1 2 4 1/2
ADDPS SUBPS r128,r128 2 3 1/2
ADDPS SUBPS r128,m128 2 2 3 1/2
ADDSS SUBSS r128,r128 1 3 1/1
ADDSS SUBSS r128,m32 1 1 3 1/1
MULPS r128,r128 2 4 1/2
MULPS r128,m128 2 2 4 1/2
MULSS r128,r128 1 4 1/1
MULSS r128,m32 1 1 4 1/1
DIVPS r128,r128 2 48 1/34
DIVPS r128,m128 2 2 48 1/34
DIVSS r128,r128 1 18 1/17
DIVSS r128,m32 1 1 18 1/17
ANDPS ANDNPS ORPS
XORPS r128,r128 2 2 1/2
ANDPS ANDNPS ORPS
XORPS r128,m128 2 2 2 1/2
MAXPS MINPS r128,r128 2 3 1/2
MAXPS MINPS r128,m128 2 2 3 1/2
MAXSS MINSS r128,r128 1 3 1/1
MAXSS MINSS r128,m32 1 1 3 1/1
CMPccPS r128,r128 2 3 1/2
CMPccPS r128,m128 2 2 3 1/2
CMPccSS r128,r128 1 1 3 1/1
CMPccSS r128,m32 1 1 3 1/1
COMISS UCOMISS r128,r128 1 1 1/1
COMISS UCOMISS r128,m32 1 1 1 1/1
SQRTPS r128,r128 2 56 1/56
SQRTPS r128,m128 2 2 57 1/56
SQRTSS r128,r128 2 30 1/28
SQRTSS r128,m32 2 1 31 1/28
RSQRTPS r128,r128 2 2 1/2
RSQRTPS r128,m128 2 2 3 1/2
RSQRTSS r128,r128 1 1 1/1
RSQRTSS r128,m32 1 1 2 1/1
RCPPS r128,r128 2 2 1/2
RCPPS r128,m128 2 2 3 1/2
RCPSS r128,r128 1 1 1/1
RCPSS r128,m32 1 1 2 1/1
SHUFPS r128,r128,i 2 1 2 1/2
SHUFPS r128,m128,i 2 2 2 1/2
UNPCKHPS UNPCKLPS r128,r128 2 2 3 1/2
UNPCKHPS UNPCKLPS r128,m128 2 2 3 1/2
LDMXCSR m32 11 15 1/15
STMXCSR m32 6 7 1/9
FXSAVE m4096 116 62
FXRSTOR m4096 89 68
[C] Агнер Фог, пер. Aquila