Оптимизация для процессоров семейства Pentium: 28. Список периодов выполнения инструкций для PPlain и PMMX

Дата публикации 22 авг 2002

Оптимизация для процессоров семейства 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


0 781
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532