О том как работает fetch конвейер в мануалах TI написано скупо и поверхностно. Буфер IB наполняется со скоростью 4 байта, а опустошается 1-6 байт. Смотрю в Pipeline Stall Analyzer по ходу программы IB начинает опустошаться и возникает IBQ stall причем никакими страшными 5 и 6 байтными командами и вызовами и циклами не пахнет. Отсюда возникают вопросы: При каких условиях перестает наполняться очередь и при каких вознобновляется. Вот для примера кусочек кода:
Код
_func
NOP_16 || NOP
NOP_16 || NOP_16
NOP_16 || NOP
NOP_16 || NOP
NOP_16 || NOP
NOP_16 || NOP_16
NOP_16
NOP_16 || NOP
NOP_16
NOP_16 || NOP
NOP_16 || NOP_16
NOP_16 || NOP
NOP_16 || NOP_16
NOP_16 || NOP_16
NOP_16 || NOP_16
RET
В процессе выполнения последние 2 инструкции перед RET оказываются отсеченными IBQ stall. Почему? Никаких видимых препятствий для наполнения буфера нет.