diff options
-rw-r--r-- | gen_code.c | 10 | ||||
-rw-r--r-- | pc.l | 5 |
2 files changed, 15 insertions, 0 deletions
@@ -1,6 +1,7 @@ #include <stdio.h> #include <stdlib.h> #include <assert.h> +#include <string.h> #include "gen_code.h" #include "pc.h" @@ -128,6 +129,15 @@ ptree *t; } break; case PCALL: + if (!strcmp(t->l->attr.nval->name, "write")) { + GEN_EXPR(t->r); + fprintf(stdout, "mov %s, %%rsi\n", *reg_ptr); + fprintf(stdout, "leaq int_print(%%rip), %%rdi\n"); + fprintf(stdout, "mov $0, %%rax\n"); + fprintf(stdout, "call printf\n"); + } else if (!strcmp(t->l->attr.nval->name, "read")) { + fprintf(stderr,"Read\n"); + } fprintf(stderr, "PCALL\n"); break; case FCALL: @@ -43,6 +43,11 @@ output { tmp->func_info->argc = -1; tmp->func_info->argv = NULL; + fprintf(stdout, ".data\n"); + fprintf(stdout, "int_print:\n\t .asciz \"%%d\\n\"\n"); + fprintf(stdout, "float_print:\n\t .asciz \"%%f\\n\"\n.text\n"); + + return IO; } |