ltn

ltn struc
    FirstPfx   BYTE ?
    FirstByte  BYTE ?
    SecondByte BYTE ?
    ModrmType  BYTE ?
    Pipes      DWORD
    DecodeType WORD ?
    Latency    QWORD ?
    Latency2   QWORD ?
    Throughput WORD ?
    Flags      DWORD ?
ltn ends
PLTN TYPEDEF PTR ltn

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.
  • Pipes - набор флагов определяющий конвейеры на которых выполняется инструкция. Так или иначе всё это описано в мануалах AMD по оптимизации Software Optimization Guide for AMD64 Processors  и Software Optimization Guide for AMD Family 15h Processors.
     
    Используются следующие флаги.
    EX0_PIPE equ (1 shl 0)
    EX1_PIPE equ (1 shl 1)
    AG0_PIPE equ (1 shl 2)
    AG1_PIPE equ (1 shl 3)
    P0_PIPE equ (1 shl 4)
    P1_PIPE equ (1 shl 5)
    P2_PIPE equ (1 shl 6)
    P3_PIPE equ (1 shl 7)
    UNV_PIPE equ (1 shl 8)
    MAL_PIPE equ (1 shl 9)
    XBR_PIPE equ (1 shl 10)
    FMA_PIPE equ (1 shl 11)
    MC_PIPE equ (1 shl 12)
    CVT_PIPE equ (1 shl 13)
    MMA_PIPE equ (1 shl 14)
    STO_PIPE equ (1 shl 15)
    FADD_PIPE equ (1 shl 16)
    FMUL_PIPE equ (1 shl 17)
    FSTORE_PIPE equ (1 shl 18)
    NONE_PIPE equ (1 shl 19)

    А также сочетания.
    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 битным.

  • Сайт управляется системой uCoz