38 static char staticbuf[1000];
41 while (*l && i <
sizeof(staticbuf)) {
43 if (u >=
'a' && u <=
'z')
47 if (i ==
sizeof(staticbuf))
54 int main(
int argc,
char *argv[])
59 fprintf(stderr,
"usage: %s arch Arch\n", argv[0]);
60 fprintf(stderr,
"Example: %s alpha Alpha\n", argv[0]);
61 fprintf(stderr,
" or: %s arm ARM\n", argv[0]);
69 printf(
"\n/* AUTOMATICALLY GENERATED! Do not edit. */\n\n");
71 printf(
"#include <assert.h>\n");
72 printf(
"#include \"debugger.h\"\n");
74 printf(
"#define DYNTRANS_MAX_VPH_TLB_ENTRIES " 75 "%s_MAX_VPH_TLB_ENTRIES\n",
uppercase(a));
76 printf(
"#define DYNTRANS_ARCH %s\n", a);
77 printf(
"#define DYNTRANS_%s\n",
uppercase(a));
80 printf(
"#ifndef DYNTRANS_32\n");
81 printf(
"#define DYNTRANS_L2N %s_L2N\n" 82 "#define DYNTRANS_L3N %s_L3N\n" 83 "#if !defined(%s_L2N) || !defined(%s_L3N)\n" 84 "#error arch_L2N, and arch_L3N must be defined for this arch!\n" 87 printf(
"#define DYNTRANS_L2_64_TABLE %s_l2_64_table\n" 88 "#define DYNTRANS_L3_64_TABLE %s_l3_64_table\n", a, a);
92 printf(
"#ifndef DYNTRANS_PAGESIZE\n" 93 "#define DYNTRANS_PAGESIZE 4096\n" 96 printf(
"#define DYNTRANS_IC %s_instr_call\n", a);
97 printf(
"#define DYNTRANS_IC_ENTRIES_PER_PAGE " 98 "%s_IC_ENTRIES_PER_PAGE\n",
uppercase(a));
99 printf(
"#define DYNTRANS_INSTR_ALIGNMENT_SHIFT " 100 "%s_INSTR_ALIGNMENT_SHIFT\n",
uppercase(a));
101 printf(
"#define DYNTRANS_TC_PHYSPAGE %s_tc_physpage\n", a);
102 printf(
"#define DYNTRANS_INVALIDATE_TLB_ENTRY " 103 "%s_invalidate_tlb_entry\n", a);
104 printf(
"#define DYNTRANS_ADDR_TO_PAGENR %s_ADDR_TO_PAGENR\n",
106 printf(
"#define DYNTRANS_PC_TO_IC_ENTRY %s_PC_TO_IC_ENTRY\n",
108 printf(
"#define DYNTRANS_TC_ALLOCATE " 109 "%s_tc_allocate_default_page\n", a);
110 printf(
"#define DYNTRANS_TC_PHYSPAGE %s_tc_physpage\n", a);
111 printf(
"#define DYNTRANS_PC_TO_POINTERS %s_pc_to_pointers\n", a);
112 printf(
"#define DYNTRANS_PC_TO_POINTERS_GENERIC " 113 "%s_pc_to_pointers_generic\n", a);
114 printf(
"#define COMBINE_INSTRUCTIONS %s_combine_instructions\n", a);
115 printf(
"#define DISASSEMBLE %s_cpu_disassemble_instr\n", a);
117 printf(
"\nextern volatile int single_step, single_step_breakpoint;" 118 "\nextern int debugger_n_steps_left_before_interaction;\n" 119 "extern int old_show_trace_tree;\n" 120 "extern int old_instruction_trace;\n" 121 "extern int old_quiet_mode;\n" 122 "extern int quiet_mode;\n");
124 printf(
"\n/* instr uses the same names as in " 125 "cpu_%s_instr.c */\n#define instr(n) %s_instr_ ## n\n\n", a, a);
127 printf(
"#ifdef DYNTRANS_DUALMODE_32\n" 128 "#define instr32(n) %s32_instr_ ## n\n\n", a);
129 printf(
"#endif\n\n");
131 printf(
"\n#define X(n) void %s_instr_ ## n(struct cpu *cpu, \\\n" 132 " struct %s_instr_call *ic)\n", a, a);
134 printf(
"\n/*\n * nothing: Do nothing.\n *\n" 135 " * The difference between this function and a \"nop\" " 136 "instruction is that\n * this function does not increase " 137 "the program counter. It is used to \"get out\" of running in " 138 "translated\n * mode.\n */\n");
139 printf(
"X(nothing)\n{\n");
140 printf(
"\tcpu->cd.%s.next_ic --;\n", a);
144 if (strcasecmp(argv[1],
"sh") == 0) {
145 printf(
"static struct %s_instr_call nothing_call = { " 146 "instr(nothing), {0,0} };\n", a);
148 printf(
"static struct %s_instr_call nothing_call = { " 149 "instr(nothing), {0,0,0} };\n", a);
char * uppercase(char *l)
int main(int argc, char *argv[])