Size: a a a

Ассемблер

2021 September 02

d

disba1ancer in Ассемблер
и речь уже не про rep stos, а про rep movs
источник

A

Aleksandr in Ассемблер
stosd. и для выравнивания можно stosb
источник

d

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

d

disba1ancer in Ассемблер
я уже к memcpy перешёл, ещё будет головная боль с memmove
источник

A

Aleksandr in Ассемблер
с memmove нужно понять с какого конца копировать, а дальше то же самое
источник

d

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

A

Aleksandr in Ассемблер
тогда печаль, увы
источник

d

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

d

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

A

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

d

disba1ancer in Ассемблер
хм...
источник
2021 September 03

s

s54816 in Ассемблер
Misaligned memory operands handled efficiently

On the Sandy Bridge, there is no performance penalty for reading or writing misaligned memory operands, except for the fact that it uses more cache banks so that the risk of cache conflicts is higher when the operand is misaligned. Store-to-load forwarding also works with misaligned operands in most cases.

Это десять лет назад.
источник

楽園松本 in Ассемблер
Christine ты здесь?
источник

C

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

C

Cofeefee in Ассемблер
This is a library of optimized subroutines coded in assembly language. The functions in this library can be called from C, C++ and other compiled high-level languages. Supports many different compilers under Windows, Linux, BSD and Mac OS X operating systems, 32 and 64 bits. This library contains faster versions of common C/C++ memory and string functions, fast functions for string search and string parsing, fast integer division and integer vector division, as well as several useful functions not found elsewhere.
источник

E

Entusiast in Ассемблер
А почему не дописал про лицензию?
Как раз в этом и проблема была использования его библиотеки
источник

d

disba1ancer in Ассемблер
поглядел как генерирует gcc memcpy в случае кода не может его вызвать (-ffreestanding), выдаёт такое:
  .file  "memop.c"
 .intel_syntax noprefix
 .text
 .align 16
 .globl  memcpy
 .type  memcpy, @function
memcpy:
 push  ebp
 mov  ebp, esp
 push  edi
 push  esi
 push  ebx
 sub  esp, 4
 mov  ebx, DWORD PTR [ebp+16]
 mov  ecx, DWORD PTR [ebp+8]
 mov  esi, DWORD PTR [ebp+12]
 test  ebx, ebx
 je  .L2
 mov  eax, ecx
 lea  edi, [ebx-1]
 or  eax, esi
 mov  DWORD PTR [ebp-16], edi
 test  al, 3
 jne  .L3
 cmp  edi, 2
 jbe  .L3
 mov  edi, ebx
 mov  eax, esi
 mov  edx, ecx
 and  edi, -4
 add  edi, esi
 .align 16
.L4:
 mov  ecx, DWORD PTR [eax]
 add  eax, 4
 add  edx, 4
 mov  DWORD PTR [edx-4], ecx
 cmp  eax, edi
 jne  .L4
 mov  ecx, DWORD PTR [ebp+8]
 mov  eax, ebx
 and  eax, -4
 lea  edx, [ecx+eax]
 add  esi, eax
 cmp  ebx, eax
 je  .L2
 movzx  ebx, BYTE PTR [esi]
 mov  BYTE PTR [edx], bl
 mov  ebx, DWORD PTR [ebp-16]
 sub  ebx, eax
 je  .L2
 movzx  eax, BYTE PTR [esi+1]
 mov  BYTE PTR [edx+1], al
 cmp  ebx, 1
 je  .L2
 movzx  eax, BYTE PTR [esi+2]
 mov  BYTE PTR [edx+2], al
.L2:
 add  esp, 4
 mov  eax, ecx
 pop  ebx
 pop  esi
 pop  edi
 pop  ebp
 ret
 .align 16
.L3:
 add  ebx, ecx
 mov  edi, ecx
 .align 16
.L6:
 movsb
 cmp  ebx, edi
 jne  .L6
 add  esp, 4
 mov  eax, ecx
 pop  ebx
 pop  esi
 pop  edi
 pop  ebp
 ret
 .size  memcpy, .-memcpy
 .ident  "GCC: (GNU) 11.2.0"
источник

E

Entusiast in Ассемблер
Это на O3??
источник

d

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

d

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