История изменений
Исправление Stanson, (текущая версия) :
Ну так посмотри что в асме получается, делов-то.
А вообще с асмовыми вставками для MIPS надо аккуратно, потому что у MIPS есть особенность связанная с конструкцией конвейера - если MIPS выполняет команду перехода, то будет выполнена и следующая за ней команда, так что можно очень прилично проколоться. Возможно современный gcc это отдупляет и для ассемблерных вставок, но когда-то давно такие штуки приходилось проверять глазками.
Плюс ещё интенсивное использование регистров для аргументов функций и локальных переменных. В общем, c MIPS’ом надо точно знать что ты делаешь и как это всё работает.
Кстати, в твоём коде, на asm( "SW $sp,%0" : "=m" (sp) )
можно обломаться, потому что sp может оказаться регистровой переменной.
Наверно можно попробовать «размещать объекты» в памяти выделенной alloca, если хочется именно на стеке и точно знать где.
Исправление Stanson, :
Ну так посмотри что в асме получается, делов-то.
А вообще с асмовыми вставками для MIPS надо аккуратно, потому что у MIPS есть особенность связанная с конструкцией конвейера - если MIPS выполняет команду перехода, то будет выполнена и следующая за ней команда, так что можно очень прилично проколоться. Возможно современный gcc это отдупляет и для ассемблерных вставок, но когда-то давно такие штуки приходилось проверять глазками.
Плюс ещё интенсивное использование регистров для аргументов функций и локальных переменных. В общем, c MIPS’ом надо точно знать что ты делаешь и как это всё работает.
Кстати, в твоём коде, на asm( "SW $sp,%0" : "=m" (sp) )
можно обломаться, потому что sp может оказаться регистровой переменной.
Наверно можно попробовать «размещать объекты» в памяти выделенной alloca, если хочется именно на стеке.
Исходная версия Stanson, :
Ну так посмотри что в асме получается, делов-то.
А вообще с асмовыми вставками для MIPS надо аккуратно, потому что у MIPS есть особенность связанная с конструкцией конвейера - если MIPS выполняет команду перехода, то будет выполнена и следующая за ней команда, так что можно очень прилично проколоться. Возможно современный gcc это отдупляет и для ассемблерных вставок, но когда-то давно такие штуки приходилось проверять глазками.
Плюс ещё интенсивное использование регистров для аргументов функций и локальных переменных. В общем, c MIPS’ом надо точно знать что ты делаешь и как это всё работает.
Наверно можно попробовать «размещать объекты» в памяти выделенной alloca, если хочется именно на стеке.