29. 指令速度及微操作失败列表(PPro,PII和PIII)

优质
小牛编辑
133浏览
2023-12-01

注释:

操作数:

r = 寄存器(register), m =
内存(memory), i = 立即数(immediate data), sr = 段寄存器(segment register), m32 =
32位内存操作数(32 bit memory operand),等等。

微码:

指令对各个执行端口产生的微码数

p0: 端口0: ALU,
等等。

p1: 端口1: ALU, 跳转

p01:
指令既能进入端口0也能进入端口1,就看哪个先有空了。

p2: 端口2: 读数据, 等等。

p3: 端口3: 为存数据计算地址

p4: 端口4: 存数据

延迟:

这里的延迟是指指令在依赖链中产生的延迟(这与花在执行单元上的时间不同。
在不能确切测量的情况下,值可能是错误的,尤其对内存操作数)。 给出的值是最小值。 cache失效,未对齐操作,异常都可能会大幅增加时钟数。
在这里,总是假定浮点操作数是规格化的。
除了XMM数据传输指令,洗牌指令和布尔指令外,非规格化数,NAN(包括发信号的和不发信号的),正负无穷大都会导致延迟再增加50-150时钟。
浮点上溢,下溢,非规格化数,NAN导致的延迟与之相似。

吞吐量:

这里的吞吐量是指若干相同指令的最大吞吐量。
比如,FMUL指令的吞吐量为1/2,意味着每2个时钟周期可以开始一条新的FMUL指令。

29.1
整型指令
指令操作数微码的端口分配情况延迟吞吐量
p0p1p01p2p3p4
NOP1
MOVr,r/i1
MOVr,m1
MOVm,r/i11
MOVr,sr1
MOVm,sr111
MOVsr,r85
MOVsr,m718
MOVSX
MOVZX
r,r1
MOVSX
MOVZX
r,m1
CMOVccr,r11
CMOVccr,m111
XCHGr,r3
XCHGr,m4111很大
b)
XLAT11
PUSHr/i111
POPr11
POP(E)SP21
PUSHm1111
POPm5111
PUSHsr211
POPsr81
PUSHF(D)31111
POPF(D)1061
PUSHA(D)288
POPA(D)28
LAHF SAHF1
LEAr,m11 c)
LDS LES LFS LGS LSSm83
ADD SUB AND OR XORr,r/i1
ADD SUB AND OR XORr,m11
ADD SUB AND OR XORm,r/i1111
ADC SBBr,r/i2
ADC SBBr,m21
ADC SBBm,r/i3111
CMP TESTr,r/i1
CMP TESTm,r/i11
INC DEC NEG NOTr1
INC DEC NEG NOTm1111
AAS DAA DAS1
AAD124
AAM11215
MUL IMULr,(r),(i)141/1
MUL IMUL(r),m1141/1
DIV IDIVr821191/12
DIV IDIVr1631231/21
DIV IDIVr3231391/37
DIV IDIVm8211191/12
DIV IDIVm16211231/21
DIV IDIVm32211391/37
CBW CWDE1
CWD CDQ1
SHR SHL SAR ROR ROLr,i/CL1
SHR SHL SAR ROR ROLm,i/CL1111
RCR RCLr,111
RCR RCLr8,i/CL44
RCR RCLr16/32,i/CL33
RCR RCLm,112111
RCR RCLm8,i/CL43111
RCR RCLm16/32,i/CL42111
SHLD SHRDr,r,i/CL2
SHLD SHRDm,r,i/CL21111
BTr,r/i1
BTm,r/i161
BTR BTS BTCr,r/i1
BTR BTS BTCm,r/i16111
BSF BSRr,r11
BSF BSRr,m111
SETccr1
SETccm111
JMPshort/near11/2
JMPfar211
JMPr11/2
JMPm(near)111/2
JMPm(far)212
conditional jumpshort/near11/2
CALLnear11111/2
CALLfar28122
CALLr12111/2
CALLm(near)141111/2
CALLm (far)28222
RETN1211/2
RETNi1311/2
RETF233
RETFi233
J(E)CXZshort11
LOOPshort218
LOOP(N)Eshort218
ENTERi,01211
ENTERa,bca. 18+4bb-12b
LEAVE21
BOUNDr,m762
CLC STC CMC1
CLD STD4
CLI9
STI17
INTO5
LODS2
REP LODS10+6n
STOS111
REP STOSca. 5n a)
MOVS1311
REP MOVSca. 6n a)
SCAS12
REP(N)E SCAS12+7n
CMPS42
REP(N)E CMPS12+9n
BSWAP11
CPUID23-48
RDTSC31
IN18>300
OUT18>300
PREFETCHNTA d)m1
PREFETCHT0 d)m1
PREFETCHT1 d)m1
PREFETCHT2 d)m1
SFENCE d)111/6

