diff options
-rw-r--r-- | sim/cr16/gencode.c | 132 |
1 files changed, 62 insertions, 70 deletions
diff --git a/sim/cr16/gencode.c b/sim/cr16/gencode.c index bc971f8..e772fac 100644 --- a/sim/cr16/gencode.c +++ b/sim/cr16/gencode.c @@ -14,8 +14,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License along - with this program. If not, see <http://www.gnu.org/licenses/>. */ + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "config.h" @@ -30,9 +30,7 @@ static void write_opcodes PARAMS ((void)); static void write_template PARAMS ((void)); int -main (argc, argv) - int argc; - char *argv[]; +main (int argc, char *argv[]) { if ((argc > 1) && (strcmp (argv[1],"-h") == 0)) write_header(); @@ -60,8 +58,8 @@ write_header () } -/* write_template creates a file all required functions, ready */ -/* to be filled out */ +/* write_template creates a file all required functions, + ready to be filled out. */ static void write_template () @@ -74,37 +72,37 @@ write_template () for ( ; i < NUMOPCODES; i++) { if (cr16_instruction[i].size != 0) - { - printf("/* %s */\nvoid\nOP_%X_%X ()\n{\n",cr16_instruction[i].mnemonic,cr16_instruction[i].match,(32 - cr16_instruction[i].match_bits)); - - /* count operands */ - j = 0; - for (k=0;k<5;k++) - { - if (cr16_instruction[i].operands[k].op_type == dummy) +{ + printf("/* %s */\nvoid\nOP_%X_%X ()\n{\n",cr16_instruction[i].mnemonic,cr16_instruction[i].match,(32 - cr16_instruction[i].match_bits)); + + /* count operands. */ + j = 0; + for (k=0;k<5;k++) + { + if (cr16_instruction[i].operands[k].op_type == dummy) break; else j++; - } - switch (j) - { - case 0: - printf ("printf(\" %s\\n\");\n",cr16_instruction[i].mnemonic); - break; - case 1: - printf ("printf(\" %s\\t%%x\\n\",OP[0]);\n",cr16_instruction[i].mnemonic); - break; - case 2: - printf ("printf(\" %s\\t%%x,%%x\\n\",OP[0],OP[1]);\n",cr16_instruction[i].mnemonic); - break; - case 3: - printf ("printf(\" %s\\t%%x,%%x,%%x\\n\",OP[0],OP[1],OP[2]);\n",cr16_instruction[i].mnemonic); - break; - default: - fprintf (stderr,"Too many operands: %d\n",j); - } - printf ("}\n\n"); - } + } + switch (j) + { + case 0: + printf ("printf(\" %s\\n\");\n",cr16_instruction[i].mnemonic); + break; + case 1: + printf ("printf(\" %s\\t%%x\\n\",OP[0]);\n",cr16_instruction[i].mnemonic); + break; + case 2: + printf ("printf(\" %s\\t%%x,%%x\\n\",OP[0],OP[1]);\n",cr16_instruction[i].mnemonic); + break; + case 3: + printf ("printf(\" %s\\t%%x,%%x,%%x\\n\",OP[0],OP[1],OP[2]);\n",cr16_instruction[i].mnemonic); + break; + default: + fprintf (stderr,"Too many operands: %d\n",j); + } + printf ("}\n\n"); +} } } @@ -127,56 +125,50 @@ write_opcodes () { int i = 0, j = 0, k; - unsigned long mask; - /* write out opcode table */ + /* write out opcode table. */ printf ("#include \"cr16_sim.h\"\n"); printf ("#include \"simops.h\"\n\n"); printf ("struct simops Simops[] = {\n"); - for ( ; i < NUMOPCODES; i++) + for (i = NUMOPCODES-1; i >= 0; --i) { if (cr16_instruction[i].size != 0) - { +{ printf (" { \"%s\", %ld, %d, %d, %d, \"OP_%X_%X\", OP_%X_%X, ", cr16_instruction[i].mnemonic, cr16_instruction[i].size, cr16_instruction[i].match_bits, cr16_instruction[i].match, cr16_instruction[i].flags, ((BIN(cr16_instruction[i].match, cr16_instruction[i].match_bits))>>(cr16_instruction[i].match_bits)), - (32 - cr16_instruction[i].match_bits), + (32 - cr16_instruction[i].match_bits), ((BIN(cr16_instruction[i].match, cr16_instruction[i].match_bits))>>(cr16_instruction[i].match_bits)), (32 - cr16_instruction[i].match_bits)); - j = 0; - for (k=0;k<5;k++) - { - if (cr16_instruction[i].operands[k].op_type == dummy) + j = 0; + for (k=0;k<5;k++) + { + if (cr16_instruction[i].operands[k].op_type == dummy) break; else j++; - } - printf ("%d, ",j); - - j = 0; - for (k=0;k<4;k++) - { - int flags = cr16_instruction[i].operands[k].op_type; - int match_bits = cr16_instruction[i].operands[k].shift; - { - if (j == 0) - printf ("{"); - else - printf (", "); - // if (cr16_instruction[i].size == 2) - // match_bits += 15; - printf ("{"); - printf ("%d,%d",cr16_instruction[i].operands[k].shift,flags); - printf ("}"); - j = 1; - } - } - if (j) - printf ("}"); - printf ("},\n"); - } } - //printf (" { 0,0,0,0,(void (*)(void))0,0,{0,0,0}},\n};\n"); + printf ("%d, ",j); + + j = 0; + for (k=0;k<4;k++) + { + int optype = cr16_instruction[i].operands[k].op_type; + int shift = cr16_instruction[i].operands[k].shift; + if (j == 0) + printf ("{"); + else + printf (", "); + printf ("{"); + printf ("%d,%d",optype, shift); + printf ("}"); + j = 1; + } + if (j) + printf ("}"); + printf ("},\n"); + } + } printf (" { \"NULL\",1,8,0,0,\"OP_0_20\",OP_0_20,0,{0,0,0}},\n};\n"); } |