Mercurial > hg > Members > kono > compiler-examples
changeset 17:e5c8532ab38d
fix for Mountain lion
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Oct 2013 15:51:35 +0900 |
parents | 5b631c16f89b |
children | 230d5ca49f9f |
files | Makefile calc.c s-code-intel-mac.c s-code-intel-r.c s-code-intel.c s-code-intel64-mac.c s-code-sparc.c s-prefix.c s-tree-compile.c token.c |
diffstat | 10 files changed, 37 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Fri Nov 02 14:04:35 2012 +0900 +++ b/Makefile Fri Oct 18 15:51:35 2013 +0900 @@ -1,14 +1,15 @@ -TEST = s-intel +TEST = s-imac64 -CC = gcc -CFLAGS = -g -O -Wall +CC = clang +# CFLAGS = -g -O -Wall +CFLAGS = -g -O0 -Wall YYFLAGS = -v -COMPILER = s-compile.o s-token.o -# COMPILER = s-tree-compile.o s-token.o +# COMPILER = s-compile.o s-token.o +COMPILER = s-tree-compile.o s-token.o # COMPILER = s-yacc.o s-token.o # TARGET = token calc s-calc s-prefix s-rpn s-09 s-intel s-intel-r s-sparc s-rs6k s-m68k s-ppc s-imac -TARGET = token calc s-calc s-prefix s-rpn s-intel s-intel-r s-sparc s-ppc s-imac s-imac64 +TARGET = token calc s-calc s-calc-left s-prefix s-rpn s-intel s-intel-r s-sparc s-ppc s-imac s-imac64 # s-imac64-r s-llvm all: $(TARGET) token: token.o s-token.o @@ -17,7 +18,10 @@ calc: calc.c $(CC) $(CFLAGS) -o $@ $^ -s-calc: s-calc.c s-token.o +s-calc: s-calc-r.c s-token.o + $(CC) $(CFLAGS) -o $@ $^ + +s-calc-left: s-calc.c s-token.o $(CC) $(CFLAGS) -o $@ $^ s-tree: s-tree.c s-token.o @@ -39,6 +43,10 @@ $(CC) $(CFLAGS) -o $@ $^ s-imac64: $(COMPILER) s-code-intel64-mac.o $(CC) $(CFLAGS) -o $@ $^ +s-imac64-r: $(COMPILER) s-code-intel64-mac-r.o + $(CC) $(CFLAGS) -o $@ $^ +s-llvm: $(COMPILER) s-code-llvm.o + $(CC) $(CFLAGS) -o $@ $^ s-sparc: $(COMPILER) s-code-sparc.o $(CC) $(CFLAGS) -o $@ $^ s-rs6k: $(COMPILER) s-code-rs6k.o
--- a/calc.c Fri Nov 02 14:04:35 2012 +0900 +++ b/calc.c Fri Oct 18 15:51:35 2013 +0900 @@ -58,7 +58,7 @@ } if('1'<=c && c<='9') { /* Decimal */ d = c-'0'; - while(c= *ptr++) { + while((c= *ptr++)) { if('0'<=c && c<='9') { d = d*10 + (c - '0'); } else { @@ -72,7 +72,7 @@ } else if ('0'==c && 'x'== *ptr) { /* Hex */ ptr++; d = 0; - while(c= *ptr++) { + while((c= *ptr++)) { if('0'<=c && c<='9') { d = d*16 + (c - '0'); } else if('a'<=c && c<='f') { @@ -89,7 +89,7 @@ return last_token; } else if ('0'==c) { /* Octal */ d = c-'0'; - while(c= *ptr++) { + while((c= *ptr++)) { if('0'<=c && c<='7') { d = d*8 + (c - '0'); } else { @@ -102,7 +102,7 @@ return last_token; } else if ('\''==c) { /* Ascii */ d = 0; - while(c= *ptr++) { + while((c= *ptr++)) { if('\''!=c && c<=0x7f) { d = d*256 + c; } else if(c>=0x80 && *ptr) { @@ -127,6 +127,7 @@ } else if ('!'==c && '='== *ptr) { /* equal */ ptr++; last_token = T_NEQUAL; + return last_token; } else if ('<'==c && '<'== *ptr) { /* shift */ ptr++; last_token = T_LSHIFT; @@ -138,7 +139,6 @@ } else { last_token = c; return last_token; - return c; } }
--- a/s-code-intel-mac.c Fri Nov 02 14:04:35 2012 +0900 +++ b/s-code-intel-mac.c Fri Oct 18 15:51:35 2013 +0900 @@ -111,7 +111,7 @@ printf("\tmovl %%eax,%%ebx\n"); printf("\tpopl %%eax\n"); printf("\tcltd\n"); - printf("\tidiv %%ebx\n",op); + printf("\tidiv %%ebx\n"); } else if(op==O_SUB) { printf("\tpopl %%ebx\n"); printf("\t%s %%ebx,%%eax\n",opcode[op]);
--- a/s-code-intel-r.c Fri Nov 02 14:04:35 2012 +0900 +++ b/s-code-intel-r.c Fri Oct 18 15:51:35 2013 +0900 @@ -92,14 +92,14 @@ static char *reg_name[] = {"%eax","%ebx","%ecx","%edx","%esi", "%edi","%ebp","%esp"}; -static char *reg_name_l[] = {"%al","%bl","%cl","%dl"}; +// static char *reg_name_l[] = {"%al","%bl","%cl","%dl"}; -static char * -regster(i) -int i; -{ - return reg_name[i]; -} +//static char * +//regster(i) +//int i; +//{ +// return reg_name[i]; +//} static int get_register() @@ -119,6 +119,7 @@ regs[i]=0; } +/* static int register_full() { @@ -130,6 +131,7 @@ } return 1; } + */ void emit_init() @@ -157,7 +159,7 @@ } else { lreg = i; lrn = reg_name[lreg]; - regs[i]=0; + free_register(i); return lreg; } }
--- a/s-code-intel.c Fri Nov 02 14:04:35 2012 +0900 +++ b/s-code-intel.c Fri Oct 18 15:51:35 2013 +0900 @@ -90,7 +90,7 @@ printf("\tmovl %%eax,%%ebx\n"); printf("\tpopl %%eax\n"); printf("\tcltd\n"); - printf("\tidiv %%ebx\n",op); + printf("\tidiv %%ebx\n"); } else if(op==O_SUB) { printf("\tpopl %%ebx\n"); printf("\t%s %%ebx,%%eax\n",opcode[op]);
--- a/s-code-intel64-mac.c Fri Nov 02 14:04:35 2012 +0900 +++ b/s-code-intel64-mac.c Fri Oct 18 15:51:35 2013 +0900 @@ -174,9 +174,10 @@ void emit_calc(enum opcode op) { - if(op==O_DIV) { + if(op==O_DIV || op==O_DIV_R ) { printf("\tmovq %%rax,%%rbx\n"); printf("\tpopq %%rax\n"); + // printf("\tmovq $0,%%rdx\n"); printf("\tcltd\n"); printf("\tidivq %%rbx\n"); } else if(op==O_SUB) {
--- a/s-code-sparc.c Fri Nov 02 14:04:35 2012 +0900 +++ b/s-code-sparc.c Fri Oct 18 15:51:35 2013 +0900 @@ -63,7 +63,7 @@ i = reg_stack[--reg_sp]; lrn = reg_name[i]; - regs[j]=0; + free_register(j); current_register = i; crn = reg_name[i];
--- a/s-prefix.c Fri Nov 02 14:04:35 2012 +0900 +++ b/s-prefix.c Fri Oct 18 15:51:35 2013 +0900 @@ -71,8 +71,6 @@ static void mexpr() { - int d; - emit_comment(); term(); while(last_token!=EOF) { @@ -132,7 +130,6 @@ int main() { - int d; char buf[BUFSIZ]; emit_intro();
--- a/s-tree-compile.c Fri Nov 02 14:04:35 2012 +0900 +++ b/s-tree-compile.c Fri Oct 18 15:51:35 2013 +0900 @@ -7,7 +7,7 @@ #include <stdlib.h> // for malloc -static int variable[48]; +static int optimize = 0; #define NEW(type) ((type *)malloc(sizeof(type))) @@ -23,13 +23,12 @@ static node *mexpr(); static node *term(); static node *new_node(); -static void print_node(); static node_ptr new_node(int type,int value,node_ptr left,node_ptr right) { node *d; - if ((left && left->type =='0') && + if (optimize && (left && left->type =='0') && (right && right->type =='0')) { switch(type) { case '>': @@ -126,7 +125,6 @@ static node_ptr expr() { - int assign; node *d; d = aexpr();