注:

a) 在特定条件下更快:见26.3节。

b) 见26.1节

c) 如果只有常量,没有基址或变址寄存器的话是3

d)
只有PIII上才能用。

29.2
浮点指令
指令操作数微码的端口分配情况延迟吞吐量
p0p1p01p2p3p4
FLDr1
FLDm32/6411
FLDm8022
FBLDm80382
FST(P)r1
FST(P)m32/m64111
FSTPm80222
FBSTPm8016522
FXCHr03/1 f)
FILDm315
FIST(P)m2115
FLDZ1
FLD1 FLDPI FLDL2E etc.2
FCMOVccr22
FNSTSWAX37
FNSTSWm16111
FLDCWm1611110
FNSTCWm16111
FADD(P) FSUB(R)(P)r131/1
FADD(P) FSUB(R)(P)m113-41/1
FMUL(P)r151/2 g)
FMUL(P)m115-61/2 g)
FDIV(R)(P)r138 h)1/37
FDIV(R)(P)m1138 h)1/37
FABS1
FCHS32
FCOM(P) FUCOMr11
FCOM(P) FUCOMm111
FCOMPP FUCOMPP111
FCOMI(P) FUCOMI(P)r11
FCOMI(P) FUCOMI(P)m111
FIADD FISUB(R)m61
FIMULm61
FIDIV(R)m61
FICOM(P)m61
FTST11
FXAM12
FPREM23
FPREM133
FRNDINT30
FSCALE56
FXTRACT15
FSQRT169e,i)
FSIN FCOS17-9727-103e)
FSINCOS18-11029-130e)
F2XM117-4866e)
FYL2X36-54103e)
FYL2XP131-5398-107e)
FPTAN21-10213-143e)
FPATAN25-8644-143e)
FNOP1
FINCSTP FDECSTP1
FFREEr1
FFREEPr2
FNCLEX3
FNINIT13
FNSAVE141
FRSTOR72
WAIT2

注:

e) 不能流水化

f) FXCH产生1条微码,但它通过寄存器重命名来完成,不需要进入任何端口。

g) FMUL与整型乘法使用同一条电路。 因此,混用浮点和整型乘法的总体吞吐量是每3个时钟1条FMUL+1条IMUL。

h)
FDIV的延迟取决于控制字中指定的精度:64位精度延迟是38,53位精度延迟是32,24位精度延迟是18。 除数是2的幂次的除法花9个时钟。
除法的吞吐量是1/(延迟-1)。

i) 在低精度下更快。

?

29.3
MMX指令 (PII 和 PIII)
指令操作数微码的端口分配情况延迟吞吐量
p0p1p01p2p3p4
MOVD MOVQr,r12/1
MOVD MOVQr64,m32/6411/1
MOVD MOVQm32/64,r64111/1
PADD PSUB PCMPr64,r6411/1
PADD PSUB PCMPr64,m64111/1
PMUL PMADDr64,r64131/1
PMUL PMADDr64,m641131/1
PAND PANDN POR

PXOR

r64,r6412/1
PAND PANDN POR

PXOR

