aboutsummaryrefslogtreecommitdiffhomepage
path: root/main.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-05-03 15:10:07 +0900
committernsfisis <nsfisis@gmail.com>2025-05-03 15:10:07 +0900
commit9a4381b459f69d6fec4112c99c8e9c3e441a9c06 (patch)
tree1e158318ace5e549ff680eccd3c4f78f025720b7 /main.c
parent83340b4443123004f13a88c3a50985628dd4bb64 (diff)
downloadP4Dcc-9a4381b459f69d6fec4112c99c8e9c3e441a9c06.tar.gz
P4Dcc-9a4381b459f69d6fec4112c99c8e9c3e441a9c06.tar.zst
P4Dcc-9a4381b459f69d6fec4112c99c8e9c3e441a9c06.zip
refactor
Diffstat (limited to 'main.c')
-rw-r--r--main.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/main.c b/main.c
index 6fea014..3c33310 100644
--- a/main.c
+++ b/main.c
@@ -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) {