Mercurial > hg > CbC > old > device
changeset 196:5f70abd9453d
*** empty log message ***
author | kono |
---|---|
date | Wed, 07 Apr 2004 21:14:19 +0900 |
parents | c193120ee2a6 |
children | b5f49f32c2ee |
files | Changes mc-code-ia32.c mc-code-mips.c mc-code-powerpc.c mc-code.h mc-codegen.c mc-parse.c mc.h test/code-gen.c |
diffstat | 9 files changed, 568 insertions(+), 277 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Sun Apr 04 21:17:10 2004 +0900 +++ b/Changes Wed Apr 07 21:14:19 2004 +0900 @@ -3859,3 +3859,13 @@ コンパイラをCbCで書くと言う作業が残っているんだよな... う、やっぱり、long long は、遠い... できんの? + + +Mon Apr 5 00:20:13 JST 2004 + +間違えて3日分消しちゃったい。 + +int でも RLVAR とかの unsigned/singned の区別がないとまずいよね。 + +包括的なテストルーチンがあった方が便利。long.c を消しちゃったし。 +
--- a/mc-code-ia32.c Sun Apr 04 21:17:10 2004 +0900 +++ b/mc-code-ia32.c Wed Apr 07 21:14:19 2004 +0900 @@ -1085,38 +1085,57 @@ } int -rindirect(int e1) /* *(p +5 ) */ +code_rindirect(int e1, int offset, int us) +{ + char *crn,*op; + int byte; + g_expr(e1); + byte = 0; op="movl"; + crn = register_name(creg,0); + printf("\t%s %d(%s),%s\n",op,offset,crn,crn); + return us?UNSIGNED:INT; +} + +int +code_crindirect(int e1, int offset, int us) { - char *op; - int e2,e3,byte,t; - e3 = cadr(e2 = cadr(e1)); - g_expr(e2); - switch (car(e1)) { + char *crn,*op; + int byte; + g_expr(e1); + byte = 0; op=us?"movzbl":"movsbl"; + crn = register_name(creg,0); + printf("\t%s %d(%s),%s\n",op,offset,crn,crn); + return us?UCHAR:CHAR; +} + +int +code_srindirect(int e1, int offset, int us) +{ + char *crn,*op; + int byte; + g_expr(e1); + byte = 0; op=us?"movzwl":"movswl"; + crn = register_name(creg,0); + printf("\t%s %d(%s),%s\n",op,offset,crn,crn); + return us?USHORT:SHORT; +} + #if FLOAT_CODE - case FRINDIRECT: case DRINDIRECT: - printf("\t%s (%s)\n",fload(car(e1)==DRINDIRECT),register_name(creg,0)); - t=DOUBLE; - return t; - break; +int +code_drindirect(int e1, int offset, int d) +{ + g_expr(e1); + printf("\t%s (%s)\n",fload(d),register_name(creg,0)); + return DOUBLE; +} #endif - case CRINDIRECT: - byte = 1; op="movsbl";t=CHAR; - break; - case CURINDIRECT: - byte = 1; op="movzbl";t=UCHAR; - break; - case SRINDIRECT: - byte = 1; op="movswl";t=SHORT; - break; - case SURINDIRECT: - byte = 1; op="movzwl";t=USHORT; - break; - case RINDIRECT: default: - byte = 0; op="movl";t=INT; - } - printf("\t%s (%s),%s\n",op,register_name(creg,0),register_name(creg,0)); - return t; + +#if LONGLONG_CODE +int +code_lrindirect(int e1, int offset, int us) +{ } +#endif char * move(int byte)
--- a/mc-code-mips.c Sun Apr 04 21:17:10 2004 +0900 +++ b/mc-code-mips.c Wed Apr 07 21:14:19 2004 +0900 @@ -1513,29 +1513,53 @@ } int -rindirect(int e1) /* *(p +5 ) */ +code_rindirect(int e1, int offset, int us) +{ + char *crn; + g_expr(e1); + crn=register_name(creg); + printf("\tlw %s,%d(%s)\n",crn,offset,crn); + return INT; +} + +int +code_crindirect(int e1, int offset, int us) { char *crn; - int e2,e3,e4,offset; - - offset=0; - e3 = cadr(e2 = cadr(e1)); - if (car(e2)==ADD) { - e4=caddr(e2); - if (car(e4)==CONST) { - offset=cadr(e4); - e2=e3; - } + g_expr(e1); + crn=register_name(creg); + if (us) { + printf("\tlbu %s,%d(%s)\n",crn,offset,crn); + return UCHAR; + } else { + printf("\tlb %s,%d(%s)\n",crn,offset,crn); + return CHAR; } - g_expr(e2); +} + +int +code_srindirect(int e1, int offset, int us) +{ + char *crn; + g_expr(e1); crn=register_name(creg); - switch (car(e1)) { - case FRINDIRECT: - printf("\tl.s %s,%d(%s)\n", fregister_name(freg),offset,crn); - regv[creg]=0; regv[freg]=1; - creg = freg; - return FLOAT; - case DRINDIRECT: + if (us) { + printf("\tlhu %s,%d(%s)\n",crn,offset,crn); + return USHORT; + } else { + printf("\tlh %s,%d(%s)\n",crn,offset,crn); + return SHORT; + } +} + +#if FLOAT_CODE +int +code_drindirect(int e1, int offset, int d) +{ + char *crn; + g_expr(e1); + crn=register_name(creg); + if (d) { printf("\tlw %s,%d(%s)\n", dregister_name0(dreg),offset,crn); printf("\tlw %s,%d(%s)\n", @@ -1543,24 +1567,24 @@ regv[creg]=0; regv[dreg]=1; creg = dreg; return DOUBLE; - case CRINDIRECT: - printf("\tlb %s,%d(%s)\n",crn,offset,crn); - return CHAR; - case CURINDIRECT: - printf("\tlbu %s,%d(%s)\n",crn,offset,crn); - return UCHAR; - case SRINDIRECT: - printf("\tlh %s,%d(%s)\n",crn,offset,crn); - return SHORT; - case SURINDIRECT: - printf("\tlhu %s,%d(%s)\n",crn,offset,crn); - return USHORT; - case RINDIRECT: - printf("\tlw %s,%d(%s)\n",crn,offset,crn); - return INT; + } else { + printf("\tl.s %s,%d(%s)\n", fregister_name(freg),offset,crn); + regv[creg]=0; regv[freg]=1; + creg = freg; + return FLOAT; } - error(-1); return INT; } +#endif + +#if LONGLONG_CODE +int +code_lrindirect(int e1, int offset, int us) +{ + char *crn; + g_expr(e1); + crn=register_name(creg); +} +#endif void code_assign_gvar(int e2,int creg,int byte) {
--- a/mc-code-powerpc.c Sun Apr 04 21:17:10 2004 +0900 +++ b/mc-code-powerpc.c Wed Apr 07 21:14:19 2004 +0900 @@ -1558,52 +1558,74 @@ } int -rindirect(int e1) /* *(p +5 ) */ +code_rindirect(int e1, int offset, int us) { char *crn; - int e2,e3,e4,offset; - - offset=0; - e3 = cadr(e2 = cadr(e1)); - if (car(e2)==ADD) { - e4=caddr(e2); - if (car(e4)==CONST) { - offset=cadr(e4); - e2=e3; - } - } - g_expr(e2); + g_expr(e1); crn=register_name(creg); - switch (car(e1)) { -#if FLOAT_CODE - case FRINDIRECT: case DRINDIRECT: - printf("\t%s %s,%d(%s)\n",fload(car(e1)==DRINDIRECT), - fregister_name(freg),offset,crn); - regv[creg]=0; regv[freg]=1; - creg = freg; - return DOUBLE; -#endif - case CRINDIRECT: + printf("\tlwz %s,%d(%s)\n",crn,offset,crn); + return INT; +} + +int +code_crindirect(int e1, int offset, int us) +{ + char *crn; + g_expr(e1); + crn=register_name(creg); + if (us) { + printf("\tlbz %s,%d(%s)\n",crn,offset,crn); + return UCHAR; + } else { printf("\tlbz %s,%d(%s)\n",crn,offset,crn); printf("\textsb %s,%s\n",crn,crn); return CHAR; - case CURINDIRECT: - printf("\tlbz %s,%d(%s)\n",crn,offset,crn); - return UCHAR; - case SRINDIRECT: + } +} + +int +code_srindirect(int e1, int offset, int us) +{ + char *crn; + g_expr(e1); + crn=register_name(creg); + if (us) { + printf("\tlhz %s,%d(%s)\n",crn,offset,crn); + return USHORT; + } else { printf("\tlhz %s,%d(%s)\n",crn,offset,crn); printf("\textsh %s,%s\n",crn,crn); return SHORT; - case SURINDIRECT: - printf("\tlhz %s,%d(%s)\n",crn,offset,crn); - return USHORT; - case RINDIRECT: - printf("\tlwz %s,%d(%s)\n",crn,offset,crn); - return INT; } - error(-1); return INT; } +#if FLOAT_CODE +int +code_drindirect(int e1, int offset, int d) +{ + char *crn; + g_expr(e1); + crn=register_name(creg); + printf("\t%s %s,%d(%s)\n",fload(d), + fregister_name(freg),offset,crn); + regv[creg]=0; regv[freg]=1; + creg = freg; + return DOUBLE; +} +#endif + +#if LONGLONG_CODE +int +code_lrindirect(int e1, int offset, int us) +{ + char *crn; + g_expr(e1); + crn=register_name(creg); + return LONGLONG; +} +#endif + + void code_assign_gvar(int e2,int creg,int byte) { int r;
--- a/mc-code.h Sun Apr 04 21:17:10 2004 +0900 +++ b/mc-code.h Wed Apr 07 21:14:19 2004 +0900 @@ -76,7 +76,17 @@ extern void code_fix_frame_pointer(int disp_offset); extern void code_jmp(char *s); extern void code_indirect_jmp(int e2); -extern int rindirect(int e1); + +extern int code_rindirect(int e1, int offset, int us); +extern int code_crindirect(int e1, int offset, int us); +extern int code_srindirect(int e1, int offset, int us); +#if FLOAT_CODE +extern int code_drindirect(int e1, int offset, int d); +#endif +#if LONGLONG_CODE +extern int code_lrindirect(int e1, int offset, int us); +#endif + extern void code_assign_gvar(int e2,int reg,int byte); extern void code_assign_lvar(int e2,int reg,int byte); extern void code_assign_register(int e2,int byte,int reg);
--- a/mc-codegen.c Sun Apr 04 21:17:10 2004 +0900 +++ b/mc-codegen.c Wed Apr 07 21:14:19 2004 +0900 @@ -211,12 +211,30 @@ return VOID; case INDIRECT: return g_expr0(e2); - case RINDIRECT: case CRINDIRECT: case CURINDIRECT: - case SRINDIRECT: case SURINDIRECT: + case RINDIRECT: + return code_rindirect(e2,caddr(e1),0); + case URINDIRECT: + return code_rindirect(e2,caddr(e1),1); + case CRINDIRECT: + return code_crindirect(e2,caddr(e1),0); + case CURINDIRECT: + return code_crindirect(e2,caddr(e1),1); + case SRINDIRECT: + return code_srindirect(e2,caddr(e1),0); + case SURINDIRECT: + return code_srindirect(e2,caddr(e1),1); #if FLOAT_CODE - case DRINDIRECT: case FRINDIRECT: + case DRINDIRECT: + return code_drindirect(e2,caddr(e1),1); + case FRINDIRECT: + return code_drindirect(e2,caddr(e1),0); #endif - return rindirect(e1); +#if LONGLONG_CODE + case LRINDIRECT: + return code_lrindirect(e2,caddr(e1),0); + case LURINDIRECT: + return code_lrindirect(e2,caddr(e1),1); +#endif case ADDRESS: if (car(e2)==REGISTER||car(e2)==DREGISTER||car(e2)==FREGISTER) return register_to_lvar(e2); /* too late? */
--- a/mc-parse.c Sun Apr 04 21:17:10 2004 +0900 +++ b/mc-parse.c Wed Apr 07 21:14:19 2004 +0900 @@ -2888,74 +2888,70 @@ /* right value , get the value of the variable */ static int +indirect(int t,int e1) +{ + int e2,e3,e4,offset; + e2 = e1; + offset = 0; + e3 = cadr(e2); + if (car(e2)==ADD) { + e4=caddr(e2); + if (car(e4)==CONST) { + offset=cadr(e4); + e1=e3; + } + } + return list3(t,e1,offset); +} + +static int rvalue(int e) { - int t,op; - if(type==CHAR||type==SHORT||type==LONGLONG) { - op = (type==SHORT?SOP:type==LONGLONG?LOP:0); - if(type!=LONGLONG) type= INT; - switch(car(e)) { - case GVAR: - return(list2(CRGVAR+op,cadr(e))); - case LVAR: - return(list2(CRLVAR+op,cadr(e))); - case INDIRECT: - return(list2(CRINDIRECT+op,cadr(e))); - default:return(e); - } - } - if(type==UCHAR||type==USHORT||type==ULONGLONG) { - op = (type==USHORT?SOP:type==ULONGLONG?LOP:0); - if(type!=LONGLONG) type= UNSIGNED; - switch(car(e)) { - case GVAR: - return(list2(CURGVAR+op,cadr(e))); - case LVAR: - return(list2(CURLVAR+op,cadr(e))); - case INDIRECT: - return(list2(CURINDIRECT+op,cadr(e))); - default:return(e); - } - } - if(type==FLOAT||type==DOUBLE) { - op = type==FLOAT?FOP:type==DOUBLE?DOP:0; - switch(car(e)) { - case GVAR: - return(list2(RGVAR+op,cadr(e))); - case LVAR: - return(list2(RLVAR+op,cadr(e))); - case INDIRECT: - return(list2(RINDIRECT+op,cadr(e))); - default:return(e); - } - } - if(!integral(type)&&type!=VOID) { - if(type==CODE) { - return e; - } if((t=car(type))==ARRAY) { + int op; + + op = 0; + switch(type) { + case INT: break; + case UNSIGNED: break; + case VOID: break; + case CHAR: op=COP; type=INT; break; + case UCHAR: op=COP+US; type=INT; break; + case SHORT: op=SOP; type=UNSIGNED; break; + case USHORT: op=SOP+US; type=UNSIGNED; break; + case LONGLONG: op=LOP; break; + case ULONGLONG: op=LOP+US; break; + case FLOAT: op=FOP; break; + case DOUBLE: op=DOP; break; + case CODE: return e; + default: + if (integral(type)) break; + switch(car(type)) { + case ARRAY: type=list2(POINTER,cadr(type)); if(car(e)==INDIRECT) return cadr(e); return list2(ADDRESS,e); - } else if(t==STRUCT || t==UNION) { + case STRUCT: case UNION: if(car(e)==RSTRUCT) return e; /* ??? */ - t = cadr(type); /* size */ - return list3(RSTRUCT,e,t); - } else if(t==FUNCTION) { + return list3(RSTRUCT,e,cadr(type) /* size */); + case FUNCTION: type=cadr(type); return e; - } else if(t==CODE) { + case CODE: return e; - } else if(t!=POINTER) error(TYERR); + case POINTER: + break; + default: + error(TYERR); + } } - /* int case */ switch(car(e)) { case GVAR: - return(list2(RGVAR,cadr(e))); + return(list2(RGVAR+op,cadr(e))); case LVAR: - return(list2(RLVAR,cadr(e))); + return(list2(RLVAR+op,cadr(e))); case INDIRECT: - return(list2(RINDIRECT,cadr(e))); - default:return(e); + return(indirect(RINDIRECT+op,cadr(e))); + default:return(e); /* idempotent case? */ } }
--- a/mc.h Sun Apr 04 21:17:10 2004 +0900 +++ b/mc.h Wed Apr 07 21:14:19 2004 +0900 @@ -11,7 +11,7 @@ #endif #define FLOAT_CODE 1 -#define LONGLONG_CODE 1 +#define LONGLONG_CODE 0 #define SIZE_INT 4 @@ -101,11 +101,12 @@ /* mode end */ #define US 1 -#define AS 1000 +#define AS 10000 #define SOP 200 -#define DOP 400 -#define FOP 600 -#define LOP 800 +#define COP 400 +#define DOP 600 +#define FOP 800 +#define LOP 1000 /* tree node tags start */ @@ -115,123 +116,130 @@ #define GVAR 1 #define RGVAR 2 -#define CRGVAR 3 -#define CURGVAR 4 -#define LVAR 5 -#define RLVAR 6 -#define CRLVAR 7 -#define CURLVAR 8 +#define URGVAR 3 +#define LVAR 4 +#define RLVAR 5 +#define URLVAR 6 +#define CRGVAR (COP+RGVAR) +#define CURGVAR (COP+URGVAR) +#define CRLVAR (COP+RLVAR) +#define CURLVAR (COP+URLVAR) #define FRGVAR (FOP+RGVAR) #define FRLVAR (FOP+RLVAR) #define DRGVAR (DOP+RGVAR) #define DRLVAR (DOP+RLVAR) -#define SRGVAR (SOP+CRGVAR) -#define SRLVAR (SOP+CRLVAR) -#define SURGVAR (SOP+CURGVAR) -#define SURLVAR (SOP+CURLVAR) -#define LRGVAR (LOP+CRGVAR) -#define LRLVAR (LOP+CRLVAR) -#define LURGVAR (LOP+CURGVAR) -#define LURLVAR (LOP+CURLVAR) +#define SRGVAR (SOP+RGVAR) +#define SURGVAR (SOP+URGVAR) +#define SRLVAR (SOP+RLVAR) +#define SURLVAR (SOP+URLVAR) +#define LRGVAR (LOP+RGVAR) +#define LURGVAR (LOP+URGVAR) +#define LRLVAR (LOP+RLVAR) +#define LURLVAR (LOP+URLVAR) -#define CONST 9 +#define CONST 7 #define DCONST (DOP+CONST) #define FCONST (FOP+CONST) #define LCONST (LOP+CONST) -#define STRING 10 -#define FNAME 11 +#define STRING 8 +#define FNAME 9 #define NULLARY_ARGS(i) (i==REGISTER||i==DREGISTER||i==FREGISTER||(GVAR<=(i%SOP)&&(i%SOP)<=FNAME)) /* unary argments */ -#define ADDRESS 12 -#define MINUS 13 -#define LNOT 14 -#define BNOT 15 -#define INC 16 -#define POSTINC 17 -#define UPOSTINC 18 -#define PREINC 19 -#define UPREINC 20 -#define DEC 21 -#define CPOSTINC 22 -#define CPREINC 23 -#define CPOSTDEC 24 -#define CPREDEC 25 -#define CUPOSTINC 26 -#define CUPREINC 27 -#define CUPOSTDEC 28 -#define CUPREDEC 29 -#define SPOSTINC (SOP+CPOSTINC) -#define SPREINC (SOP+CPREINC) -#define SPOSTDEC (SOP+CPOSTDEC) -#define SPREDEC (SOP+CPREDEC) -#define SUPOSTINC (SOP+CUPOSTINC) -#define SUPREINC (SOP+CUPREINC) -#define SUPOSTDEC (SOP+CUPOSTDEC) -#define SUPREDEC (SOP+CUPREDEC) +#define ADDRESS 10 +#define MINUS 11 +#define LNOT 12 +#define BNOT 13 +#define INC 14 +#define POSTINC 15 +#define UPOSTINC 16 +#define PREINC 17 +#define UPREINC 18 +#define POSTDEC 19 +#define UPOSTDEC 20 +#define PREDEC 21 +#define UPREDEC 22 +#define DEC 23 +#define CPOSTINC (COP+POSTINC) +#define CUPOSTINC (COP+UPOSTINC) +#define CPREINC (COP+PREINC) +#define CUPREINC (COP+UPREINC) +#define CPOSTDEC (COP+POSTDEC) +#define CUPOSTDEC (COP+UPOSTDEC) +#define CPREDEC (COP+CPREDEC) +#define CUPREDEC (COP+UPREDEC) +#define SPOSTINC (SOP+POSTINC) +#define SUPOSTINC (SOP+UPOSTINC) +#define SPREINC (SOP+PREINC) +#define SUPREINC (SOP+UPREINC) +#define SPOSTDEC (SOP+POSTDEC) +#define SUPOSTDEC (SOP+UPOSTDEC) +#define SPREDEC (SOP+PREDEC) +#define SUPREDEC (SOP+UPREDEC) #define FPOSTINC (FOP+POSTINC) #define FPREINC (FOP+PREINC) #define DPOSTINC (DOP+POSTINC) #define DPREINC (DOP+PREINC) -#define LPOSTINC (LOP+CPOSTINC) -#define LPREINC (LOP+CPREINC) -#define LUPOSTINC (LOP+CUPOSTINC) -#define LUPREINC (LOP+CUPREINC) -#define INDIRECT 30 -#define RINDIRECT 31 -#define CRINDIRECT 32 -#define CURINDIRECT 33 -#define SRINDIRECT (SOP+CRINDIRECT) -#define SURINDIRECT (SOP+CURINDIRECT) +#define LPOSTINC (LOP+POSTINC) +#define LPREINC (LOP+PREINC) +#define LUPOSTINC (LOP+UPOSTINC) +#define LUPREINC (LOP+UPREINC) +#define INDIRECT 24 +#define RINDIRECT 25 +#define URINDIRECT 26 +#define CRINDIRECT (COP+RINDIRECT) +#define CURINDIRECT (COP+URINDIRECT) +#define SRINDIRECT (SOP+RINDIRECT) +#define SURINDIRECT (SOP+URINDIRECT) #define FRINDIRECT (FOP+RINDIRECT) #define DRINDIRECT (DOP+RINDIRECT) -#define LRINDIRECT (LOP+CRINDIRECT) +#define LRINDIRECT (LOP+RINDIRECT) #define LURINDIRECT (LOP+CURINDIRECT) -#define RSTRUCT 34 -#define CONV 35 +#define RSTRUCT 27 +#define CONV 28 #define UNARY_ARGS(i) (ADDRESS<=(i%SOP)&&(i%SOP)<=CONV) /* binary argments */ -#define MUL 36 -#define UMUL 37 -#define DIV 38 -#define UDIV 39 -#define MOD 40 -#define UMOD 41 -#define ADD 42 -#define SUB 43 -#define CMP 44 -#define RSHIFT 45 -#define URSHIFT 46 -#define LSHIFT 47 -#define ULSHIFT 48 -#define GT 49 -#define UGT 50 -#define GE 51 -#define UGE 52 -#define LT 53 -#define ULT 54 -#define LE 55 -#define ULE 56 -#define EQ 57 -#define NEQ 58 -#define BAND 59 -#define EOR 60 -#define BOR 61 -#define LAND 62 -#define LOR 63 -#define ASS 64 -#define CMPGE 65 -#define ASSOP 66 -#define COMMA 67 +#define MUL 29 +#define UMUL 30 +#define DIV 31 +#define UDIV 32 +#define MOD 33 +#define UMOD 34 +#define ADD 35 +#define SUB 36 +#define CMP 37 +#define RSHIFT 38 +#define URSHIFT 39 +#define LSHIFT 40 +#define ULSHIFT 41 +#define GT 42 +#define UGT 43 +#define GE 44 +#define UGE 45 +#define LT 46 +#define ULT 47 +#define LE 48 +#define ULE 49 +#define EQ 50 +#define NEQ 51 +#define BAND 52 +#define EOR 53 +#define BOR 54 +#define LAND 55 +#define LOR 56 +#define ASS 57 +#define CMPGE 58 +#define ASSOP 59 +#define COMMA 60 -#define CASS 68 -#define CASSOP 69 -#define CUASSOP 70 +#define CASS 61 +#define CASSOP 62 +#define CUASSOP 63 #define SASS (SOP+CASS) #define SASSOP (SOP+CASSOP) @@ -282,13 +290,13 @@ #define LBOR (LOP+BOR) -#define STASS 71 +#define STASS 64 #define BINARY_ARGS(i) (MUL<=(i%SOP)&&(i%SOP)<=STASS) /* tarnary argments */ -#define COND 72 +#define COND 65 #define SCOND (SOP+COND) #define DCOND (DOP+COND) #define FCOND (FOP+COND) @@ -298,19 +306,19 @@ /* not appeared as tags */ -#define I2I 73 -#define I2U 74 -#define I2D 75 -#define I2F 76 -#define I2LL 77 -#define I2ULL 78 +#define I2I 66 +#define I2U 67 +#define I2D 68 +#define I2F 69 +#define I2LL 70 +#define I2ULL 71 -#define U2I 79 -#define U2U 80 -#define U2D 81 -#define U2F 82 -#define U2LL 83 -#define U2ULL 84 +#define U2I 72 +#define U2U 73 +#define U2D 74 +#define U2F 75 +#define U2LL 76 +#define U2ULL 77 #define D2I (DOP+I2I) #define D2U (DOP+I2U) @@ -340,17 +348,17 @@ #define ULL2LL (LOP+U2LL) #define ULL2ULL (LOP+U2ULL) -#define LPAR 85 -#define RPAR 86 -#define LBRA 87 -#define RBRA 88 -#define LC 89 -#define RC 90 -#define COLON 91 -#define SM 92 -#define PERIOD 93 -#define ARROW 94 -#define CNAME 95 +#define LPAR 78 +#define RPAR 79 +#define LBRA 80 +#define RBRA 81 +#define LC 82 +#define RC 83 +#define COLON 84 +#define SM 85 +#define PERIOD 86 +#define ARROW 87 +#define CNAME 88 /* tree node tags end */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/code-gen.c Wed Apr 07 21:14:19 2004 +0900 @@ -0,0 +1,184 @@ +/* Micro-C Code Generator Checker */ +/* $Id$ */ + +#define FLOAT_CODE 1 +#define LONGLONG_CODE 1 + +// code_lvar(int e2,int creg) +// code_label(int labelno) +// code_gvar(int e1,int creg) +// code_rgvar(int e1,int creg) +// code_crgvar(int e1,int creg,int sign,int sz) +// code_register(int e2,int creg) +// code_rlvar(int e2,int reg) +// code_crlvar(int e2,int reg,int sign,int sz) +// code_fname(NMTBL *n,int creg) +// code_const(int e2,int creg) +// code_neg(int creg) +// code_not(int creg) +// code_lnot(int creg) +// code_preinc(int e1,int e2,int dir,int sign,int sz,int reg) +// code_postinc(int e1,int e2,int dir,int sign,int sz,int reg) +// code_return(int creg) +// code_bool(int e1) +// code_gt(int cond) +// code_ugt(int cond) +// code_ge(int cond) +// code_uge(int cond) +// code_eq(int cond) +// code_cmp_crgvar(int e1,int sz) +// code_cmp_crlvar(int e2,int sz) +// code_cmp_rgvar(int e1) +// code_cmp_rlvar(int e2) +// code_cmp_register(int e2) +// ascii(char *s) +// code_string(int e1,int creg) +// struct_push(int e4,int t,int arg) +// function(int e1) +// code_jmp(char *s) +// code_indirect_jmp(int e2) +// code_rindirect(int e1, int offset, int us); +// code_crindirect(int e1, int offset, int us); +// code_srindirect(int e1, int offset, int us); +#if FLOAT_CODE +// code_drindirect(int e1, int offset, int d); +#endif +#if LONGLONG_CODE +// code_lrindirect(int e1, int offset, int us); +#endif + + +// code_assign_gvar(int e2,int creg,int byte) +// code_assign_lvar(int e2,int creg,int byte) +// code_assign_register(int e2,int byte,int creg) +// code_assign(int e2,int byte,int creg) +// code_register_assop(int e2,int op,int byte) +// code_assop(int op,int byte,int sign) +// tosop(int op,int oreg) +// case LSHIFT: +// case ULSHIFT: +// case RSHIFT: +// case URSHIFT: +// case ADD: +// case SUB: +// case CMP: +// case BAND: +// case EOR: +// case BOR: +// case MUL: +// case UMUL: +// case DIV: +// case UDIV: +// case MOD: +// case UMOD: + +// oprtc(int op,int v) + +// ld_indexx(int byte, int n, int xreg,int sign) + +// rexpr(int e1, int l1, char *s,int t) + +// jcond(int l, char cond) + +// jmp(int l) +// code_enter(char *name) + +#if FLOAT_CODE +// code_cmp_dregister(int e2,int d) +// code_dregister(int e2,int freg,int d) +// code_dassign_gvar(int e2,int freg,int d) +// code_dassign_lvar(int e2,int freg,int d) +// code_dassign(int e2,int freg,int d) +// code_dassign_dregister(int e2,int d,int freg) +// code_dconst(int e2,int freg,int d) +// code_dneg(int freg,int d) +// code_d2i(int freg0) +// code_i2d(int creg0) +// code_d2u(int freg0) +// code_u2d(int creg0) +// code_d2f(int freg) +// code_f2d(int freg) +// code_f2i(int freg) code_d2i(freg); +// code_f2u(int freg) code_d2u(freg); +// code_i2f(int creg) code_i2d(creg); +// code_u2f(int creg) code_u2d(creg); + +// code_drgvar(int e2,int d,int freg) +// code_drlvar(int e2,int d,int freg) +// code_cmp_drgvar(int e2,int d) +// code_cmp_drlvar(int e2,int d) +// dtosop(int op,int e1) +// case FADD: +// case DADD: opn="fadd"; break; +// case FSUB: +// case DSUB: opn="fsub"; break; +// case FDIV: +// case DDIV: opn="fdiv"; break; +// case FMUL: +// case DMUL: opn="fmul"; break; +// case FCMP: +// case DCMP: +// case FCMPGE: +// case DCMPGE: + +// code_dassop(int op,int d) +// code_dpreinc(int e1,int e2,int d,int reg) +// code_dpostinc(int e1,int e2,int d,int reg) +// drexpr(int e1, int e2,int l1, int op) + +// case DOP+GE: +// case FOP+GE: +// case DOP+GT: +// case FOP+GT: +// case DOP+EQ: +// case FOP+EQ: +// case DOP+NEQ: +// case FOP+NEQ: +#endif + +#if LONGLONG_CODE +// lrexpr(int e1, int e2,int l1, int op) +// int lpop_register() +// code_lregister(int e2,int reg) +// code_cmp_lregister(int reg) +// code_cmp_lrgvar(int e1,int e2) +// code_cmp_lrlvar(int e1,int e2) +// code_lassign(int e1,int e2) +// code_lassign_gvar(int e1,int e2) +// code_lassign_lvar(int e1,int e2) +// code_lassign_lregister(int e2,int reg) +// code_lconst(int e1,int e2) +// code_lneg(int e1,int e2) +// code_lrgvar(int e1,int e2) +// code_lrlvar(int e1,int e2) +// ltosop(int e1,int e2) +// code_i2ll(int creg) +// code_i2ull(int creg) +// code_u2ll(int creg) +// code_u2ull(int creg) +// code_ll2i(int creg) +// code_ll2u(int creg) +// code_ull2i(int creg) +// code_ull2u(int creg) +#if FLOAT_CODE +// code_d2ll(int creg) +// code_d2ull(int creg) +// code_f2ll(int creg) +// code_f2ull(int creg) +// code_ll2d(int creg) +// code_ll2f(int creg) +// code_ull2d(int creg) +// code_ull2f(int creg) +// code_ull2ll(int creg) +// code_ull2ull(int creg) +#endif + +#if LONGLONG_CODE + +// code_lpreinc(int e1,int e2,int reg) +// code_lpostinc(int e1,int e2,int reg) +// code_lassop(int op) + +#endif +/* end */ +