r64,m64111/1
PSRA PSRL PSLLr64,r64/i11/1
PSRA PSRL PSLLr64,m64111/1
PACK PUNPCKr64,r6411/1
PACK PUNPCKr64,m64111/1
EMMS116 k)
MASKMOVQ d)r64,r641112-81/30-1/2
PMOVMSKB d)r32,r64111/1
MOVNTQ d)m64,r64111/30-1/1
PSHUFW d)r64,r64,i111/1
PSHUFW d)r64,m64,i1121/1
PEXTRW d)r32,r64,i1121/1
PISRW d)r64,r32,i111/1
PISRW d)r64,m16,i1121/1
PAVGB PAVGW d)r64,r64112/1
PAVGB PAVGW d)r64,m641121/1
PMINUB PMAXUB PMINSW PMAXSW d)r64,r64112/1
PMINUB PMAXUB PMINSW PMAXSW d)r64,m641121/1
PMULHUW d)r64,r64131/1
PMULHUW d)r64,m641141/1
PSADBW d)r64,r642151/2
PSADBW d)r64,m6421161/2

注:

d) 只有PIII上才能用。

k) 你可以在EMMS和后续浮点指令之间插入一些其它指令来掩盖延迟。

?

29.4
XMM指令 (PIII)
指令操作数微码的端口分配情况延迟吞吐量
p0p1p01p2p3p4
MOVAPSr128,r128211/1
MOVAPSr128,m128221/2
MOVAPSm128,r1282231/2
MOVUPSr128,m128421/4
MOVUPSm128,r12814431/4
MOVSSr128,r128111/1
MOVSSr128,m321111/1
MOVSSm32,r1281111/1
MOVHPS MOVLPSr128,m64111/1
MOVHPS MOVLPSm64,r1281111/1
MOVLHPS MOVHLPSr128,r128111/1
MOVMSKPSr32,r128111/1
MOVNTPSm128,r128221/15-1/2
CVTPI2PSr128,r64231/1
CVTPI2PSr128,m642141/2
CVTPS2PI CVTTPS2PIr64,r128231/1
CVTPS2PIr64,m1281241/1
CVTSI2SSr128,r322141/2
CVTSI2SSr128,m322251/2
CVTSS2SI CVTTSS2SIr32,r1281131/1
CVTSS2SIr32,m1281241/2
ADDPS SUBPSr128,r128231/2
ADDPS SUBPSr128,m1282231/2
ADDSS SUBSSr128,r128131/1
ADDSS SUBSSr128,m321131/1
MULPSr128,r128241/2
MULPSr128,m1282241/2
MULSSr128,r128141/1
MULSSr128,m321141/1
DIVPSr128,r1282481/34
DIVPSr128,m12822481/34
DIVSSr128,r1281181/17
DIVSSr128,m3211181/17
ANDPS ANDNPS ORPS XORPSr128,r128221/2
ANDPS ANDNPS ORPS XORPSr128,m1282221/2
MAXPS MINPSr128,r128231/2
MAXPS MINPSr128,m1282231/2
MAXSS MINSSr128,r128131/1
MAXSS MINSSr128,m321131/1
CMPccPSr128,r128231/2
CMPccPSr128,m1282231/2
CMPccSSr128,r128131/1
CMPccSSr128,m321131/1
COMISS UCOMISSr128,r128111/1
COMISS UCOMISSr128,m321111/1
SQRTPSr128,r1282561/56
SQRTPSr128,m12822571/56
SQRTSSr128,r1282301/28
SQRTSSr128,m3221311/28
RSQRTPSr128,r128221/2
RSQRTPSr128,m1282231/2
RSQRTSSr128,r128111/1
RSQRTSSr128,m321121/1
RCPPSr128,r128221/2
RCPPSr128,m1282231/2
RCPSSr128,r128111/1
RCPSSr128,m321121/1
SHUFPSr128,r128,i2121/2
SHUFPSr128,m128,i2221/2
UNPCKHPS UNPCKLPSr128,r1282231/2
UNPCKHPS UNPCKLPSr128,m1282231/2
LDMXCSRm3211151/15
STMXCSRm32671/9
FXSAVEm409611662
FXRSTORm40968968