Cтруктура с данными от производительности инструкции.
FirstPfx - первый префикс опкода 66h,0F2h или 0F3h.
Если байт равен 0FFh то опкод не допускает этих 3 префиксов и если равен
нулю то эти префиксы не влияют на основной опкод.
FirstByte - первый байт опкода.
SecondByte
- второй байт опкода.
ModrmType - дополнительные флаги определяющие свойства опкода.
Используются следующие значения.
MODREGREG equ (1 shl 0) - нет обращения к
памяти.
MODREGMEM equ (1 shl 1)
- есть обращение к памяти.
LNOTE17 equ (1 shl 2) - инструкция
генерирует внутренний NOP. За один цикл может быть выполнено до 3 таких NOP`ов.
LNOTE18 equ (1 shl 3) - тип
декодирования инструкции VectorPath и используется один конвейер
(один ROP).
LNOTE19 equ (1 shl 4) - этот флаг
использован только для инструкций fprem и fprem1. Означает, что для получения
правильного значения Latency к нему нужно прибавить разницу экспонент делителя
и делимого, а также величину n = (s+1)/2, где s это количество сдвигов которое
нужно выполнить для нормализации результата.
LNOTE20 equ (1 shl 5) - поле Latency
содержит минимальное, самое лучшее значение.
MBL equ (1
shl 6) - бит VEX.L установлен.
VEX_SEC66 equ (1 shl 7) - последние два бита
последнего байта в VEX, SVEX или XOP префиксе равны 01y.
А также сочетания.
EX0_EX1 equ (EX0_PIPE
or EX1_PIPE)
AG0_AG1 equ (AG0_PIPE
or AG1_PIPE)
EX_AG01 equ (EX0_EX1
or AG0_AG1)
FADD_FMUL equ (FADD_PIPE
or FMUL_PIPE )
FADD_MUL_ST equ (FADD_FMUL
or FSTORE_PIPE )
XBR_P1 equ (XBR_PIPE
or P1_PIPE )
MAL_P2_P3 equ (MAL_PIPE
or P2_PIPE or P3_PIPE
)
CVT_P0 equ (CVT_PIPE
or P0_PIPE )
STO_P3 equ (STO_PIPE
or P3_PIPE )
FMA_P0_P1 equ (FMA_PIPE
or P0_PIPE or P1_PIPE
)
MMA_P0 equ (MMA_PIPE
or P0_PIPE )
FMA_P0 equ (FMA_PIPE
or P0_PIPE )
XBR_P1_FMA_P0 equ (XBR_P1
or FMA_P0 )
FMA_P0_P1_STO_P3 equ (FMA_P0_P1
or STO_P3 )
XBR_P1_CVT_P0 equ (XBR_P1
or CVT_P0 )
CVT_P0_STO_P3 equ (CVT_P0
or STO_P3 )
XBR_P1_STO_P3 equ (XBR_P1
or STO_P3 )
MAL_P2_P3_XBR_P1 equ (MAL_P2_P3
or XBR_P1)
CVT_P0_FMA_P0_P1 equ (FMA_P0_P1
or CVT_P0)
DecodeType - уровень сложности инструкции.
Может принимать одно из следующих значений.
DEC_1P equ (1 shl 0) - самая простой тип
DEC_2P equ (1 shl 1) - декодируется в две
простых инструкции
DEC_VC equ (1 shl 2) - инструкция декодируется
не менее чем в 3 простых инструкции
DEC_MC
equ (1 shl 3) - сложная инструкция, микрокод.
Latency
- время ожидания инструкции в циклах.
Latency2
- иногда используется как альтернативное время ожидания зависящее от
определённых условий, а бывает, что здесь находится старшая часть времени
ожидания т.е. полное время это число с двумя 8-байтными
разрядами Latency2:Latency.
Throughput - производительность инструкции. Поле состоит из 2 байт,
которые следует отделять. Производительность это отношение старшего байта
к младшему. Часто оба байта равны нулю и это означает отсутствие данных о
производительности. Если в поле Flags установлен флаг LAT_COND
, тогда это поле содержит специальный код условия.
Возможны следующие значения.
curr_id=1
enum ch_cpl - изменение уровня
привилегий
enum
callgate - передача управления через шлюз вызова.
Flags - флаги определяющие свойства опкода.
Используются следующие флаги.
LAT_IMM equ (1 shl 0) - поле Latency содержит
просто время ожидания.
LAT_RNG equ (1 shl 1) - время ожидания
пренадлежит диапазону [Latency;Latency2].
LNOTE11 equ (1 shl 2) - время ожидания является
минимумом и на практике может быть больше.
LAT_COND equ (1 shl 3) - означает, что Latency2
содержит альтернативное время ожидания, а Throughput содержит код условия.
LAT_UNV equ (1 shl 4) - отсутствие данных о
времени ожидания.
LAT_FRACT equ (1 shl 5) - время ожидания это
дробное число Latency/Latency2.
LNOTE1 equ (1 shl 6) - время ожидания
только для предсказуемого ветвления.
LNOTE2 equ (1 shl 7) - операция меняет значение
регистра ESP, новое значение которого доступно на 1 цикл раньше, чем время
ожидания инструкции.
LNOTE3 equ (1 shl 8) - время ожидания
для операций логических сдвигов не зависит от количества бит на
которое происходит сдвиг.
LNOTE4 equ (1 shl 9) - LEA инструкция имеет
время ожидания 1 когда при вычислении аддресса используется не более
2 опреандов (например складывается база и индекс LEA
EAX,[EDX+EDI]). Инструкции с 3 операндами или с масштабированием имеют
время ожидания равное 2 (например LEA EAX,[EBX+EBX*8]).
LNOTE5 equ (1 shl 10) - These instructions have
an effective latency as shown. They map to internal NOPs that can be issued at
a rate of three per cycle but do not occupy execution resources.
LNOTE6 equ (1 shl 11) - время ожидания
определяется с помощью формул из раздела “Latency of Repeated String
Instructions” на странице 167 в мануале
Software Optimization Guide for AMD64 Processors .
LNOTE7 equ (1 shl 12) - для PREFETCH и
PREFETCHW в качестве операндов используются 64 байтные блоки для предвыборки.
LNOTE8 equ (1 shl 13) - These instructions have
an effective latency as shown. However, these instructions generate an internal
NOP with a latency of two cycles but no related dependencies. These internal
NOPs can be executed at a rate of three per cycle and can use any of the three
execution resources.
OPS16 equ (1 shl 14) - 16 битный опреанд.
OPS32 equ (1 shl 15) - 32 битный опреанд.
OPS64 equ (1 shl 16) - 64 битный опреанд.
LNOTE10 equ (1 shl 17) - The 8-clock latency is
only visible to younger stores that need to do an external write. The 2-clock
latency is visible to the other stores and instructions.
LNOTE12 equ (1 shl 18) - для
PREFETCHNTA/T0/T1/T2 в качестве операндов используются 64 байтные блоки
для предвыборки.
TWO_0F equ (1 shl 19) - двухбайтный опкод
начинающийся с 0Fh.
RA2C equ (1 shl 20) - повтор после 2
циклов.
RA4C equ (1 shl 21) - повтор после 4 циклов.
BF_EX1_PIPE equ (1 shl 22) - If branch fused, op
to EX1, else op to EX0 | EX1.
LNOTE15 equ (1 shl 23) - Latency
это время ожидания для инструкции, время также зависит от скорости памяти
и реализации оборудования.
LNOTE14 equ (1 shl 24) - младшая часть
результата доступна на один цикл раньше, чем указано в Latency.
MODE64 equ (1 shl 25) - 64 битный режим.
ADDR16 equ (1 shl 26) - 16 битный аддресс.
ADDR32 equ (1 shl 27) - 32 битный аддресс.
LNOTE13 equ (1 shl 28) - старшая часть
результата доступна на 1 цикл раньше, чем младшая.
LNOTE9 equ (1 shl 29) - First op to AG0 | AG1,
Second to EX0 | EX1.
NORES equ (LNOTE5
) ;No resources mapped.
LNOTE16 equ (1 shl 30) - время ожидания
зависит от контроля точности и Latency\Latency2\Throughput это время
ожидания для одинарной\двойной\расширенной точности
J32NOF equ (1 shl 31) - в 64-битном режиме
размер операнда может быть только 16 или 64 битным.