Anonymous
Разве что cpuid дернуть
Eugene
Win+Pause достаточно, где написано "Процессор" :))
Eugene
В винде :)
Anonymous
Хохохо.. у меня ssh сессия до RHEL тачки :)
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
Eugene
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'
kitsu
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
но я не вижу примеров как это записать в ассемблере
Anonymous
Eugene
xk8.ru/inteldoc — самое актуальное (2-й том как раз по инструкциям)
Dmitri
Я обычно так и делал, но тут боюсь интринсик не берети double. только с m512 и m256 аргументами есть
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
Anonymous
Ну, в интеловском так
Eugene
По поводу интринсиков нашёл вот это:
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
Только не факт, что там всё совместимо с GCC или Clang, но всё же. Описание есть хорошее.
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
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].
Eugene
Aiwan \ (•◡•) / _bot
мой вариант изящней и придерживается некоторому стилю фасм
Aiwan \ (•◡•) / _bot
Eugene
Ну тут на вкус и цвет :)
Aiwan \ (•◡•) / _bot
ага
Aiwan \ (•◡•) / _bot
он щас на это посмотрит и убежит
Aiwan \ (•◡•) / _bot
самое простое сделал - перевел масм код на фасм код. а вот как с макросами быть???
есть кто желающий помочь переделать масм макросы под фасм?
s54820
И у тебя этот ttt будет до конца программы висеть. Даже в других функциях. А мог бы просто подключить macro/masm.inc, в котором есть реализация assume на макросах.
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
хм, ща попробую
Aiwan \ (•◡•) / _bot
ставлю assume eax:none
и вылетает вообще нелогичная ошибка
bilka00
Господа вопрос по винапи
могу ли я использовать провайдер инициализированый через CryptAcquireContext в нескольких разных потоках одновременно (буквально могу ли использовать в многопоточных приложениях один вызов иниицализации, установки ключей и одновременно множественный вызов cryptDecrypt)
Aiwan \ (•◡•) / _bot
bilka00
Ну вопрос в том не будет ли конфликтов в таком случае между потоками, малоли как оно там реализовано
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot