Всем привет. Не могу разобраться с инструкциями vpermil2ps и vpermil2pd, у меня процессора соответствующего нет, а в мануале явные ошибки. В старом мануале. Код (Text): Mnemonic Encoding XOP RXB.mmmm m W.vvvv.L.pp Opcode VPERMIL2PS xmm1, xmm2, xmm3/mem128, xmm4, imm8 C4 RXB.03 0.xsrc1.0.00 48 /r imm8 VPERMIL2PS xmm1, xmm2, xmm3, xmm4/mem128, imm8 C4 RXB.03 1.xsrc1.0.00 48 /r imm8 VPERMIL2PS ymm1, ymm2, ymm3/mem256, ymm4, imm8 C4 RXB.03 0.ysrc1.1.00 48 /r imm8 VPERMIL2PS ymm1, ymm2, ymm3, ymm4/mem256, imm8 C4 RXB.03 1.ysrc1.1.00 48 /r imm8 В новом мануале. Код (Text): Instruction Encoding Mnemonic VEX RXB.mmmmm W.vvvv.L.pp Opcode VPERMIL2PS xmm1, xmm2, xmm3/mem128, xmm4, m2z C4 RXB.00011 0.src.0.01 48 /r is5 VPERMIL2PS xmm1, xmm2, xmm3, xmm4/mem128, m2z C4 RXB.00011 1.src.0.01 48 /r is5 VPERMIL2PS ymm1, ymm2, ymm3/mem256, ymm4, m2z C4 RXB.00011 0.src.1.01 48 /r is5 VPERMIL2PS ymm1, ymm2, ymm3, ymm4/mem256, m2z C4 RXB.00011 1.src.1.01 48 /r is5 Не понятно c последними 2 битами третьего байта то-ли VEX.pp=00 то-ли VEX.pp=01. Проверял на Fasm Код (Text): use64 org 100400000h vpermil2ps xmm1,xmm2,xmm3,xmm4,5 Получилось 6 байт db 0C4h,0E3h,68h,48h,0CBh,45h т.е. VEX.pp=00 Эти 6 байт WinDbg игнорирует, зато опкод db 0C4h,0E3h,69h,48h,0CBh,45h он отображает как vpermil2ps xmm1,xmm2,xmm3,xmm4,5 т.е. VEX.pp=01
Процессор не признаёт ни одного из этих опкодов, так же как и код, генерируемый FASM для vpermil2ps xmm1,xmm2,xmm3,xmm4,5 Процессор с AVX, винда тоже
Спасибо за ответ. XOP инструкции могут быть только на процессорах производства AMD, как когда-то ранее 3DNOW, скорей всего на твоей машине Intel.
Эти команды (SSE5) появились только у процессоров AMD на базе архитектуры Bulldozer. Серийное производство которых началось только в сентябре 2011 года. Я думаю до нас они ещё вообще не доехали, так что людям отладчиком просто проверять не на чем. В общем долго ты ещё ждать будешь ответа, посмотри лучше в исходниках binutils.
В релизе нету, в рабочей ветке в репозитории есть. Там второй вариант (WinDbg). Смотри в новых мануалах. Там история такая: AMD предложила SSE5 и написала спецификацию (в CPU не реализовали). В Intel как всегда решили что мы придумаем своё - понатырили инструкций из SSE5, добавили своих и сделали AVX. После этого AMD изменила способ кодирования инструкций SSE5, как написано для совместимости с Intel AVX. Так что смотри в новых мануалах - там должно быть правильно. В процессорах реализовали именно вариант с изменённым кодированием. Вот нашёл ещё в Википедии: http://ru.wikipedia.org/wiki/SSE5
От SSE5 отказались еще за долго до того как я начал писать свой дизассемблер, так что тема совсем не про это. Просто у меня есть прошлогодний AMD`ешный мануал Volume 6 с описанием XOP и FMA4, в котором скорей всего опечатки в описаниях опкодов vpermil2ps и vpermil2pd. Вообщем буду придерживаться варианта из нового мануала, хотя и там хватает опечаток, кто его знает может когда получится проверить это на живой машине то опять придется переделывать.