f) FXCH генерирует 1 микрооперацию, что делается с помощью переименован регистром, порты при этом не задействуются;
g) FMUL использует ту же схему, что и целочисленное умножение. Поэтому комб нированная производительность целочисленных умножений и умножений FPU равна FMUL + 1 IMUL за 3 такта;
h) задержка FDIV зависит от заданной в контрольном слове точности: 64 бита да? задержку в 38 тактов, 53 - в 32 такта, 24 - в 18. Деление на степень от двух занимает тактов. Производительность равна 1/(задержка-1);
i) быстрее для низкой точности.
6.29.3 Инструкции ММХ (Р2 и РЗ)
Таблица 6.12. Время выполнения инструкций ММХ. Процессоры Р2 и I
с
>,
EX X
Ql Ф С О
микрооперации
с «1 1-
О а.
MOVD MOVQ
MOVD MOVQ
r64,m 32/64
MOVD MOVQ
т32/б4,г64
PADD PSUB PCMP
г64,гб4
PADD PSUB
гб4,т64
PMUL PMAOD
г64,гб4
PMUL PMADD
г64,т64
PAND PANDN POR
PXOR
г64,г64
PAND PANDN TOR
PXOR
r64,m64
PSRA PSRL PSLL
r64,r64/i
PSRA PSRL PSLL
r64,m64
PACK PUNPCK
г64,г64
PACK PUNPCK
г64,т64
EMMS
6 к)
MASKMOVQ d)
г64,г64
1/30
PMOVMSKB d)
г32,г64
MOVNTQ d)
т64,г64
1/30-
PSHUFW d)
г64,гб4,1
PSHUFW d)
г64,т64,1
PEXTRW d)
г32,гб4,1
PISRW d)
г64,г32,1
PBRW d)
r64,ml6,i
PAVGB PAVGW d)
г64,г64
PAVGB PAVGW d)
г64,т64
PMINUB PMAXUB PMINSW
PMAXSW d)
г64,г64
PMINUB PMAXUB PMINSW
PMAXSW d)
г64,т64
PMULHUW d)
г64,г64
PMULHUW d)
г64,т64
PSADBW d)
г64,г64
. 1/2
PSAOBW d)
г64,т64
1/2
Примечания
d) только РЗ;
к) Можно скрыть задержку, вставив другие инструкции между EMMS и последующими инструкциями FPU.
Таблица 6.13 «Время выполнения инструкций ХММ. Процесс
микрооперации
с
X IT
га a.
Ql 0) EX
о а. с
MOVAPS
rl28,rl28
MOVAPS
rl28,ml28
MOVAPS
ml28,rl28
MOVUPS
rl28,ml28
MOVUPS
ml28,rl28
MOVSS
rl28,rl28
MOVSS
rl28,m32
MOVSS
m32,rl28
MOVHPS MOVLPS
rl28,m64
MOVHPS MOVLPS
m64,rl28
MOVLHPS MOVHLPS
rl28,rl28
MOVMSKPS
r32,rl28
MOVNTPS
mlZ8,rl28
-1/2
CVTPI2PS
rl28,r64
CVTPI2PS
rl28,m64
CVTPS2PI
CVTTPS2PI
r64,rl28
CVTPS2PI
r64,ml28
CVTSI2SS
rl28,r32
CVTSI2SS
rl28,m32
CVTSS2SI
CVTTSS2SI
r32,rl28
CVTSS2SI
r32,ml28
6.29.4. Инструкции ХММ (РЗ)
AOOPS SUBPS
rl28,rl28
ADDPS SUBPS
rl28,ml28
ADDSS SUBSS
rl28,rl28
ADDSS SUBSS
rl28,m32
MULPS
rl28,rl28
MULPS
rl28,ml28
MULSS
rl28,rl28
MULSS
rl28,m32
DIV PS
rl28,rl28
1/34
DIV PS
rl28,ml28
1/34
DIVSS
rl28,rl28
1/17
DIVSS
rl28,m32
1/17
ANDPS ANDNPS ORPS
XORPS
rl28,rl28
ANDPS ANDNPS ORPS
XORPS
rl28,ml28
MAXPS MINPS
rl28,rl28
MAXPS MINPS
rl28,ml28
MAXSS MINSS
rl28,rl28
MAXSS MINSS
rl28,m32
CMPccPS
rl28,rl28
CMPccPS
rl28,ml28
l/2
CMPccSS
rl28,rl28
1/1
CMPccSS
rl28,m32
1/1
COMISS UCOMISS
rl28,rl28
COMBS UCOMISS
rl28,m32
SORT PS
rl28,rl28
l/56
SORT PS
rl28,ml28
l/56
SQRTSS
rl28,rl28
V28
SQRTSS
rl28,m32
l/28
RSQRTPS
rl28,rl28
RSQRTPS
rl28,ml28
RSQRTSS
rl28,rl28
RSQRTSS
rl28,m32
RCPPS
rl28,rl28
RCPPS
rl28,ml28
RCPSS
rl28,rl28
RCPSS
rl28,m32
SHUFPS
rl28,rl28,i
SHUFPS
rl28,ml28,i
UNPCKHPS UNPCKLPS
rl28,rl28
UNPCKHPS UNPCKLPS
rl28,ml28
LOMXCSR
1/15
STMXCSR
FXSAVE
m4096
FXRSTOR
m4096
630. Тестирование скорости
у микропроцессоров семейства Pentium есть встроенный 64-х битный счетчик, кото можно считывать в EDX:EAX, используя инструкцию RDTSC (read time stamp counter), инструкция очень полезна для того, чтобы точно узнать, сколько тактов занял кусок кода.
Программа ниже полезна для измерения количества тактов, которое занимает i Программа выполняет код 10 раз и сохраняет 10 значений счетчика. Программу мо: использовать как в 16-ти, так и в 32-х битном режиме на Р1 и РММХ.
;************ Тестовая программа для Р1 и РММХ: ********************