Aidar
https://ideone.com/LVL2zx
Aidar
как это объяснить?
Anatoly
Aidar
а лол
Aidar
забыл про это
Ignat
в каком смысле норма?
Ignat
я разрешаю
vladislav
от задачи зависит
Ignat
но вообще в общем случае не гарантируется, что оно вообще есть
Ignat
This declaration is conditionally-supported and implementation defined, meaning that it may not be present and, even when provided by the implementation, it does not have a fixed meaning.
Stanislav
не нужно, есть интринсики
Berkus
есть интринсики и отдельные файлы на асме, инлайн непортабельно и очень портит оптимизации (весь ассмеблер должен быть volatile чтобы не сломаться)
Ignat
можно подумать, интринсики — портабельно
Berkus
вообще-то день
kitsu
Ioann_
Я вас удивлю, некоторые вещи компилятор делает намного лучше людей.
Например, страшно представить, сколько времени надо асм профессионалу, чтобы оптимально реализовать
int foo(int i) { return i % 3; }
А вот компилятор делает это за микросекунды:
movsxd rax, edi
imul rcx, rax, 1431655766
mov rdx, rcx
shr rdx, 63
shr rcx, 32
add ecx, edx
lea ecx, [rcx + 2*rcx]
sub eax, ecx
ret
И я не поверю, что есть асм мастера, которые помнят все подобные константы и хитрости наизусть
Вполне реально, все эти чит фишки давно собраны в одном месте.
Ioann_
Ты просто недооцениваешь мастеров асмы - там ребята в уме проксорить дворды могут на изи. Но я конечно, не о себе говорю. Там ребятам не надо же стандарты языка ++ штудировать, чтобы на грабли не встать.
Ioann_
А что продолжать, дураки там одни - ясно же. FASM, MASM - давно вымерли, и уже занесены в the red book.
kitsu
Во-первых как это относится к моему вопросу
kitsu
а во-вторых подобные трюки описаны во всех прекрасах в книжках по асму
kitsu
Оптимизировать - здорово конечно, но асм этим не ограничивается, к примеру нужно что-то platform-specific получать. Например недокументированные фичи ms win
Kirill
Ioann_
Да речь не только про оптимизации. Виталий пишет что код на асме ужасен и все надо переделывать после. Но это верно только если из всей команды, никто на асме и не пишет.
Vsevolod
код на асме ужасен в любом случае
Kirill
у меня на позопрошлой работе писали на асме местами под ембеддед
Kirill
и... виталий прав)
Vsevolod
потому что всякий loop unrollment руками - это ужасно, уже не говоря о том, что вместо няшных переменных приходится держать в голове, где какой регистр уже используется
Nikita
Есть один адекватный юзкейс асмописи — появление нового instruction set, который ещё не освоили компиляторы
Kirill
есть юзкейс - ты пишешь компилятор. там да, нужно. в остальном чем более абстрактно описывается поведение, тем больше свободы компилятору, а он умнее человека уже лет как нцать
Vsevolod
ну и интриниски, по сути, заменяют нужду в ассемблере
Vsevolod
еще бы attribute target поддерживалось долбанным шлангом...
Ioann_
Nikita
Vsevolod
а gcc даже умеет рантайм диспатчинг и ifunc для c++
Vsevolod
грамотно и красиво или быстро?
Vsevolod
это в случае ассемблера противоречит друг другу
Ioann_
Но не нужно
Так я с этим не факт что спорю. Я же пишу, Виталий и Всеволод пишут, что код на асме - ужасен. Но я так не считаю, о том то и речь.
Alexander "SonnySlave"
Ioann_
То есть понятно, что когда в команде никто asm не знает, писать на нем не надо. И даже если знают - тоже, не факт что надо. Просто не верно говорить что код на asm ужасен, особенно, если кресты это оная библия для многих.
Vsevolod
а то есть у меня быстрый код - вот такой: https://github.com/vstakhov/rspamd/blob/master/src/libcryptobox/curve25519/avx.S
Vsevolod
он вжух вообще
Vsevolod
но без бутылки его даже читать больно
KosBeg
он вжух вообще
MMX и XMM, это ужасно!
так ещё и AT&T синтаксис
Vsevolod
mmx?
Vsevolod
там avx инструкции в большинстве своем
KosBeg
особо не смотрел, но выглядит страшно
Vsevolod
ну там все циклы развернуты, например
Alexander "SonnySlave"
Alexander "SonnySlave"
я же сомневаюсь, что прям всё это руками написано (я надеюсь на это)
Vsevolod
для вжух
Vsevolod
это китаец Бернштейна писал, а я портировал с qhasm
Alexander "SonnySlave"
ну я понимаю 😊 а почему именно на асме решили писать?
Vsevolod
Бернштейн так любит :)
Alexander "SonnySlave"
ааа, ну разве что
Vsevolod
по сравнению с сишной реализацией рядом (donna-c64) вышло 7k rps с ядра вместо 6k rps :)
Vsevolod
но сишная реализация не использует avx...
Alexander "SonnySlave"
а почему не использует? компилятор говно?
Alexander "SonnySlave"
или компилят с неправильными флагами?
Vsevolod
потому что я собираю пакеты для всех
Vsevolod
и либо рантайм диспатчинг руками, либо максимум sse2 для x86_64
kitsu
Vsevolod
потому что у меня есть пользователи с p4, например
Alexander "SonnySlave"
Alexander "SonnySlave"
делать предсборки под разные архитектуры и всё
Vsevolod
ну да, тоже можно, только это не работает
Alexander "SonnySlave"
Vsevolod
например, avx может светиться в cpuid, а при запуске падать
Vsevolod
rdrand - те же яйца
Vsevolod
сочетаний архитектур очень много
Alexander "SonnySlave"
не совсем понимаю, как ты тогда выбираешь, кому какой кусок АСМ отдавать
Vsevolod
хотя мысля делать отдельные сборки для avx/avx2 была, да
Alexander "SonnySlave"
Vsevolod
https://github.com/vstakhov/rspamd/blob/master/src/libcryptobox/cryptobox.c#L136 - да вот так
Vsevolod
с setjmp и прочими кишками
Alexander "SonnySlave"
надеюсь, что я этого никогда не встречу в своей жизни 😊
Berkus