Anonymous
Разве что cpuid дернуть
Eugene
Win+Pause достаточно, где написано "Процессор" :))
Eugene
В винде :)
Anonymous
Хохохо.. у меня ssh сессия до RHEL тачки :)
Eugene
https://en.wikichip.org/wiki/intel/microarchitectures/cascade_lake
Ну тут вроде AVX-512 поддерживается, написано. Но дизассемблер просто может её не знать, вот и написано (bad).
Anonymous
Вероятно, да
Anonymous
Ну, ладно. Пойду еще помучаю. Всем спасибо :)
Eugene
У кого-нибудь есть таблица/ссылка на таблицу интринсиков для GCC (в первую очередь), Clang, VS ? Чтобы была инструкция на асме и рядом декларация интринсик-функции.
Anonymous
В оф мане только такое - https://gcc.gnu.org/onlinedocs/gcc-8.2.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions
Dolphin
https://habr.com/ru/post/437112/
Dolphin
Для Кортексов
Dmitri
Подскажите синтакс для m64bcst? VMULPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst Или где найти спецификацию ассемблера с avx512 инструкциями? пробую vmulpd ymm12,ymm13, QWORD PTR [0x700+rdx] intel asm но дает ошибку Error: broadcast is needed for operand of such type for `vmulpd'
Dmitri
вот тут есть описание инструкций https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf но я не вижу примеров как это записать в ассемблере
Eugene
xk8.ru/inteldoc — самое актуальное (2-й том как раз по инструкциям)
Dmitri
Я обычно так и делал, но тут боюсь интринсик не берети double. только с m512 и m256 аргументами есть
Dmitri
xk8.ru/inteldoc — самое актуальное (2-й том как раз по инструкциям)
Опять же там только бинорное описание команд. А асм синтакса не найти(
Eugene
vmulpd ymm12,ymm13,qword [0x700+rdx] {1to4}
Eugene
бродкаст задаётся через {1to2}, {1to4}, {1to8}, {1to16}, {1to32}, {1to64}
Eugene
В доке по fasm можно такие вещи ещё искать.
Dmitri
Гениально! Спасибо! Где это описано если не секрет?)
Dmitri
Понятно, спасибо огромное!
Eugene
В мане интела (2-й том), кстати, есть тоже, надо искать {1tox}
Eugene
Синтаксис, конечно, сейчас позволяет выделывать вот такие финты: vfmaddsub213ps zmm30{k7}{z}, zmm31, dword [es:r14+r15*8+0x12345678] {1to16} :))
Dmitri
да, класс. Мне такое поможет уменьшить размер кода
Dmitri
жаль imm64 нельзя как операнд использовать)
Eugene
А смысл? Есть же относительная адресация. Вряд ли статичные данные будут иметь размер больше 4 Гб. А всё остальное адресуется через указатели.
Anonymous
Я обычно так и делал, но тут боюсь интринсик не берети double. только с m512 и m256 аргументами есть
В интринзик свои типы передаются и работать с ними тоже через спец функции
Anonymous
Ну, в интеловском так
Eugene
По поводу интринсиков нашёл вот это: https://software.intel.com/sites/landingpage/IntrinsicsGuide/ Только не факт, что там всё совместимо с GCC или Clang, но всё же. Описание есть хорошее.
Dmitri
А смысл? Есть же относительная адресация. Вряд ли статичные данные будут иметь размер больше 4 Гб. А всё остальное адресуется через указатели.
Я больше про то что бы использовать константы как аргумент в инструкции и не загружать их дополнительно из памяти. т.е. можно делать add rax, 57 было бы удобно делать vaddpd ymm4, 57.0, ymm3
Eugene
mov rax,57.0 movq xmm1,rax vaddsd xmm4,xmm1,xmm3
Eugene
Понятно, что не всегда удобно, но в сравнении с тем, что было в FPU это уже круто :)
Eugene
mov rax,57.0 movq xmm1,rax vshufpd ymm1,ymm1,ymm1,0 vaddpd ymm4,ymm1,ymm3
Dmitri
Да, как-то так я тоже придумал, но это уже много кода получается
Vyacheslav
Много кода не есть плохо
Dmitri
К сожелению, в моем случае плохо. Но это специальный случай.
Eugene
Ну тогда push push ... [rsp] или call @F dq ... dq ... dq ... dq ... @@: pop rax ...[rax] Не знаю что еще предложить.
Eugene
Хотя call длинные
Aiwan \ (•◡•) / _bot
mov eax,[lParam] что в масме это значит? в lParam указатель на структуру. спрашиваю потому что такая запись характерна для fasm
Aiwan \ (•◡•) / _bot
mov eax,[lParam] assume eax: ptr TOOLTIPTEXT .if [eax].hdr.code == TTN_NEEDTEXT
Aiwan \ (•◡•) / _bot
разве это не ошибка?
bilka00
Просто пишет в Eax данные что лежат по lParam
bilka00
Мне кажется что в масме что у фасме так же
bilka00
хотя в масма вроде обезательно указывать размер
bilka00
но это не точно
Aiwan \ (•◡•) / _bot
mov eax,[lParam] assume eax: ptr TOOLTIPTEXT .if [eax].hdr.code == TTN_NEEDTEXT
https://docs.microsoft.com/en-us/windows/desktop/controls/wm-notify
Aiwan \ (•◡•) / _bot
lParam A pointer to an NMHDR structure that contains the notification code and additional information. For some notification messages, this parameter points to a larger structure that has the NMHDR structure as its first member.
Aiwan \ (•◡•) / _bot
сделал короч так mov eax,[lparam] virtual at eax ttt TOOLTIPTEXT end virtual .if [ttt.hdr.code] = TTN_NEEDTEXT
Aiwan \ (•◡•) / _bot
эт фасм
Aiwan \ (•◡•) / _bot
все таки в лпарам лежит адрес структуры и надо передавать содержимое лпарам в еах, а не 4 байта на которыйе указывает лпарам
Eugene
хотя в масма вроде обезательно указывать размер
Нет, если размер совпадает. А если не совпадает, то и в фасме надо. Пофиг только насму. Ему насмать на размеры переменной :)
Eugene
В 64-х битах mov rax,[lParam], скорее всего возьмёт 8 байт данных по указателю, а в 32 точно нет.
Eugene
Это в фасме. В масме 64 хз
Eugene
32 так же.
Eugene
Надо потестить, ибо не помню уже, но любопытно...
Eugene
Попробовал (и вспомнил). Короче, в 64-битах такая канитель (и в masm, и в fasm). mov rax,[lParam] (причём в masm64 почему-то так не компилится, компилится только mov rax,lParam) читает данные из стека (из буферной зоны). Так что нужно писать mov rax,rcx или сразу mov rax,[rcx+1234h].
Aiwan \ (•◡•) / _bot
мой вариант изящней и придерживается некоторому стилю фасм
Aiwan \ (•◡•) / _bot
Eugene
Ну тут на вкус и цвет :)
Aiwan \ (•◡•) / _bot
ага
Aiwan \ (•◡•) / _bot
он щас на это посмотрит и убежит
Aiwan \ (•◡•) / _bot
самое простое сделал - перевел масм код на фасм код. а вот как с макросами быть??? есть кто желающий помочь переделать масм макросы под фасм?
s54820
И у тебя этот ttt будет до конца программы висеть. Даже в других функциях. А мог бы просто подключить macro/masm.inc, в котором есть реализация assume на макросах.
Aiwan \ (•◡•) / _bot
s54820
в реализации assume есть такие строки virtual at reg reg struct end virtual не ьудет ли это то же самое что написал я?
Нет, после assume eax:TOOLTIPTEXT ты сможешь писать .if [eax.hdr.idFrom] = TTN_NEEDTEXT итд, а потом assume eax:none, чтобы это выключить.
Aiwan \ (•◡•) / _bot
хм, ща попробую
Aiwan \ (•◡•) / _bot
ставлю assume eax:none и вылетает вообще нелогичная ошибка
bilka00
Господа вопрос по винапи могу ли я использовать провайдер инициализированый через CryptAcquireContext в нескольких разных потоках одновременно (буквально могу ли использовать в многопоточных приложениях один вызов иниицализации, установки ключей и одновременно множественный вызов cryptDecrypt)
Aiwan \ (•◡•) / _bot
bilka00
Ну вопрос в том не будет ли конфликтов в таком случае между потоками, малоли как оно там реализовано
Aiwan \ (•◡•) / _bot
s54820
где то там , в процедуре: .if eax = 0
Да, вижу. Не знаю, что с этим делать. Не работает none почему-то.
Eugene
где то там , в процедуре: .if eax = 0
Не знаю, у меня работает none. А процедура не между двумя assume'ами?