Относится ли префикс Lock (0xF0) в группу 1 (REPE, REPNE) ?

Тема в разделе "WASM.RESEARCH", создана пользователем EvilsInterrupt, 20 сен 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Всем хай!

    Гляжу доку от Intel, там я вижу что префикс Lock относится к группе куда включены префиксы:
    REPNE, REPE.
    В мануале от AMD говорится, что этот префикс сам по себе.

    Почему мне это важно:
    Возьмем ситуацию:

    0xF0, 0xF2, 0xF3, 0xXX(конкретный опкод)

    При декодировании влияния префиксов друг на друга,надо точно знать кто и кого бьет. В примере выше, байт 0xF3 бьет 0xF2, т.к. он последний ! А они входят в одну группу!

    Если префикс Lock в той же группе, а это соглассно мануалу Intel то его роль бьет 0xF2. Если же поверить мануалу AMD то его власть на маш.команду никто не оспаривает.

    Вопрос: Кому верить AMD или Intel?

    Предполагаемый ответ:
    AMD
     
  2. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    EvilsInterrupt
    вот что говорит AMD о префиксе LOCK:
    а вот о REP:
    То есть по идее LOCK и REP вообще никогда не могут использоваться вместе. В таком случае они как бы ни за что не отвечают :)
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ustus
    Предполагаемый ответ верен! :) АМД правду говорит, но блин в новом мане Интел значит Очибка!
     
  4. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    EvilsInterrupt
    Префиксы F2 и F3 не дружат с префиксом 66 для MMX и SSE команд. Если перед командой поставить 66 и F2(F3), то возникает исключение.
     
  5. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    EvilsInterrupt
    Я бы не назвал это ошибкой - группировка-то условная.
    Black_mirror
    Интересно, даже об этом не задумывался :dntknw: Это на всех процах так? А то я как-то на Athlon XP наблюдал интересную фичу с SSE2, которого на нем не было: например в последовательности 66 0F EB C1 (por xmm0, xmm1) он подло игнорировал префикс и получалось 0F EB C1 (por mm0, mm1), и никаких исключений, просто работает неправильно :dntknw:
    А вот на F2/F3 ругается, все честь по чести.
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Видимо, это и есть то "непредсказуемое поведение" о котором говорится в мануалах :)
     
  7. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    rmn
    Да нет, исключение это как раз штатное поведение. Мануалы говорят, что даже оно не гарантируется (см. мой предыдущий пост)
     
  8. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Ustus
    Мне кажется что на тех процах на которых нет SSE можно префиксы F2,F3 ставить перед любой MMX командой и никакого исключения не будет.
     
  9. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Black_mirror
    Про все процессоры не скажу, не знаю, а на Athlon XP Barton/Thorton префиксы F2/F3 провоцируют исключение, сам проверял. А префикс 66 - нет :dntknw: Хотя это SSE2... Блин, не помню, проверял же на Celeron Mendocino... по-моему у него точно также, только с учетом того, что SSE тоже нет.
     
  10. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Ustus
    Посмотрел AMDшную доку про x86-64, в таблице двухбайтовых инструкций все ячейки со SIMD инструкциями делятся на 4 части: нет префикса, F2, 66, F3. Если префикс 66 есть, а инструкцию такую еще не придумали, то написано invalid:
    0F 53 - RCPPS
    F3 0F 53 - RCPSS
    66 0F 53 - invalid (у меня тут тоже исключение есть)
    F2 0F 53 - invalid

    А вот для EMMS (0F 77) или для PCMPEQD XMM0,XMM0 (66 0F 76) префиксы 66,F2,F3 игнорируются.
     
  11. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Black_mirror
    Я вообще-то имел ввиду процы, в которых префикс 66 еще не мог быть частью опкода, т.е. до SSE2. Вот они и не считают его, поэтому интерпретируют SSE/SSE2 инструкции как соответствующие MMX.
     
  12. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Заметил в таблице несколько интересных опкодов:
    XX 0F D6 (MOVQ2DQ, MOVQ, MOVDQ2Q)
    XX 0F E6 (CVTDQ2PD, CVTTPD2DQ, CVTPD2DQ)
    66 0F 6C (PUNPCKLQDQ)
    66 0F 6D (PUNPCKHQDQ)
    А если убрать префикс, то получается invalid.
     
  13. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Black_mirror
    Я вот в мане от АМД вижу что все 3DNow содержат два 0Fh но один чел говорит это не всегда, я читал до дыр ман, и ничего не нашел!

    Чел видать не прав и для 3DNow всегда два байта 0Fh будут ! ?
     
  14. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    A.2.6 3DNow!™ Opcodes

    The 3DNow! instructions are encoded using two 0Fh opcode
    bytes and an immediate byte that is located at the last byte
    position of the instruction encoding. Thus, the format for
    3DNow! instructions is:
    0Fh 0Fh [ModRM] [SIB] [displacement] imm8_opcode

    Других вариантов я не вижу.
     
  15. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    К AMD 3DNow! также относятся:
    0F 0E - femms
    0F 0D /0 - prefetch
    0F 0D /1 - prefetchw

    Было еще какое-то расширение на Cyrix, которое вроде бы иногда называли 3DNow! (?) но не знаю, насколько это официально.
     
  16. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ustus
    Во уже что-то есть! То есть надо проверять, спасибо!