bc971f8ed3b6f977edb68735ef7a0ab281eaa03a
1 /* Simulation code for the CR16 processor.
2 Copyright (C) 2008 Free Software Foundation, Inc.
3 Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com>
5 This file is part of GDB, the GNU debugger.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License along
18 with this program. If not, see <http://www.gnu.org/licenses/>. */
26 #include "opcode/cr16.h"
28 static void write_header
PARAMS ((void));
29 static void write_opcodes
PARAMS ((void));
30 static void write_template
PARAMS ((void));
37 if ((argc
> 1) && (strcmp (argv
[1],"-h") == 0))
39 else if ((argc
> 1) && (strcmp (argv
[1],"-t") == 0))
52 /* Start searching from end of instruction table. */
53 const inst
*instruction
= &cr16_instruction
[NUMOPCODES
- 1];
55 /* Loop over instruction table until a full match is found. */
56 for ( ; i
< NUMOPCODES
; i
++)
58 printf("void OP_%X_%X PARAMS ((void));\t\t/* %s */\n",cr16_instruction
[i
].match
, (32 - cr16_instruction
[i
].match_bits
), cr16_instruction
[i
].mnemonic
);
63 /* write_template creates a file all required functions, ready */
64 /* to be filled out */
69 int i
= 0,j
, k
, flags
;
71 printf ("#include \"cr16_sim.h\"\n");
72 printf ("#include \"simops.h\"\n\n");
74 for ( ; i
< NUMOPCODES
; i
++)
76 if (cr16_instruction
[i
].size
!= 0)
78 printf("/* %s */\nvoid\nOP_%X_%X ()\n{\n",cr16_instruction
[i
].mnemonic
,cr16_instruction
[i
].match
,(32 - cr16_instruction
[i
].match_bits
));
84 if (cr16_instruction
[i
].operands
[k
].op_type
== dummy
)
92 printf ("printf(\" %s\\n\");\n",cr16_instruction
[i
].mnemonic
);
95 printf ("printf(\" %s\\t%%x\\n\",OP[0]);\n",cr16_instruction
[i
].mnemonic
);
98 printf ("printf(\" %s\\t%%x,%%x\\n\",OP[0],OP[1]);\n",cr16_instruction
[i
].mnemonic
);
101 printf ("printf(\" %s\\t%%x,%%x,%%x\\n\",OP[0],OP[1],OP[2]);\n",cr16_instruction
[i
].mnemonic
);
104 fprintf (stderr
,"Too many operands: %d\n",j
);
115 check_opcodes( long op
)
119 for (i
=0;i
<curop
;i
++)
120 if (Opcodes
[i
] == op
)
121 fprintf(stderr
,"DUPLICATE OPCODES: %x\n",op
);
131 /* write out opcode table */
132 printf ("#include \"cr16_sim.h\"\n");
133 printf ("#include \"simops.h\"\n\n");
134 printf ("struct simops Simops[] = {\n");
136 for ( ; i
< NUMOPCODES
; i
++)
138 if (cr16_instruction
[i
].size
!= 0)
140 printf (" { \"%s\", %ld, %d, %d, %d, \"OP_%X_%X\", OP_%X_%X, ",
141 cr16_instruction
[i
].mnemonic
, cr16_instruction
[i
].size
,
142 cr16_instruction
[i
].match_bits
, cr16_instruction
[i
].match
,
143 cr16_instruction
[i
].flags
, ((BIN(cr16_instruction
[i
].match
, cr16_instruction
[i
].match_bits
))>>(cr16_instruction
[i
].match_bits
)),
144 (32 - cr16_instruction
[i
].match_bits
),
145 ((BIN(cr16_instruction
[i
].match
, cr16_instruction
[i
].match_bits
))>>(cr16_instruction
[i
].match_bits
)), (32 - cr16_instruction
[i
].match_bits
));
150 if (cr16_instruction
[i
].operands
[k
].op_type
== dummy
)
160 int flags
= cr16_instruction
[i
].operands
[k
].op_type
;
161 int match_bits
= cr16_instruction
[i
].operands
[k
].shift
;
167 // if (cr16_instruction[i].size == 2)
170 printf ("%d,%d",cr16_instruction
[i
].operands
[k
].shift
,flags
);
180 //printf (" { 0,0,0,0,(void (*)(void))0,0,{0,0,0}},\n};\n");
181 printf (" { \"NULL\",1,8,0,0,\"OP_0_20\",OP_0_20,0,{0,0,0}},\n};\n");
This page took 0.039813 seconds and 4 git commands to generate.