Size: a a a

Ассемблер

2021 September 03

E

Entusiast in Ассемблер
А можно в Intel синтаксисе? А то в некоторых местах непонятно
источник

d

disba1ancer in Ассемблер
сложно
источник

d

disba1ancer in Ассемблер
заменил
источник

d

disba1ancer in Ассемблер
что скажешь?
источник

E

Entusiast in Ассемблер
Уже кое-что наметил, сейчас до конца разберу
источник

d

disba1ancer in Ассемблер
а теперь трюк если у нас есть собственный memcpy на асме: просто послать опцию -ftree-loop-distribute-patterns
источник

E

Entusiast in Ассемблер
И что это даст?
источник

d

disba1ancer in Ассемблер
gcc умеет детектить места где подходят стандартные memcpy и ему подобные функции, потому он в таких местах просто будет вставлять вызовы memcpy, просто -ffreestanding отключает ту опцию
источник

E

Entusiast in Ассемблер
Ну вставит неоптимизированный memcpy из CRT
Можно же в коде так же само прописать
источник

d

disba1ancer in Ассемблер
но если у тебя своя crt то он возьмёт её оттуда, для меня как раз подходящий вариант
источник

d

disba1ancer in Ассемблер
можно конечно и вручную написать, но иногда хочется на стеке большую структуру нулями проинитить, для этого существует синтаксис, а компилятор встроит, к примеру, memset
источник

d

disba1ancer in Ассемблер
учитывая что gcc для не выровненного случая генерирует movsb без rep получится быстрее если рассматривать только случай когда указатели имеют одинаковое выравнивание, а остальное через rep movsb
источник

d

disba1ancer in Ассемблер
а да если попросить see то асм аналогичный, только основная часть копирует по 16 байт через sse
источник

E

Entusiast in Ассемблер
Да тут много чего можно учитывать
источник

d

disba1ancer in Ассемблер
ну для memcpy можно составить таблицы случаев, могу даже попробовать накатать такую
источник

d

disba1ancer in Ассемблер
memcpy cases
dest ptr align ->  4    2    1
ptrs dif align
4                  4    4*   4*
2                  2    2    2*
1                  1    1    1

* - block copy after copy of non aligned part
вот такая табличка
источник

d

disba1ancer in Ассемблер
в общем если вычесть указатели и посмотреть на что выровнена эта величина, то это укажет нам на подходящий алгоритм копирования, останется только перед его выполенением скопировать части которые не выровнены
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
лучше бы скрином. это точно табличка?
источник

d

disba1ancer in Ассемблер
у меня скрина нет я в текстовом редакторе накидал, хотя можно в вордпаде попробовать
источник

d

disba1ancer in Ассемблер
в экран не влезло..
источник