?

Log in

No account? Create an account

Previous Entry | Next Entry

Как работает компилятор gcc - это просто сказка, о его архитектуре легенды складывают. Особенно меня удивляет его поведение в части их взаимопонимания с процессором. Вот свеженарытый пример:
Компилятор говорит "у меня есть два спец-регистра: временный регистр r0, в который можно не задумываясь писать что угодно, при условии использования этого в ближайшие пару тактов и нулевой регистр r1, который всегда можно использовать без предварительного обнуления".
Контроллер говорит "у меня есть команды аппаратного умножения 8*8=16, которые на вход принимают пару верхних регистров, а результат складывают в r1:r0".
В итоге если с r0 всё вроде понятно (если не использовать временный регистр, когда работаешь с умножением), то с r1 случается косяк. Как следствие, всегда после использования аппаратного умножения необходимо обнулять r1, дабы не снести компилятору крышу.