Line 85... |
Line 85... |
void print_insns (cuc_insn *insn, int ninsn, int verbose)
|
void print_insns (cuc_insn *insn, int ninsn, int verbose)
|
{
|
{
|
int i, j;
|
int i, j;
|
for (i = 0; i < ninsn; i++) {
|
for (i = 0; i < ninsn; i++) {
|
dep_list *l = insn[i].dep;
|
dep_list *l = insn[i].dep;
|
printf ("%4x%c %-4s ", i, insn[i].index >= 0 ? ':' : '?', cuc_insn_name (&insn[i]));
|
PRINTF ("%4x%c %-4s ", i, insn[i].index >= 0 ? ':' : '?', cuc_insn_name (&insn[i]));
|
if (verbose) {
|
if (verbose) {
|
printf ("%-20s insn = %08x, index = %i, type = %04x ",
|
PRINTF ("%-20s insn = %08x, index = %i, type = %04x ",
|
insn[i].disasm, insn[i].insn, insn[i].index, insn[i].type);
|
insn[i].disasm, insn[i].insn, insn[i].index, insn[i].type);
|
} else printf ("type = %04x ", insn[i].type);
|
} else PRINTF ("type = %04x ", insn[i].type);
|
for (j = 0; j < MAX_OPERANDS; j++) {
|
for (j = 0; j < MAX_OPERANDS; j++) {
|
if (insn[i].opt[j] & OPT_DEST) printf ("*");
|
if (insn[i].opt[j] & OPT_DEST) PRINTF ("*");
|
switch (insn[i].opt[j] & ~OPT_DEST) {
|
switch (insn[i].opt[j] & ~OPT_DEST) {
|
case OPT_NONE: break;
|
case OPT_NONE: break;
|
case OPT_CONST: if (insn[i].type & IT_COND && (insn[i].index == II_CMOV
|
case OPT_CONST: if (insn[i].type & IT_COND && (insn[i].index == II_CMOV
|
|| insn[i].index == II_ADD)) printf ("%x, ", insn[i].op[j]);
|
|| insn[i].index == II_ADD)) PRINTF ("%x, ", insn[i].op[j]);
|
else printf ("0x%08x, ", insn[i].op[j]); break;
|
else PRINTF ("0x%08x, ", insn[i].op[j]); break;
|
case OPT_JUMP: printf ("J%x ", insn[i].op[j]); break;
|
case OPT_JUMP: PRINTF ("J%x ", insn[i].op[j]); break;
|
case OPT_REGISTER: printf ("r%i, ", insn[i].op[j]); break;
|
case OPT_REGISTER: PRINTF ("r%i, ", insn[i].op[j]); break;
|
case OPT_REF: printf ("[%x.%x], ", REF_BB(insn[i].op[j]), REF_I(insn[i].op[j])); break;
|
case OPT_REF: PRINTF ("[%x.%x], ", REF_BB(insn[i].op[j]), REF_I(insn[i].op[j])); break;
|
case OPT_BB: printf ("BB "); print_bb_num (insn[i].op[j]); printf (", "); break;
|
case OPT_BB: PRINTF ("BB "); print_bb_num (insn[i].op[j]); PRINTF (", "); break;
|
case OPT_LRBB: printf ("LRBB, "); break;
|
case OPT_LRBB: PRINTF ("LRBB, "); break;
|
default:
|
default:
|
fprintf (stderr, "Invalid operand type %s(%x.%x) = %x\n",
|
fprintf (stderr, "Invalid operand type %s(%x.%x) = %x\n",
|
cuc_insn_name (&insn[i]), i, j, insn[i].opt[j]);
|
cuc_insn_name (&insn[i]), i, j, insn[i].opt[j]);
|
assert (0);
|
assert (0);
|
}
|
}
|
}
|
}
|
if (l) {
|
if (l) {
|
printf ("\n\tdep:");
|
PRINTF ("\n\tdep:");
|
while (l) {
|
while (l) {
|
printf (" [%x.%x],", REF_BB (l->ref), REF_I (l->ref));
|
PRINTF (" [%x.%x],", REF_BB (l->ref), REF_I (l->ref));
|
l = l->next;
|
l = l->next;
|
}
|
}
|
}
|
}
|
printf ("\n");
|
PRINTF ("\n");
|
}
|
}
|
}
|
}
|
|
|
void add_dep (dep_list **list, int dep)
|
void add_dep (dep_list **list, int dep)
|
{
|
{
|
Line 861... |
Line 861... |
change_insn_type (&insn[i], II_NOP);
|
change_insn_type (&insn[i], II_NOP);
|
}
|
}
|
}
|
}
|
}
|
}
|
if (cuc_debug >= 2) {
|
if (cuc_debug >= 2) {
|
printf ("saved regs ");
|
PRINTF ("saved regs ");
|
for (i = 0; i < MAX_REGS; i++) printf ("%i:%i ", i, f->saved_regs[i]);
|
for (i = 0; i < MAX_REGS; i++) PRINTF ("%i:%i ", i, f->saved_regs[i]);
|
printf ("\n");
|
PRINTF ("\n");
|
}
|
}
|
return remove_nops (f);
|
return remove_nops (f);
|
}
|
}
|
|
|
/* Determine inputs and outputs */
|
/* Determine inputs and outputs */
|
Line 1308... |
Line 1308... |
/* Displays shared instructions */
|
/* Displays shared instructions */
|
void print_shared (cuc_func *rf, cuc_shared_item *shared, int nshared)
|
void print_shared (cuc_func *rf, cuc_shared_item *shared, int nshared)
|
{
|
{
|
int i, first = 1;
|
int i, first = 1;
|
for (i = 0; i < nshared; i++) {
|
for (i = 0; i < nshared; i++) {
|
printf ("%s%s%s", first ? "" : "-", cuc_insn_name (&rf->INSN(shared[i].ref)),
|
PRINTF ("%s%s%s", first ? "" : "-", cuc_insn_name (&rf->INSN(shared[i].ref)),
|
shared[i].cmatch ? "!" : "");
|
shared[i].cmatch ? "!" : "");
|
first = 0;
|
first = 0;
|
}
|
}
|
}
|
}
|
|
|
Line 1323... |
Line 1323... |
We can find sequence in reference function, as pointed from "shared" */
|
We can find sequence in reference function, as pointed from "shared" */
|
void csm_gen (cuc_func *f, cuc_func *rf, cuc_shared_item *shared, int nshared)
|
void csm_gen (cuc_func *f, cuc_func *rf, cuc_shared_item *shared, int nshared)
|
{
|
{
|
int b, i, j, cnt = 0;
|
int b, i, j, cnt = 0;
|
#warning some code here (2)
|
#warning some code here (2)
|
printf ("Replacing: ");
|
PRINTF ("Replacing: ");
|
print_shared (rf, shared, nshared);
|
print_shared (rf, shared, nshared);
|
|
|
for (b = 0; b < f->num_bb; b++)
|
for (b = 0; b < f->num_bb; b++)
|
for (i = 0; i < f->bb[b].ninsn; i++) {
|
for (i = 0; i < f->bb[b].ninsn; i++) {
|
}
|
}
|
|
|
printf ("\nFound %i matches.\n", cnt);
|
PRINTF ("\nFound %i matches.\n", cnt);
|
}
|
}
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|