aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/cr16/gencode.c132
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");
}