aboutsummaryrefslogtreecommitdiffhomepage
path: root/codegen.c
diff options
context:
space:
mode:
Diffstat (limited to 'codegen.c')
-rw-r--r--codegen.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/codegen.c b/codegen.c
index 92a8619..f717c25 100644
--- a/codegen.c
+++ b/codegen.c
@@ -174,6 +174,13 @@ void codegen_binary_expr(CodeGen* g, AstNode* ast, GenMode gen_mode) {
printf(" mov rax, rdx\n");
} else if (ast->node_op == TokenKind_or) {
printf(" or rax, rdi\n");
+ } else if (ast->node_op == TokenKind_lshift) {
+ printf(" mov rcx, rdi\n");
+ printf(" shl rax, cl\n");
+ } else if (ast->node_op == TokenKind_rshift) {
+ // TODO: check if the operand is signed or unsigned
+ printf(" mov rcx, rdi\n");
+ printf(" sar rax, cl\n");
} else if (ast->node_op == TokenKind_eq) {
printf(" cmp rax, rdi\n");
printf(" sete al\n");