Комментарии 4
Спасибо за интересную серию.
Заметил (еще с первой статьи), что в макросах с assembler'ными вставками используются nop'ы с численным аргументом:
#define E2K_DONE \ do { \ asm volatile ("{nop 3} {done}" ::: "ctpr3"); \ } while (0)
#define E2K_ASM_FLUSH_CPU \ flushr; \ nop 2; \ flushc; \ nop 3;
Это "No OPeration" инструкция? Зачем она в приведенных макросах? Зачем ей аргумент?
0
Это «No OPeration» инструкция? Зачем она в приведенных макросах? Зачем ей аргумент?
Да это пустая операция, она используется например чтобы освободить конвеер. В Эльбрусе кроме этого используется длинное слово, то есть одновременно выполняются несколько инструкций, по идее компилятор сам расставляет nop ы, но в ассемблере естественно нужно писать ручками. Аргумент означает сколько nop ов будет выполнено. просто сокращение записи, чтобы не писать 3 nop а подряд.
Еще вычитал, что на встретив различные операции, процессор может забивать конвеер nop ами, максимально, а если указать ему параметр то он будет вставлять ровно столько команд (тактов простаивать) сколько указано.
+1
Еще интересно разбирались ли вы с эльбрусовским защищенным режимом? Будете ли пробовать внедрять его поддержку в Embox?
Было бы очень интересно почитать про него отдельную статью.
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Восхождение на Эльбрус — Разведка боем. Техническая Часть 2. Прерывания, исключения, системный таймер