Как стать автором
Обновить

Восхождение на Эльбрус — Разведка боем. Техническая Часть 2. Прерывания, исключения, системный таймер

Время на прочтение 8 мин
Количество просмотров 7K
Всего голосов 36: ↑34 и ↓2 +32
Комментарии 4

Комментарии 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" инструкция? Зачем она в приведенных макросах? Зачем ей аргумент?

Это «No OPeration» инструкция? Зачем она в приведенных макросах? Зачем ей аргумент?

Да это пустая операция, она используется например чтобы освободить конвеер. В Эльбрусе кроме этого используется длинное слово, то есть одновременно выполняются несколько инструкций, по идее компилятор сам расставляет nop ы, но в ассемблере естественно нужно писать ручками. Аргумент означает сколько nop ов будет выполнено. просто сокращение записи, чтобы не писать 3 nop а подряд.
Еще вычитал, что на встретив различные операции, процессор может забивать конвеер nop ами, максимально, а если указать ему параметр то он будет вставлять ровно столько команд (тактов простаивать) сколько указано.

Еще интересно разбирались ли вы с эльбрусовским защищенным режимом? Будете ли пробовать внедрять его поддержку в Embox?
Было бы очень интересно почитать про него отдельную статью.

Да, конечно, планируется работа и с защищенном режимом, и с тегированной памятью, и с 128 битными указателями, у Эльбруса еще много фишек интересных. Но пока делаем стандартные вещи, для того чтобы уже можно было достаточно просто использовать в каких то практических задачах.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий