|
|
1.1 root 1: #include <stdio.h>
2: #include "m88k-opcode.h"
3:
4: static int reg(void);
5: static int creg(void);
6: static int cnst(void);
7: static void print_cond(void);
8: static void print_cmp(void);
9:
10: void
11: main(
12: int argc,
13: char *argv[],
14: char *envp[])
15: {
16: long i, j;
17:
18: for(i = 0; i < NUMOPCODES - 1; i++){
19: printf("\t%s\t", m88k_opcodes[i].name);
20: if(m88k_opcodes[i].op[0].type == NIL)
21: printf("\n");
22: for(j = 0; j < 3 && m88k_opcodes[i].op[j].type != NIL; j++){
23: switch(m88k_opcodes[i].op[j].type){
24: case CNST:
25: #ifdef SIGNED_IMMEDIATES
26: case SCNST:
27: #endif
28: printf("0x%04x", cnst() );
29: break;
30: case REG:
31: printf("r%d", reg() );
32: break;
33: case BF:
34: printf("%d<%d>", reg(), reg() );
35: break;
36: case REGSC:
37: printf("[r%d]", reg() );
38: break;
39: case CRREG:
40: printf("cr%d", creg() );
41: break;
42: case FCRREG:
43: printf("fcr%d", creg() );
44: break;
45: case PCREL:
46: printf("undef");
47: break;
48: case CONDMASK:
49: print_cond();
50: break;
51: case CMPRSLT:
52: print_cmp();
53: break;
54: case ROT:
55: printf("<%d>", reg() );
56: break;
57: case E4ROT:
58: printf("<%d>", creg() & ~0x3);
59: break;
60: case EREG:
61: printf("r%d", reg() & ~0x1);
62: break;
63: case XREG:
64: printf("x%d", reg());
65: break;
66: }
67: if(j == 2 || m88k_opcodes[i].op[j+1].type == NIL)
68: printf("\n");
69: else if(m88k_opcodes[i].op[j+1].type != REGSC)
70: printf(",");
71: }
72: }
73: }
74:
75: static
76: int
77: reg(void)
78: {
79: static int x = 1;
80:
81: x = (x + 1) & 0x1f;
82: return(x);
83: }
84:
85: static
86: int
87: creg(void)
88: {
89: static int x = 1;
90:
91: x = (x + 1) & 0x3f;
92: return(x);
93: }
94:
95: static
96: int
97: cnst(void)
98: {
99: static int x = 1;
100:
101: x = (x + 1) & 0xffff;
102: return(x);
103: }
104:
105: static
106: void
107: print_cond(void)
108: {
109: static int x = 1;
110:
111: x = (x + 1) & 0x1f;
112: switch(x){
113: case 0x02:
114: printf("eq0");
115: break;
116: case 0x0d:
117: printf("ne0");
118: break;
119: case 0x01:
120: printf("gt0");
121: break;
122: case 0x0c:
123: printf("lt0");
124: break;
125: case 0x03:
126: printf("ge0");
127: break;
128: case 0x0e:
129: printf("le0");
130: break;
131: default:
132: printf("%d", x);
133: }
134: }
135:
136: static
137: char *cmpslot[] = { "**", "**", "eq", "ne", "gt", "le", "lt", "ge",
138: "hi", "ls", "lo", "hs", "be", "nb", "he", "nh" };
139: static
140: void
141: print_cmp(void)
142: {
143: static int x = 1;
144:
145: x = (x + 1) & 0x1f;
146: if(x < 2 || x > 15)
147: printf("%d", x);
148: else
149: printf("%s", cmpslot[x]);
150: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.