Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11653
Последний выпуск: 19.06.2015

Оптимизация для pentium процессора

8. СПАРИВАНИЕ ИНСТРУКЦИЙ
========================
Pentuim снабжен двумя конвеерами для исполнения инструкций, называющиеся
U-труба и V-труба. при определенных условиях можно выполнить две инструкции
одновременно - одну в U-трубе, а другую в V-трубе. Это может практически
удвоить скорость. Следовательно стоит потратить время на оптимизацию, что бы
ваши инструкции спаривались.

Следующие инструкции спариваются в обоих трубах:
  MOV регистр, память, или значение в регистре или памяти
  PUSH регистр или значение
  POP регистр
  LEA, NOP
  INC, DEC, ADD, SUB, CMP, AND, OR, XOR,
  и некоторые виды TEST (смотри раздел 17.2)

Следующие инструкции спариваются только в U-трубе:
ADC, SBB
SHR, SAR, SHL, SAL со значением счетчиком
ROR, ROL, RCR, RCL со значением счетчиком 1

Следующие инструкции могут исполняться в обоих трубах, но спариваются только в
V-трубе: ближние вызовы, короткие и ближние переходы, короткие и ближние
условные переходы.

Все остальные инструкции могут исполняться только в U-трубе и не спариваются.

Две последовательные инструкции спарятся если будут выполнены следующие
условия:

8.1 Первая инструкция спаривается в U-трубе, а вторая в V-трубе.

8.2 Вторая инструкция не должна читать или писать в регистр, в который пишет
    первая. Например:
    MOV EAX, EBX / MOV ECX, EAX     ; чтение после записи, не спариваются
    MOV EAX, 1   / MOV EAX, 2       ; запись после записи, не спариваются
    MOV EBX, EAX / MOV EAX, 2       ; запись после чтения, спариваются
    MOV EBX, EAX / MOV ECX, EAX     ; чтение после чтения, спариваются
    MOV EBX, EAX / INC EAX          ; чтение и запись после чтения, спариваются

8.3 В правилах 8.2 мы рассматривали части регистров, как полные регистры,
    например:
    MOV AL, BL  /  MOV AH, 0        ; запись в разные части одного регистра,
                                    ; не спариваются

8.4 Две инструкции, пишущие в разные части регистра флагов могут спариваться,
    не смотря на правила 8.2 и 8.3 Например:
    SHR EAX,4 / INC EBX   ; спариваются

8.5 Инструкция, пишущая в флаги может спариваться с условным переходом, не
    смотря на правило 8.2 Например:
    CMP EAX, 2 / JA LabelBigger   ; спаривается

8.6 Следующие инструкции могут спариваться, не смотря на то, что они
    модифицируют указатель стека. Например:
    PUSH + PUSH,  PUSH + CALL,  POP + POP

8.7 Есть различия в спаривании инструкций с префиксом.
    Вот различные типы префиксов:
    - инструкции, адресующие не типичный сегмент имеют префикс.
    - инструкции, использующие 16 битные данные в 32 битном режиме, равно как
      инструкции, использующие 32 битные данные в 16 битном режиме имеют
      префикс размера операнда.
    - инструкции, использующие 32 битные базовые или индексные регистры в
      16 битном режиме имеют префикс размера операнда.
    - повторяющиеся строковые инструкции имеют префикс повторения.
    - заблокированные инструкции имеют префикс блокировки.
    - многие двухбайтные инструкции, не присутствующие в процессоре 80086
      имеют двухбайтный опкод, где первый байт - 0Fh. Байт 0Fh ведет себя
      как префикс на процессоре Pentium без MMX, но не на процессоре Pentium
      MMX. Наиболее общие инструкции с префиксом 0Fh: MOVZX, MOVSX, PUSH FS,
      POP FS, PUSH GS, POP GS, LFS, LGS, LSS, SETcc, BT, BTC, BTR, BTS, BSF,
      BSR, SHLD, SHRD и IMUL с двумя не численными операндами.

    На Pentium без MMX, инструкции с префиксами могут исполняться только в
    U-трубе, за исключением ближних условных переходов.
    На Pentium MMX инструкции с размером операнда, размером адреса, или
    префиксом 0Fh могут выполниться в каждой трубе, а инструкции с префиксом
    сегмента, повторения и блокировки по-прежнему могут выполняться только в
    U-трубе.

8.8 Инструкция, которая имеет как смещение, так и непосредственные данные не
    спариваются на Pentium без MMX, а на Pentium MMX спариваются только в
    U-трубе:
    MOV DWORD PTR DS:[1000], 0    ; не спаривается, или только в U-трубе
    CMP BYTE PTR [EBX+8], 1       ; не спаривается, или только в U-трубе
    CMP BYTE PTR [EBX], 1         ; спаривается
    CMP BYTE PTR [EBX+8], AL      ; спаривается

8.9 Инструкции должны предзагружаться и декодироваться. Это объяснятеся в
    разделе 9.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог