[an error occurred while processing this directive]
|
Есть некоторые команды, которые действительно "занимают" юнит - это в основном плавучка с IEEE double. Там юнит не может за 1 такт вычитать все необходимые данные (больно длинны они, а за 1 такт умеем принимать только 2 данных по 32 бита), по-этому ему приходится находиться в "отключке" от 2 до 4 тактов. Если в это время выполнить команду на этом-же юните - вроде NOP получается.
Еще один конфликт - использование шины записи юнита двумя командами одновременно (в одном такте юнит может писать только в одно место) например ADDSP .L1 а после трех нопов ADD .L1. Это конфликт - так как и ADDSP и ADD требуют в одно и тоже время записи своих результатов. По моим наблюдением результат первой команды пишется, результат второй - нет.
Третий конфликт, не показываемый компилером - запись двумя юнитами на одном такте в один регистр. Например ADDSP .L1 A1,A2,A3 и через три такта MV .D1 A4,A3. Тут я закономерности не выявлял :), так как это явная и бросающаяся в глаза ошибка.
E-mail: info@telesys.ru