36 printf(
"X(multi_%cw_%i_%ce)\n{\n",
37 store?
's' :
'l', n, endianness?
'b' :
'l');
39 printf(
"\tuint32_t *page;\n" 40 "\tMODE_uint_t rX = reg(ic[0].arg[1])");
46 printf(
"\tMODE_uint_t addr%i = rX + (int32_t)ic[%i].arg[2];\n",
49 printf(
"\tuint32_t index%i = addr%i >> 12;\n", i, i);
51 printf(
"\tpage = (uint32_t *) cpu->cd.mips.host_%s[index0];\n",
52 store?
"store" :
"load");
54 printf(
"\tif (cpu->delay_slot ||\n" 57 printf(
" || (addr%i & 3)", i);
60 printf(
" || index%i != index0", i);
70 printf(
"\t\tmips32_loadstore[%i](cpu, ic);\n", nr);
72 printf(
"\t\treturn;\n\t}\n");
75 printf(
"\taddr%i = (addr%i >> 2) & 0x3ff;\n", i, i);
79 printf(
"\tr%i = reg(ic[%i].arg[0]);\n", i, i);
81 printf(
"\tr%i = %cE32_TO_HOST(r%i);\n", i,
82 endianness?
'B' :
'L', i);
84 printf(
"\tpage[addr%i] = r%i;\n", i, i);
87 printf(
"\tr%i = page[addr%i];\n", i, i);
89 printf(
"\tr%i = %cE32_TO_HOST(r%i);\n", i,
90 endianness?
'B' :
'L', i);
92 printf(
"\treg(ic[%i].arg[0]) = r%i;\n", i, i);
95 printf(
"\tcpu->n_translated_instrs += %i;\n", n - 1);
96 printf(
"\tcpu->cd.mips.next_ic += %i;\n", n - 1);
102 int main(
int argc,
char *argv[])
104 int store, endianness, n;
106 printf(
"\n/* AUTOMATICALLY GENERATED! Do not edit. */\n\n");
108 for (endianness=0; endianness<=1; endianness++)
109 for (store=0; store<=1; store++)
void generate_multi(int store, int endianness, int n)
int main(int argc, char *argv[])