diff options
Diffstat (limited to 'codegen.c')
| -rw-r--r-- | codegen.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -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"); |
