Я хочу реализовать операции push и pop в сборке LLVM.
Инструкция alloca не соответствует концепции стека, push и pop.
Примеры:
PUSH
x86
subl $4, %esp
movl %eax, 0(%esp)
или
pushl %eax
mips
addi $sp, $sp, -4
sw $t2, 0($sp)
POP
x86
movl 0(%esp), %eax
addl $4, %esp
или
popl %eax
mips
lw $t2, 0($sp)
addi $sp, $sp, 4
EDIT 1:
Мне нужна платформа-независимое решение.
Первый
Я хочу использовать вершину стека для хранения временных объектов.
Выражение "a * b + c * d +e * f "нужно будет хранить результат трех умножений, операнды являются большими объектами класса, а операторы перегружены.Операция «a * b» будет принимать много инструкций, «a» и «b» не могут быть изменены во время умножения, это означает, что объект, который будет получен из «a * b», не может использовать то же место памяти «a» или"b".
В коде на гипотетическом языке
call_function( &Object(), &(a + b) );
"& Object ()" создаст объект в стеке и получит его указатель, указатель является параметром дляФункция и объект будут удалены после возврата функции.
Секунда
Я хочу оптимизировать рекурсивные функции.Я хочу преобразовать рекурсивную функцию в итеративную функцию и использовать стек для передачи данных, которые будут использоваться позже.Я не могу использовать массив, потому что я не знаю наибольшего числа рекурсивных вызовов, которые будут в стеке.