История изменений
Исправление jpegqs, (текущая версия) :
Кстати и ARM и x86 используют MOP Fusion сливая некоторые команды в одну
x86 только популярные инструкции изменения/сравнения счётчика цикла сливает с прыжком. Скорее всего потому, что на заре x86 была специальная инструкция loop, что делает декремент (e)cx и прыжок. Но компиляторы не хотели её использовать. Поэтому пришлось это делать на уровне процессора.
Arm supports a number of macro-op fusion operations in their recent microarchitectures.
И это не ARM, а именно AArch64, который мне НЕ нравится.
movw + movt
Это команды для загрузки константы в регистры. Длина команды ограничена 32-бит, поэтому для загрузки длинной константы приходится выкручиваться. Так себе fusion, всего лишь костыль. В 32-бит ARM загружали константы через чтение через PC со смещением, занимало те же 8 байт, но одну команду. Видимо решили так сделать чтобы избежать критики, что загрузка констант стала медленнее. По сути очередной пример, что когда прижимает, то RISC изменяет своим принципам и делает шаг в сторону CISC.
aese + aesmc aesd + aesimc
Какие-то редкие команды для AES, видимо кому-то очень упёрлось шифрование. Скорее всего и задумывалось для продолжения предыдущей команды, но все операнды не влезли.
Ваше возражение звучит так, будто у ARM и x86 десятки, если не сотни MOP fusion, а на деле RISC-V уже планирует добавить больше чем у обоих конкурентов вместе взятых. А разговоров то было.
Исходная версия jpegqs, :
Кстати и ARM и x86 используют MOP Fusion сливая некоторые команды в одну
x86 только популярные инструкции изменения/сравнения счётчика цикла сливает с прыжком. Скорее всего потому, что на заре x86 была специальная инструкция loop, что делает декремент (e)cx и прыжок. Но компиляторы не хотели её использовать. Поэтому пришлось это делать на уровне процессора.
Arm supports a number of macro-op fusion operations in their recent microarchitectures.
И это не ARM, а именно AArch64, который мне НЕ нравится.
movw + movt
Это команды для загрузки константы в регистры. Длина команды ограничена 32-бит, поэтому для загрузки длинной константы приходится выкручиваться. Так себе fusion, всего лишь костыль. В 32-бит ARM загружали константы через чтение через PC со смещением, занимало те же 8 байт, но одну команду. Видимо решили так сделать чтобы избежать критики, что загрузка констант стала медленнее. По сути очередной пример, что когда прижимает, то RISC изменяет своим принципам и делает шаг в сторону CISC.
aese + aesmc aesd + aesimc
Какие-то редкие команды для AES, видимо кому-то очень упёрлось шифрование. Скорее всего и задумывалось для продолжения предыдущей команды, но все операнды не влезли.