From e5f2fac8c5ae5a1b74335816836872c2e24904e6 Mon Sep 17 00:00:00 2001 From: Mustafa Quraish Date: Mon, 7 Feb 2022 23:07:57 -0500 Subject: [cup] Add `>>` and `<<` operators, `fork()` buildin and `SYS_execve` --- compiler/codegen.cup | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'compiler/codegen.cup') 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"); -- cgit v1.2.3