Я не помню, чтобы увидеть какую-либо спецификацию о том, что вы ожидаете в случае безумно сочетания случайных префиксов, поэтому я думаю, что поведение процессора может быть «неопределенным» и, возможно, специфичным для процессора. (Ясно, что некоторые вещи указаны, например, в документах Intel, но многие случаи не рассматриваются). И некоторые комбинации могут быть зарезервированы для будущего использования.
Мои наивные предположения, как правило, заключались в том, что дополнительные префиксы были бы не-ops, но нет никакой гарантии. Это кажется разумным, учитывая, что, например, некоторые оптимизирующие руководства рекомендуют многобайтовые NOP
(канонический 90h
) предваряя с 66h
, например:
db 66h, 90h; 2-byte NOP
db 66h, 66h, 90h; 3-byte NOP
db 66h, 66h, 66h, 90h; 4-byte NOP
Однако, я также знаю, что CS
и DS
сегмента переопределение префиксов имеют Изучаются новые функции, SSE2 ветви намека префиксов (предсказать филиал взято = 3Eh
= DS
переопределить; ветвь прогноза не принимается = 2Eh
= CS
переопределить) при применении к инструкциям условного перехода.
Во всяком случае, я смотрел на ваших примерах выше, всегда устанавливая XMM1
всем 0
и XMM7
всем 0FFh
по
pxor xmm1, xmm1 ; xmm1 <- 0s
pcmpeqw xmm7, xmm7 ; xmm7 <- FFs
и затем код в вопросе, с xmm1, xmm7
аргументами.То, что я наблюдал (32-битный код на системе Win64 и Intel T7300 Core 2 Duo) было:
1) без изменений наблюдается addsd
путем добавления 66h
префикс
db 66h
addsd xmm1, xmm7 ;total sequence = 66 F2 0F 58 CF
2) отсутствие изменений наблюдается для addss
путем добавления 0F2h
префикс
db 0f2h
addss xmm1,xmm7 ;total sequence = F2 F3 0F 58 CF
3) Тем не менее, я наблюдал изменение предваряя addpd
от 0F2h
:
db 0f2h
addpd xmm1, xmm7 ;total sequence = F2 66 0F 58 CF
В этом случае результатом в XMM1 было 0000000000000000FFFFFFFFFFFFFFFFh
вместо FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFh
.
Так мой вывод состоит в том, что не следует делать никаких предположений и ожидать «неопределенного» поведения. Однако я бы не удивился, если бы вы могли найти какие-то подсказки в manuals Agner fog.
Это не f3 0f 58 ADDSS, а не ADDPD? – PhiS
упс! исправлено! Спасибо –