diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-05-03 15:10:07 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-05-03 15:10:07 +0900 |
| commit | 9a4381b459f69d6fec4112c99c8e9c3e441a9c06 (patch) | |
| tree | 1e158318ace5e549ff680eccd3c4f78f025720b7 /main.c | |
| parent | 83340b4443123004f13a88c3a50985628dd4bb64 (diff) | |
| download | P4Dcc-9a4381b459f69d6fec4112c99c8e9c3e441a9c06.tar.gz P4Dcc-9a4381b459f69d6fec4112c99c8e9c3e441a9c06.tar.zst P4Dcc-9a4381b459f69d6fec4112c99c8e9c3e441a9c06.zip | |
refactor
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 11 |
1 files changed, 2 insertions, 9 deletions
@@ -553,44 +553,37 @@ void gen_binary_expr(CODEGEN* g, AST* ast) { printf(" pop rax\n"); if (ast->op == TK_PLUS) { printf(" add rax, rdi\n"); - printf(" push rax\n"); } else if (ast->op == TK_MINUS) { printf(" sub rax, rdi\n"); - printf(" push rax\n"); } else if (ast->op == TK_STAR) { printf(" imul rax, rdi\n"); - printf(" push rax\n"); } else if (ast->op == TK_SLASH) { printf(" cqo\n"); printf(" idiv rdi\n"); - printf(" push rax\n"); } else if (ast->op == TK_PERCENT) { printf(" cqo\n"); printf(" idiv rdi\n"); - printf(" push rdx\n"); + printf(" mov rax, rdx\n"); } else if (ast->op == TK_EQ) { printf(" cmp rax, rdi\n"); printf(" sete al\n"); printf(" movzb rax, al\n"); - printf(" push rax\n"); } else if (ast->op == TK_NE) { printf(" cmp rax, rdi\n"); printf(" setne al\n"); printf(" movzb rax, al\n"); - printf(" push rax\n"); } else if (ast->op == TK_LT) { printf(" cmp rax, rdi\n"); printf(" setl al\n"); printf(" movzb rax, al\n"); - printf(" push rax\n"); } else if (ast->op == TK_LE) { printf(" cmp rax, rdi\n"); printf(" setle al\n"); printf(" movzb rax, al\n"); - printf(" push rax\n"); } else { fatal_error("gen_binary_expr: unknown op"); } + printf(" push rax\n"); } void gen_expr(CODEGEN* g, AST* ast) { |
