58 |
|
printf ("#include \"sysdeps.h\"\n"); |
59 |
|
printf ("#include \"readcpu.h\"\n"); |
60 |
|
printf ("struct instr_def defs68k[] = {\n"); |
61 |
< |
#if 0 |
62 |
< |
tablef = fopen("table68k","r"); |
61 |
> |
#ifdef WIN32 |
62 |
> |
tablef = fopen(argc > 1 ? argv[1] : "table68k","r"); |
63 |
|
if (tablef == NULL) { |
64 |
|
fprintf(stderr, "table68k not found\n"); |
65 |
|
exit(1); |
76 |
|
char opcstr[256]; |
77 |
|
int bitpos[16]; |
78 |
|
int flagset[5], flaguse[5]; |
79 |
+ |
char cflow; |
80 |
|
|
81 |
|
unsigned int bitmask,bitpattern; |
82 |
|
int n_variable; |
108 |
|
case 'r': currbit = bitr; break; |
109 |
|
case 'R': currbit = bitR; break; |
110 |
|
case 'z': currbit = bitz; break; |
111 |
+ |
case 'E': currbit = bitE; break; |
112 |
|
case 'p': currbit = bitp; break; |
113 |
|
default: abort(); |
114 |
|
} |
158 |
|
getnextch(); |
159 |
|
switch(nextch){ |
160 |
|
case '-': flagset[i] = fa_unset; break; |
159 |
– |
case '/': flagset[i] = fa_isjmp; break; |
161 |
|
case '0': flagset[i] = fa_zero; break; |
162 |
|
case '1': flagset[i] = fa_one; break; |
163 |
|
case 'x': flagset[i] = fa_dontcare; break; |
177 |
|
getnextch(); |
178 |
|
switch(nextch){ |
179 |
|
case '-': flaguse[i] = fu_unused; break; |
179 |
– |
case '/': flaguse[i] = fu_isjmp; break; |
180 |
– |
case '+': flaguse[i] = fu_maybecc; break; |
180 |
|
case '?': flaguse[i] = fu_unknown; break; |
181 |
|
default: flaguse[i] = fu_used; break; |
182 |
|
} |
186 |
|
while (isspace(nextch)) |
187 |
|
getnextch(); |
188 |
|
|
189 |
+ |
if (nextch != ':') /* Get control flow information */ |
190 |
+ |
abort(); |
191 |
+ |
|
192 |
+ |
cflow = 0; |
193 |
+ |
for(i = 0; i < 2; i++) { |
194 |
+ |
getnextch(); |
195 |
+ |
switch(nextch){ |
196 |
+ |
case '-': break; |
197 |
+ |
case 'R': cflow |= fl_return; break; |
198 |
+ |
case 'B': cflow |= fl_branch; break; |
199 |
+ |
case 'J': cflow |= fl_jump; break; |
200 |
+ |
case 'T': cflow |= fl_trap; break; |
201 |
+ |
default: abort(); |
202 |
+ |
} |
203 |
+ |
} |
204 |
+ |
|
205 |
+ |
getnextch(); |
206 |
+ |
while (isspace(nextch)) |
207 |
+ |
getnextch(); |
208 |
+ |
|
209 |
|
if (nextch != ':') /* Get source/dest usage information */ |
210 |
|
abort(); |
211 |
|
|
253 |
|
for(i = 0; i < 5; i++) { |
254 |
|
printf("{ %d, %d }%c ", flaguse[i], flagset[i], i == 4 ? ' ' : ','); |
255 |
|
} |
256 |
< |
printf("}, %d, \"%s\"}", sduse, opstrp); |
256 |
> |
printf("}, %d, %d, \"%s\"}", cflow, sduse, opstrp); |
257 |
|
} |
258 |
|
} |
259 |
|
printf("};\nint n_defs68k = %d;\n", no_insns); |