Упростить эту маску, чтобы сделать ее быстрее?

Я пытаюсь сделать код 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 }

-1

Решение

Это, вероятно, быстрее использовать

 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мс?)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]