37 char *
cmov[
N_CMOV] = {
"lbs",
"lbc",
"eq",
"ne",
"lt",
"ge",
"le",
"gt" };
40 int main(
int argc,
char *argv[])
42 int load, size, zero, n, msk, llsc;
43 int ra, rc, lo, scale, imm, not,
op, quad;
45 printf(
"\n/* AUTOMATICALLY GENERATED! Do not edit. */\n\n");
49 for (imm = 0; imm <= 1; imm ++)
50 for (quad = 0; quad <= 1; quad ++)
51 for (scale = 0; scale <= 8; scale += 4)
52 for (
op = 0;
op <= 1;
op ++) {
53 printf(
"#define ALU_N alpha_instr_");
56 printf(
"%s%s",
op?
"sub" :
"add", quad?
"q" :
"l");
62 printf(
"#define ALU_IMM\n");
64 printf(
"#define ALU_LONG\n");
66 printf(
"#define ALU_SUB\n");
68 printf(
"#define ALU_ADD\n");
70 printf(
"#define ALU_S%i\n", scale);
72 printf(
"#include \"cpu_alpha_instr_alu.cc\"\n");
75 printf(
"#undef ALU_IMM\n");
77 printf(
"#undef ALU_LONG\n");
79 printf(
"#undef ALU_SUB\n");
81 printf(
"#undef ALU_ADD\n");
83 printf(
"#undef ALU_S%i\n", scale);
85 printf(
"#undef ALU_N\n");
89 for (imm = 0; imm <= 1; imm ++)
90 for (not = 0; not <= 1; not ++)
91 for (
op = 0;
op < 7;
op ++) {
94 printf(
"#define ALU_N alpha_instr_");
96 case 0: printf(
"and");
break;
97 case 1: printf(
"or");
break;
98 case 2: printf(
"xor");
break;
99 case 3: printf(
"zap");
break;
100 case 4: printf(
"sll");
break;
101 case 5: printf(
"srl");
break;
102 case 6: printf(
"sra");
break;
110 printf(
"#define ALU_IMM\n");
112 case 0: printf(
"#define ALU_AND\n");
break;
113 case 1: printf(
"#define ALU_OR\n");
break;
114 case 2: printf(
"#define ALU_XOR\n");
break;
115 case 3: printf(
"#define ALU_ZAP\n");
break;
116 case 4: printf(
"#define ALU_SLL\n");
break;
117 case 5: printf(
"#define ALU_SRL\n");
break;
118 case 6: printf(
"#define ALU_SRA\n");
break;
121 printf(
"#define ALU_NOT\n");
122 printf(
"#include \"cpu_alpha_instr_alu.cc\"\n");
125 printf(
"#undef ALU_IMM\n");
127 printf(
"#undef ALU_NOT\n");
129 case 0: printf(
"#undef ALU_AND\n");
break;
130 case 1: printf(
"#undef ALU_OR\n");
break;
131 case 2: printf(
"#undef ALU_XOR\n");
break;
132 case 3: printf(
"#undef ALU_ZAP\n");
break;
133 case 4: printf(
"#undef ALU_SLL\n");
break;
134 case 5: printf(
"#undef ALU_SRL\n");
break;
135 case 6: printf(
"#undef ALU_SRA\n");
break;
138 printf(
"#undef ALU_N\n");
141 printf(
"#define ALU_CMP\n");
142 for (imm = 0; imm <= 1; imm ++)
144 printf(
"#define ALU_N alpha_instr_cmp%s",
cmps[
op]);
150 printf(
"#define ALU_IMM\n");
153 printf(
"#define ALU_UNSIGNED\n");
155 printf(
"#define ALU_CMP_LT\n");
157 printf(
"#define ALU_CMP_LE\n");
159 printf(
"#define ALU_CMP_EQ\n");
161 printf(
"#include \"cpu_alpha_instr_alu.cc\"\n");
164 printf(
"#undef ALU_UNSIGNED\n");
166 printf(
"#undef ALU_CMP_LT\n");
168 printf(
"#undef ALU_CMP_LE\n");
170 printf(
"#undef ALU_CMP_EQ\n");
172 printf(
"#undef ALU_IMM\n");
173 printf(
"#undef ALU_N\n");
175 printf(
"#undef ALU_CMP\n");
177 printf(
"#define ALU_CMOV\n");
178 for (imm = 0; imm <= 1; imm ++)
180 printf(
"#define ALU_N alpha_instr_cmov%s",
cmov[
op]);
185 printf(
"#define ALU_IMM\n");
186 printf(
"#define ALU_CMOV_%s\n",
cmov[
op]);
187 printf(
"#include \"cpu_alpha_instr_alu.cc\"\n");
188 printf(
"#undef ALU_CMOV_%s\n",
cmov[
op]);
190 printf(
"#undef ALU_IMM\n");
191 printf(
"#undef ALU_N\n");
193 printf(
"#undef ALU_CMOV\n");
195 printf(
"#define ALU_CMPBGE\n");
196 for (imm = 0; imm <= 1; imm ++) {
197 printf(
"#define ALU_N alpha_instr_cmpbge");
202 printf(
"#define ALU_IMM\n");
203 printf(
"#include \"cpu_alpha_instr_alu.cc\"\n");
205 printf(
"#undef ALU_IMM\n");
206 printf(
"#undef ALU_N\n");
208 printf(
"#undef ALU_CMPBGE\n");
210 for (imm = 0; imm <= 1; imm ++)
211 for (lo = 0; lo <= 1; lo ++)
212 for (msk = 0; msk <= 2; msk ++)
213 for (size=0; size<4; size++) {
214 if (size==0 && lo==0)
217 case 0: printf(
"#define ALU_MSK\n");
break;
218 case 1: printf(
"#define ALU_EXT\n");
break;
219 case 2: printf(
"#define ALU_INS\n");
break;
222 case 0: printf(
"#define ALU_N alpha_instr_msk");
break;
223 case 1: printf(
"#define ALU_N alpha_instr_ext");
break;
224 case 2: printf(
"#define ALU_N alpha_instr_ins");
break;
235 printf(
"#define ALU_IMM\n");
237 case 0: printf(
"#define ALU_B\n");
break;
238 case 1: printf(
"#define ALU_W\n");
break;
239 case 2: printf(
"#define ALU_L\n");
break;
240 case 3: printf(
"#define ALU_Q\n");
break;
243 printf(
"#define ALU_LO\n");
244 printf(
"#include \"cpu_alpha_instr_alu.cc\"\n");
246 case 0: printf(
"#undef ALU_B\n");
break;
247 case 1: printf(
"#undef ALU_W\n");
break;
248 case 2: printf(
"#undef ALU_L\n");
break;
249 case 3: printf(
"#undef ALU_Q\n");
break;
252 case 0: printf(
"#undef ALU_MSK\n");
break;
253 case 1: printf(
"#undef ALU_EXT\n");
break;
254 case 2: printf(
"#undef ALU_INS\n");
break;
257 printf(
"#undef ALU_LO\n");
259 printf(
"#undef ALU_IMM\n");
260 printf(
"#undef ALU_N\n");
266 for (llsc=0; llsc<=1; llsc++)
268 for (zero=0; zero<=1; zero++)
269 for (size=0; size<4; size++) {
270 if (llsc && size < 2)
273 printf(
"#define LS_IGNORE_OFFSET\n");
275 printf(
"#define LS_LOAD\n");
277 printf(
"#define LS_LLSC\n");
279 case 0: printf(
"#define LS_B\n");
break;
280 case 1: printf(
"#define LS_W\n");
break;
281 case 2: printf(
"#define LS_L\n");
break;
282 case 3: printf(
"#define LS_Q\n");
break;
284 printf(
"#define LS_GENERIC_N alpha_generic_");
293 printf(
"#define LS_N alpha_instr_");
304 printf(
"#include \"cpu_alpha_instr_loadstore.cc\"\n");
305 printf(
"#undef LS_N\n");
306 printf(
"#undef LS_GENERIC_N\n");
308 case 0: printf(
"#undef LS_B\n");
break;
309 case 1: printf(
"#undef LS_W\n");
break;
310 case 2: printf(
"#undef LS_L\n");
break;
311 case 3: printf(
"#undef LS_Q\n");
break;
314 printf(
"#undef LS_LOAD\n");
316 printf(
"#undef LS_LLSC\n");
318 printf(
"#undef LS_IGNORE_OFFSET\n");
324 printf(
"#define LS_UNALIGNED\n");
328 printf(
"#define LS_LOAD\n");
329 printf(
"#define LS_Q\n");
330 printf(
"#define LS_GENERIC_N alpha_generic_");
338 printf(
"#define LS_N alpha_instr_");
346 printf(
"#include \"cpu_alpha_instr_loadstore.cc\"\n");
347 printf(
"#undef LS_N\n");
348 printf(
"#undef LS_GENERIC_N\n");
349 printf(
"#undef LS_Q\n");
351 printf(
"#undef LS_LOAD\n");
353 printf(
"#undef LS_UNALIGNED\n");
356 printf(
"\n\nvoid (*alpha_loadstore[32])(struct cpu *, struct "
357 "alpha_instr_call *) = {\n");
359 for (llsc = 0; llsc <= 1; llsc ++)
361 for (zero=0; zero<=1; zero++)
362 for (size=0; size<4; size++) {
363 printf(
"\talpha_instr_");
364 if (llsc && (size != 2 && size != 3)) {
384 for (ra = 0; ra < 32; ra ++)
385 for (rc = 0; rc < 31; rc ++)
387 printf(
"static void alpha_instr_mov_%i_%i(struct cpu"
388 " *cpu, struct alpha_instr_call *ic)\n", ra, rc);
389 printf(
"{ cpu->cd.alpha.r[%i] = ", rc);
393 printf(
"cpu->cd.alpha.r[%i]", ra);
397 printf(
"\n\nvoid (*alpha_mov_r_r[32*31])(struct cpu *, struct "
398 "alpha_instr_call *) = {\n");
400 for (rc = 0; rc < 31; rc ++)
401 for (ra = 0; ra < 32; ra ++) {
403 printf(
"\talpha_instr_nop");
405 printf(
"\talpha_instr_mov_%i_%i", ra, rc);