Оптимизация для процессоров семейства Pentium: 28. Список периодов выполнения инструкций для PPlain и PMMX — Архив WASM.RU
Пояснения:
Операнды: r = регистр, m = память, i = число, sr - сегментный регистр, m32 = 32-х битный операнд памяти и так далее.
Такты: указанные значения являются минимальными. Промахи кэша, невыравненность и исключения могут значительно увеличить количество требуемых для выполнений тактов.
Спариваемость: u = спаривается в u-конвеере, v = спаривается в v-конвеере, uv = спаривается в любом конвеере, np = не спаривается.
28.1 Целочисленные инструкции (PPlain и PMMX)
Инструкции Операнды Такты Спариваемость NOP 1 uv MOV r/m, r/m/i 1 uv MOV r/m, sr 1 np MOV sr , r/m >= 2 b) np MOV m , accum 1 uv h) XCHG (E)AX, r 2 np XCHG r , r 3 np XCHG r , m >15 np XLAT 4 np PUSH r/i 1 uv POP r 1 uv PUSH m 2 np POP m 3 np PUSH sr 1 b) np POP sr >= 3 b) np PUSHF 3-5 np POPF 4-6 np PUSHA POPA 5-9 i) np PUSHAD POPAD 5 np LAHF SAHF 2 np MOVSX MOVZX r , r/m 3 a) np LEA r , m 1 uv LDS LES LFS LGS LSS m 4 c) np ADD SUB AND OR XOR r , r/i 1 uv ADD SUB AND OR XOR r , m 2 uv ADD SUB AND OR XOR m , r/i 3 uv ADC SBB r , r/i 1 u ADC SBB r , m 2 u ADC SBB m , r/i 3 u CMP r , r/i 1 uv CMP m , r/i 2 uv TEST r , r 1 uv TEST m , r 2 uv TEST r , i 1 f) TEST m , i 2 np INC DEC r 1 uv INC DEC m 3 uv NEG NOT r/m 1/3 np MUL IMUL r8/r16/m8/m16 11 np MUL IMUL all other versions 9 d) np DIV r8/m8 17 np DIV r16/m16 25 np DIV r32/m32 41 np IDIV r8/m8 22 np IDIV r16/m16 30 np IDIV r32/m32 46 np CBW CWDE 3 np CWD CDQ 2 np SHR SHL SAR SAL r , i 1 u SHR SHL SAR SAL m , i 3 u SHR SHL SAR SAL r/m, CL 4/5 np ROR ROL RCR RCL r/m, 1 1/3 u ROR ROL r/m, i(><1) 1/3 np ROR ROL r/m, CL 4/5 np RCR RCL r/m, i(><1) 8/10 np RCR RCL r/m, CL 7/9 np SHLD SHRD r, i/CL 4 a) np SHLD SHRD m, i/CL 5 a) np BT r, r/i 4 a) np BT m, i 4 a) np BT m, i 9 a) np BTR BTS BTC r, r/i 7 a) np BTR BTS BTC m, i 8 a) np BTR BTS BTC m, r 14 a) np BSF BSR r , r/m 7-73 a) np SETcc r/m 1/2 a) np JMP CALL short/near 1 e) v JMP CALL far >= 3 e) np conditional jump short/near 1/4/5/6 e) v CALL JMP r/m 2/5 e np RETN 2/5 e np RETN i 3/6 e) np RETF 4/7 e) np RETF i 5/8 e) np J(E)CXZ short 4-11 e) np LOOP short 5-10 e) np BOUND r , m 8 np CLC STC CMC CLD STD 2 np CLI STI 6-9 np LODS 2 np REP LODS 7+3*n g) np STOS 3 np REP STOS 10+n g) np MOVS 4 np REP MOVS 12+n g) np SCAS 4 np REP(N)E SCAS 9+4*n g) np CMPS 5 np REP(N)E CMPS 8+4*n g) np BSWAP 1 a) np CPUID 13-16 a) np RDTSC 6-13 a) j) np Примечания: a) у этой инструкции есть префикс OFH, который занимает дополнительный такт на PPlain, если до этого не было мультитактовой инструкции (смотри главу 12). b) у версий с FS и GS есть префикс OFH, смотри примечание a. c) у версий с SS, FS и GS есть префикс OFH, смотри примечание a. d) у версий с двумя операндами (не числами) есть префикс OFH, смотри примечание a. e) смотри главу 22 f) спаривается, только если в качестве приемника регистр, смотри главу 26.14. g) добавляет один такт для раскодировки префикса повторения, если ранее не предшествовала мультитактовая инстукция (такая как CLD, например, смотри главу 12). h) спаривается, как если бы производилась запись в приемник, смотри главу 26.14. i) 9, если SP кратно 4. Смотри главу 10.2. j) на PPlain: 6 в привилигированном или реальном режиме, 11 в непривилигированном, ошибка в виртуальном. На PMMX: 8 и 13 тактов соответственно.28.2 Инструкции FPU (PPlain и PMMX)
Пояснения:
Операнды: r = регистр, m = память, sr - сегментный регистр, m32 = 32-х битный операнд памяти и так далее.
Такты: указанные значения являются минимальными. Промахи кэша, невыравненность, ненормальные операнды и исключения могут значительно увеличить количество требуемых для выполнений тактов.
Pairability: + = pairable with FXCH, np = not pairable with FXCH.
Спариваемость: + = спариваемо c FXCH, np = не спариваемо с FXCH.
i-ov: пересечение времени выполнения с целочисленными инструкциями. i-ov = 4 означает, что последние четыре такта могут пересекаться с последующими целочисленными инструкциями.
fp-ov: пересечение времени выполнения с инструкциями FPU. fp-ov = 2 означает, что последние два такта могут пересекаться с последующими инструкциями FPU (WAIT здесь считается как инструкция FPU).
Инструкция Операнд Такты Спариваемость i-ov fp-ov FLD r/m32/m64 1 + 0 0 FLD m80 3 np 0 0 FBLD m80 48-58 np 0 0 FST(P) r 1 np 0 0 FST(P) m32/m64 2 m) np 0 0 FST(P) m80 3 m) np 0 0 FBSTP m80 148-154 np 0 0 FILD m 3 np 2 2 FIST(P) m 6 np 0 0 FLDZ FLD1 2 np 0 0 FLDPI FLDL2E etc. 5 s) np 2 2 FNSTSW AX/m16 6 q) np 0 0 FLDCW m16 8 np 0 0 FNSTCW m16 2 np 0 0 FADD(P) r/m 3 + 2 2 FSUB(R)(P) r/m 3 + 2 2 FMUL(P) r/m 3 + 2 2 n) FDIV(R)(P) r/m 19/33/39 p) + 38 o) 2 FCHS FABS 1 + 0 0 FCOM(P)(P) FUCOM r/m 1 + 0 0 FIADD FISUB(R) m 6 np 2 2 FIMUL m 6 np 2 2 FIDIV(R) m 22/36/42 p) np 38 o) 2 FICOM m 4 np 0 0 FTST 1 np 0 0 FXAM 17-21 np 4 0 FPREM 16-64 np 2 2 FPREM1 20-70 np 2 2 FRNDINT 9-20 np 0 0 FSCALE 20-32 np 5 0 FXTRACT 12-66 np 0 0 FSQRT 70 np 69 o) 2 FSIN FCOS 65-100 r) np 2 2 FSINCOS 89-112 r) np 2 2 F2XM1 53-59 r) np 2 2 FYL2X 103 r) np 2 2 FYL2XP1 105 r) np 2 2 FPTAN 120-147 r) np 36 o) 0 FPATAN 112-134 r) np 2 2 FNOP 1 np 0 0 FXCH r 1 np 0 0 FINCSTP FDECSTP 2 np 0 0 FFREE r 2 np 0 0 FNCLEX 6-9 np 0 0 FNINIT 12-22 np 0 0 FNSAVE m 124-300 np 0 0 FRSTOR m 70-95 np 0 0 WAIT 1 np 0 0 Примечания: m) значения, которое нужно сохранить, должно быть готово на один такт раньше. n) 1, если пересекающаяся инструкция тоже FMUL. o) не может пересекаться с инструкциями целочисленного умножения. p) FDIV занимает 19, 33 или 39 тактов для 24, 53 и 64-х битной точности соответственно. FIDIV занимает на 3 такта больше. Точность задается битами 8-9 контрольного слова FPU. r) такты типичны. Тривиальные случаи могут быть быстрее, крайние - медленнее. s) может быть на 3 такта больше, когда требуется выходной результат FST, FCHS или FABS.28.3 Инструкции MMX (PMMX)
Список периодов выполнения инструкций MMX не требуется, потому что они все занимают один такт, кроме инструкций умножения MMX, которые занимают три такта. Время выполнения инструкций умножения MMX может пересекаться и конвееризироваться, поэтому можно добиться производительности в одно умножение за такт.
Инструкция EMMS занимает только один такт, но первая инструкция FPU после EMMS занимает примерно на 58 тактов больше, а первая инструкция MMX после инструкции FPU занимает примерно на 38 тактов больше.
Нет потерь при использовании операндов памяти в инструкции MMX, потому что арифметический модуль MMX на один шаг дальше в конвеере, чем модуль загрузки. Но потери будут, когда вы станете сохранять данные из регистра MMX в память или в 32-х битный регистр: данные должны быть готовы на один такт раньше. Это аналогично инструкциям FPU.
Все инструкции MMX, кроме EMMS, спариваются в любом конвеере. Правила спаривания для инструкций MMX объяснены в главе 10. © Агнер Фог, пер. Aquila
Оптимизация для процессоров семейства Pentium: 28. Список периодов выполнения инструкций для PPlain и PMMX
Дата публикации 22 авг 2002