aboutsummaryrefslogtreecommitdiff
path: root/compiler/codegen.cup
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/codegen.cup')
-rw-r--r--compiler/codegen.cup15
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/codegen.cup b/compiler/codegen.cup
index 67a401c..bf20a8b 100644
--- a/compiler/codegen.cup
+++ b/compiler/codegen.cup
@@ -142,6 +142,21 @@ fn generate_expr_into_rax(node: Node*) {
emit_asm(" pop rbx\n");
emit_asm(" sub rax, rbx\n");
+ } else if (node.typ == AST_LSHIFT) {
+ generate_expr_into_rax(node.d.binary.rhs);
+ emit_asm(" push rax\n");
+ generate_expr_into_rax(node.d.binary.lhs);
+ emit_asm(" pop rcx\n");
+ emit_asm(" shl rax, cl\n");
+
+
+ } else if (node.typ == AST_RSHIFT) {
+ generate_expr_into_rax(node.d.binary.rhs);
+ emit_asm(" push rax\n");
+ generate_expr_into_rax(node.d.binary.lhs);
+ emit_asm(" pop rcx\n");
+ emit_asm(" shr rax, cl\n");
+
} else if (node.typ == AST_DIV) {
generate_expr_into_rax(node.d.binary.rhs);
emit_asm(" push rax\n");