Преобразование кода C++ в сборку для SPIM

У меня большие проблемы с тем, чтобы мой скомпилированный файл сборки работал на SPIM. В основном я хочу написать файл С++, а затем создать файл .s, который я могу открыть в SPIM без ошибок. Это означает, что сборка должна быть в MIPS32 ABI с использованием инструкций MIPS I (некоторые MIPS II). Как мне это сделать? Сейчас я использую g++, но у меня возникают серьезные ошибки, когда я пытаюсь запустить файл в SPIM. Я работаю над MAC OSx 10.6.3 и удаленно компилирую на Linux-машине. Есть ли специальный компилятор, который облегчит мне задачу?


person Dan Snyder    schedule 23.06.2010    source источник
comment
Извините, я действительно не знаком с этим термином. Я компилирую с помощью mipseb-linux-g++. Я делаю это на Linux-машине, MIPS 3k.   -  person Dan Snyder    schedule 23.06.2010


Ответы (1)


Дайте компилятору опцию -S, он сгенерирует ассемблерный код. Затем вам придется отредактировать код, чтобы SPIM его принял.

Вам также понадобится g++ -S -fno-delayed-branch, если вы включите оптимизацию, например -O1 или -Og, для более читаемого кода. Обычно SPIM настроен для имитации MIPS без слотов задержки ветвления, но gcc будет предполагать, что инструкция после ветвления выполняется, даже если она была принята. -fno-delayed-branch заставляет gcc заполнить все слоты задержки ветвления с помощью nop.

Еще одна полезная опция — -fverbose-asm, чтобы gcc добавлял комментарии с именем переменной C каждого операнда.

Вам следует избегать использования библиотек C++, таких как std::vector, которые компилируются в большое количество дополнительного кода по сравнению с локальными массивами, особенно без оптимизации, если только вам действительно не нужны эти функции.

person zvrba    schedule 12.07.2010
comment
Кстати, C++ требует значительной поддержки со стороны других библиотек во время выполнения. Попробуйте сделать это сначала с помощью обычной программы на C. - person zvrba; 13.07.2010