Я пытаюсь сделать код C ++ добавления 512 бит (большой int), преобразованный в masm встроенный ассемблер в Visual Studio.
Перенос очень важен, так как C ++ показан в ссылке ниже. Мне нужно представить C ++ в masm inline-ассемблере в Visual Studio.
Я пытался сделать это в маске, но это медленно, это заняло всего 700 мс для моего кода маску
C ++ код здесь.
C ++ занимает 300 мс для сложения
Код Масмы
_asm {
mov edx, summand
mov eax, [edx]
mov ebx, this
add eax, [ebx]
mov [ebx], eax
mov ecx, 4
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
mov ecx, 8
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
mov ecx, 12
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
}
Это, вероятно, быстрее использовать
mov eax, [edx + 4]
adc eax, [ebx + 4]
mov [ebx + 4], eax
вместо
mov ecx, 4
mov eax, [edx + ecx]
adc eax, [ebx + ecx]
mov [ebx + ecx], eax
и то же самое для 8 и 12. Но я был бы удивлен, если ваш asm-код действительно медленнее, чем код C ++ в вашей ссылке. Может случиться так, что использование блока asm отключает некоторые оптимизации в другой части функции. Вам нужно будет посмотреть на сгенерированный ассемблерный код для всей функции, чтобы выяснить это. (А какие у тебя 700мс?)
Других решений пока нет …