1 /* Loglan82 Compiler&Interpreter
2 Copyright (C) 1993 Institute of Informatics, University of Warsaw
3 Copyright (C) 1993, 1994 LITA, Pau
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
16 =======================================================================
28 void dump_lcode( name ) char *name;{
32 unsigned char opdescr[ 229 ];
33 int args[ 3 ] , arg_no ;
37 fout=fopen(strcat(outname,".lco"),"w");
39 fprintf(stderr,"Can't open file %s for writing\n",name);
43 /* initiate opdescr */
45 for( n=100; n<=131; n++ ) opdescr[ n ]=3;
46 for( n=30 ; n<=83 ; n++ ) opdescr[ n ]=2;
53 for( n=52 ; n<=57 ; n++ ) opdescr[ n ]=3;
54 for( n=84 ; n<=99 ; n++ ) opdescr[ n ]=3;
60 for( n=20 ; n<=26 ; n++ ) opdescr[ n ]=3;
61 for( n=1 ; n<=5 ; n++ ) opdescr[ n ]=3;
90 for( n=172 ; n<= 194 ; n++ ) opdescr[ n ]=0;
110 for( n = 195 ; n<=219 ; n++ ) opdescr[ n ]=2;
111 for( n = 201 ; n<=204 ; n++ ) opdescr[ n ]=1;
117 arg_no = opdescr[ opcode ] ;
118 for(i = 0 ; i < arg_no ; i++) args[ i ] = next();
120 fprintf(fout," %3d " , opcode );
126 fprintf(fout," t%-5d := R%1d",args[0],args[1]);
128 fprintf(fout," t%-5d := %5d(R6)",args[0],args[1]);
132 fprintf(fout," t%-5d := sp%-3d.par%02d",args[0],args[1],args[2]);
136 fprintf(fout," t%-5d := t%-5d + %d",args[0],args[1],args[2]);
140 fprintf(fout," t%-5d := t%-5d",args[0],args[1]);
152 fprintf(fout," t%-5d := %2d * t%-5d",args[0],opcode-62,args[1]);
156 fprintf(fout," t%-5d := ( t%-5d > t-5d )",args[0],args[1],args[2]);
160 fprintf(fout," call sp%-3d",args[0]);
165 fprintf(fout," R%1d := t%-5d",args[1],args[0]);
167 fprintf(fout," %5d(R6) := t%-5d",-args[1],args[0]);
171 fprintf(fout," nop");
175 fprintf(fout," sp%-3d.par%02d := t%-5d",args[1],args[2],args[0]);
179 fprintf(fout," if not t%-5d goto L%-4d",args[0],args[1]);
183 fprintf(fout," if t%-5d goto L%-4d",args[0],args[1]);
187 fprintf(fout,"LASTWILL :");
191 fprintf(fout,"* line %5d",-args[0]+1);
195 fprintf(fout," Entry point:");
199 fprintf(fout,"L%-4d :",args[0]);
203 fprintf(fout," jump L%-4d",args[0]);
207 fprintf(fout,"BEGIN M%05d",args[0]);
215 fprintf(fout," backbl");
219 fprintf(fout," backpr");
223 fprintf(fout," back");
227 fprintf(fout," fin");
231 fprintf(fout," iconst t%-5d = %5d",args[0],args[1]);
235 fprintf(fout,"END OF CODE" );
239 fprintf(fout," tempvar1 t%-5d",args[0]);
243 fprintf(fout," tempvar2 t%-5d",args[0]);
247 fprintf(fout," tempvar3 t%-5d",args[0]);
251 fprintf(fout," tempvar4 t%-5d",args[0]);
255 fprintf(fout," globvar t%-5d [ desc = &5d ]",args[0],args[1]);
259 fprintf(fout," livevar t%-5d := t%-5d",args[0],args[1]);
269 fprintf(fout," proclist ");
274 for( i=0; i<arg_no; i++ ) fprintf(fout," %c = %5d ",'A'+i,args[i]);
283 if( opcode>=172 && opcode<=176 || opcode>=178 && opcode<=194 )
284 fprintf(fout,"---------------------------------------------------\n");
286 if( opcode == 200 ) break ; /* end-marker */