Как отключить автоматическое изменение порядка команд MIPS-GCC? - PullRequest
6 голосов
/ 28 октября 2010

После этого вопроса: Странное поведение ассемблера MIPS с инструкцией перехода (и ссылки) У меня есть рабочий инструментарий сборки GNU для моего проекта MIPS с одним циклом (без слота задержки ветвления!). Я действительно предпочел бы написать на C, хотя. Сам код, сгенерированный из компилятора, действительно выполняется, но мне приходится вручную редактировать источник сборки каждый раз, так как GCC по какой-то причине предпочитает автоматически переупорядочивать сами инструкции ветвления. Я не хочу взламывать это с помощью скрипта, чтобы выяснить, когда нужно переупорядочить ветви снова.

Есть ли возможный способ обойти это? GCC по какой-то причине генерирует такой код:

.set noreorder
...
jr $ra <-- GCC reordered for me!
addi $v0, $v0, 10 <--
...
.set reorder

где я действительно хочу накормить ассемблер примерно так:

.set noreorder
addi $v0, $v0, 10
jr $ra

Ответы [ 2 ]

7 голосов
/ 15 ноября 2012

передать флаги -mips1 и -fno-delayed-branch в gcc.

3 голосов
/ 28 октября 2010

Я не думаю, что его можно отключить, поскольку слоты задержки присутствуют во всех вариантах MIPS. Я думаю, что было бы намного лучше, если бы вы внедрили слоты задержки в свой эмулятор. Это также приблизит его к реальному оборудованию.
За исключением этого, вы, вероятно, можете исправить gcc, чтобы прекратить попытки заполнить слоты задержки.

...