Почему процессор должен реализовывать инструкцию вычитания? Почему компиляторы не могут изменить вычитание на сложение с дополнением до 2?
инструкция вычитания в процессорах
Ответы (2)
Потому что, если бы каждое вычитание должно было состоять из двух инструкций (отрицание и сложение), вы бы потратили впустую много трафика памяти (потому что код стал бы больше), пространство в кэше (потому что код был бы больше) и время декодирования инструкции (потому что было бы быть больше инструкций для декодирования), для небольшого выигрыша в простоте процессора. Совершенно не стоит.
person
Gareth McCaughan
schedule
01.04.2011
Примечание. Если компилятор знает, что ЦП выполняет сложение или вычитание быстрее, и код использует константу для любого из операндов, ЦП может выполнить для вас отрицание константы и переключить операнд. Таким образом,
x = y - 5
можно преобразовать в сборку, эквивалентную x = y + -5
, если ЦП лучше справляется со сложением, чем с вычитанием. Но да, в общем случае изменение x = y - z
на x = y + (-z)
будет в лучшем случае эквивалентной скоростью, а в худшем случае будет страдать от всех проблем, упомянутых в этом ответе, для тривиального выигрыша (ЦП все еще может выбрать выполнение вычитания как отрицание, за которым следует добавление после все).
- person ShadowRanger; 14.10.2016
Сложение и вычитание используются настолько, что имеет смысл их встроить. Это компромисс между наличием большего количества собственных инструкций, требующих меньшего количества циклов ЦП, и более быстрыми циклами ЦП (больше циклов в секунду).
person
m4tt1mus
schedule
01.04.2011