Можете ли вы добавить два 64-битных целых в x86? - PullRequest
3 голосов
/ 14 апреля 2019

«Обычные» регистры в x86 имеют размер только 32-битные, поэтому вы не можете использовать их для добавления двух 64-битных целых чисел (если вы не выполните сложение в несколько этапов).

НоВы можете добавить два 64-битных целых по-другому, используя другой способ, например, используя SSE?

1 Ответ

9 голосов
/ 14 апреля 2019

В 32-битных режимах есть четыре способа сделать это:

  • самый рекомендуемый способ - выполнить сложение в два этапа с add и затем adc в регистрах общего назначения
  • если у вашего процессора есть FPU, вы также можете использовать x87 FPU для выполнения 64-битной арифметики. Поскольку x87 FPU содержит 64-битную мантиссу, вычисления на 64-битных целых числах являются точными до тех пор, пока вы не превысите 64-битный диапазон.
  • если ваш процессор поддерживает как минимум SSE2, вы можете выполнить 64-битную арифметику для регистров MMX
  • если ваш процессор поддерживает как минимум SSE2, вы также можете выполнить 64-битную арифметику с регистрами XMM

Самым быстрым из них для одной 64-битной операции, вероятно, является подход add / adc. Для нескольких операций SSE2 будет самым быстрым, затем MMX (если вы можете жить со штрафом за переход и неспособностью использовать x87 FPU в состоянии MMX) и, наконец, x87.

В 64-битном режиме (длинный режим) вы можете дополнительно просто выполнить 64-битную арифметику с 64-битными регистрами общего назначения.

Дайте мне знать, если вам нужны подробности или примеры.

...