Я пишу довольно много кода на 64-битном языке ассемблера x86_64, и я собираюсь начать еще одну большую библиотеку функций, чтобы предоставить все стандартные побитовые, сдвиговые, логические, арифметические, математические операторы и функции для s0128
, s0256
, s0512
, s1024
подписанных целочисленные типы и типы f0128
, f0256
, f0512
, f1024
с плавающей запятой.
У меня есть процессоры AMD FX-8150
(бульдозер) на обоих моих компьютерах (ubuntu64 и win7-64). Изучив операции, которые должен выполнить мой код, я обнаружил, что большое количество недавних инструкций по манипулированию битами будет чрезвычайно полезным.
Однако, когда я читаю различные документы, в том числе официальные документы AMD на их веб-сайте, я нахожу бесконечные противоречия относительно того, поддерживаются ли определенные инструкции и наборы инструкций процессорами Bulldozer (FX-8150
) и / или piledriver (FX-8350
). Путаница особенно распространена в отношении различных недавних инструкций и наборов инструкций по манипулированию битами, а также наборов инструкций FMA3
и FMA4
.
Я знаю, что некоторые документы AMD ошибочны, потому что я программировал с помощью FMA3
и FMA4
инструкций на моем FX-8150
, и они работают нормально, в то время как документ AMD, сравнивающий бульдозер и погрузчик свай, противоречит этому.
Учитывая, что ВСЕ источники документации, которые я могу найти, кажутся в некоторой степени неправильными в отношении этой проблемы, знает ли кто-нибудь, какие инструкции и / или наборы инструкций работают на piledriver (FX-8350
), но не на bulldozer (FX-8150
)?
Поскольку моя проблема заключается в достоверности имеющейся документации, пожалуйста, не указывайте мне просто на какой-то документ , если вы не уверены, что он правильный. Наилучшие ответы могут дать программисты, которые протестировали эти инструкции и наборы инструкций на своих процессорах Bulldozer [и piledriver].
FMA3
, она сгенерировалаSIGILL
(недопустимую инструкцию), в то время как инструкцииFMA4
работают нормально (и действительно, в моем коде есть десяткиFMA4
инструкций). Конечно, если вы посмотрите на документ AMD, на который я дал ссылку выше, он утверждает, что бульдозер МОЖЕТ выполнятьFMA3
инструкций (неправильно), но НЕ МОЖЕТ выполнять инструкцииFMA4
(неправильно). Теперь о побитовых инструкциях. - person honestann   schedule 23.12.2013FX-8150
). После кропотливой проверки различныхCPUID
битов они кажутся в основном точными (но понять это очень сложно). Один странный бит - этоFMA
бит (который содержит false в моем бульдозереFX-8150
), хотя он выполняетFMA4
, но неFMA3
инструкции. Но я нашел еще один битFMA
во втором наборе (с префиксом0x80000000
), который установлен в 1. В целом,CPUID
действительно кажется довольно надежным, в то время как документация по бульдозеру в мире очень противоречива и в значительной степени неверна. - person honestann   schedule 27.12.2013