diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-17 12:17:42 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-17 12:17:42 +0000 |
commit | 3d77964b5739146a5285d10543df7b51e066c239 (patch) | |
tree | 06206f8ff72629ef637bec920657d7f21591f65b /c_compiler/src | |
parent | b23a8f1cedf222b583bc2fedf66b80d2e3c0d076 (diff) | |
download | Compiler-3d77964b5739146a5285d10543df7b51e066c239.tar.gz Compiler-3d77964b5739146a5285d10543df7b51e066c239.zip |
Working functions
Diffstat (limited to 'c_compiler/src')
-rw-r--r-- | c_compiler/src/bindings.cpp | 5 | ||||
-rw-r--r-- | c_compiler/src/function.cpp | 2 | ||||
-rw-r--r-- | c_compiler/src/statement.cpp | 9 |
3 files changed, 4 insertions, 12 deletions
diff --git a/c_compiler/src/bindings.cpp b/c_compiler/src/bindings.cpp index dda2ddc..05bd288 100644 --- a/c_compiler/src/bindings.cpp +++ b/c_compiler/src/bindings.cpp @@ -28,11 +28,6 @@ void VariableStackBindings::setStackPosition(int stack_counter) stack_counter_ = stack_counter; } -void VariableStackBindings::resetExpressionStack() -{ - expression_stack_ = -4; -} - void VariableStackBindings::nextExpressionStackPosition() { expression_stack_ -= 4; diff --git a/c_compiler/src/function.cpp b/c_compiler/src/function.cpp index 4fb9d95..6f5ba7d 100644 --- a/c_compiler/src/function.cpp +++ b/c_compiler/src/function.cpp @@ -83,7 +83,7 @@ VariableStackBindings Function::printAsm(VariableStackBindings bindings) const // Prints the asm for the compound statement in the function statement_->printAsm(bindings); - std::cout << "\tmove\t$sp,$fp\n\tlw\t$31," << memory_needed-4 << "($sp)\n\tlw\t$fp," + std::cout << "0:\n\tmove\t$sp,$fp\n\tlw\t$31," << memory_needed-4 << "($sp)\n\tlw\t$fp," << memory_needed-8 << "($sp)\n\taddiu\t$sp,$sp," << memory_needed << "\n\tjr\t$31\n\tnop\n"; diff --git a/c_compiler/src/statement.cpp b/c_compiler/src/statement.cpp index e4b30ff..9c0db49 100644 --- a/c_compiler/src/statement.cpp +++ b/c_compiler/src/statement.cpp @@ -173,10 +173,7 @@ VariableStackBindings ExpressionStatement::printAsm(VariableStackBindings bindin next_statement_->printAsm(bindings); if(expression_ != nullptr) - { - bindings.resetExpressionStack(); expression_->printAsm(bindings); - } return bindings; } @@ -222,10 +219,10 @@ VariableStackBindings JumpStatement::printAsm(VariableStackBindings bindings) co if(next_statement_ != nullptr) next_statement_->printAsm(bindings); - if(expression_ != nullptr) { - bindings.resetExpressionStack(); + if(expression_ != nullptr) expression_->printAsm(bindings); - } + + std::cout << "\tj\t0f\n"; return bindings; } |