12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /* $Id$ */
- /*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-
- #include <stdlib.h>
- #include <stdio.h>
- /* MAKECLASSDEF
- *
- * This program is used by several phases of the optimizer
- * to make the file classdefs.h. It reads two files:
- * - the em_mnem,h file, containing the definitions of the
- * EM mnemonics
- * - the class-file, containing tuples:
- * (mnemonic, src_class, res_class)
- * where src_class and res_class are integers telling how
- * to compute the number of bytes popped and pushed
- * by the instruction.
- * The output (standard output) is a C array.
- */
- #define TRUE 1
- #define FALSE 0
- convert(mnemfile,classfile)
- FILE *mnemfile, *classfile;
- {
- char mnem1[10], mnem2[10],def[10];
- int src,res,newcl,opc;
- newcl = TRUE;
- printf("struct class classtab[] = {\n");
- printf("\tNOCLASS,\tNOCLASS,\n");
- /* EM mnemonics start at 1, arrays in C at 0 */
- for (;;) {
- fscanf(mnemfile,"%s%s%d",def,mnem1,&opc);
- /* read a line like "#define op_aar 1" */
- if (feof(mnemfile)) break;
- if (strcmp(def,"#define") != 0) {
- error("bad mnemonic file, #define expected");
- }
- if (newcl) {
- fscanf(classfile,"%s%d%d",mnem2,&src,&res);
- /* read a line like "op_loc 8 1" */
- }
- if (feof(classfile) || strcmp(mnem1,mnem2) != 0) {
- /* there is no line for this mnemonic, so
- * it has no class.
- */
- printf("\tNOCLASS,\tNOCLASS,\n");
- newcl = FALSE;
- } else {
- printf("\tCLASS%d,\t\tCLASS%d,\n",src,res);
- /* print a line like "CLASS8, CLASS1," */
- newcl = TRUE;
- }
- }
- printf("};\n");
- }
- error(s)
- char *s;
- {
- fprintf(stderr,"%s\n",s);
- exit(-1);
- }
- main(argc,argv)
- int argc;
- char *argv[];
- {
- FILE *f1,*f2;
- if (argc != 3) {
- error("usage: makeclassdef mnemfile classfile");
- }
- if ((f1 = fopen(argv[1],"r")) == NULL) {
- error("cannot open mnemonic file");
- }
- if ((f2 = fopen(argv[2],"r")) == NULL) {
- error("cannot open class file");
- }
- convert(f1,f2);
- exit(0);
- }
|