Line 260... |
Line 260... |
} while (i <= MAX_UNROLL && ut->new_time > cut->new_time);
|
} while (i <= MAX_UNROLL && ut->new_time > cut->new_time);
|
|
|
/* Sort the timings */
|
/* Sort the timings */
|
#if 0
|
#if 0
|
if (cuc_debug >= 3)
|
if (cuc_debug >= 3)
|
for (i = 0; i < nt; i++) printf ("%i:%i,%i: %icyc\n",
|
for (i = 0; i < nt; i++) PRINTF ("%i:%i,%i: %icyc\n",
|
t[i].b, t[i].preroll, t[i].unroll, t[i].new_time);
|
t[i].b, t[i].preroll, t[i].unroll, t[i].new_time);
|
#endif
|
#endif
|
|
|
qsort (t, nt, sizeof (cuc_timings), (int (*)(const void *, const void *))tim_comp);
|
qsort (t, nt, sizeof (cuc_timings), (int (*)(const void *, const void *))tim_comp);
|
|
|
Line 345... |
Line 345... |
/*static */void print_option (int bb_no, int f_opt)
|
/*static */void print_option (int bb_no, int f_opt)
|
{
|
{
|
char tmp1[10];
|
char tmp1[10];
|
char tmp2[10];
|
char tmp2[10];
|
sprintf (tmp2, "%s", gen_option (tmp1, bb_no, f_opt));
|
sprintf (tmp2, "%s", gen_option (tmp1, bb_no, f_opt));
|
printf ("%3s", tmp2);
|
PRINTF ("%3s", tmp2);
|
}
|
}
|
|
|
static char *format_func_options (char *s, cuc_func *f)
|
static char *format_func_options (char *s, cuc_func *f)
|
{
|
{
|
int b, first = 1;
|
int b, first = 1;
|
Line 366... |
Line 366... |
static void options_cmd (int func_no, cuc_func *f)
|
static void options_cmd (int func_no, cuc_func *f)
|
{
|
{
|
int b, i;
|
int b, i;
|
char tmp[30];
|
char tmp[30];
|
char *name = prof_func[func_no].name;
|
char *name = prof_func[func_no].name;
|
printf ("-----------------------------------------------------------------------------\n");
|
PRINTF ("-----------------------------------------------------------------------------\n");
|
printf ("|%-28s|pre/unrolled|shared| time | gates |old_time|\n",
|
PRINTF ("|%-28s|pre/unrolled|shared| time | gates |old_time|\n",
|
strstrip (tmp, name, 28));
|
strstrip (tmp, name, 28));
|
printf ("| BASE |%4i / %4i | %4i |%8i|%8.f|%8i|\n", 1, 1, 0,
|
PRINTF ("| BASE |%4i / %4i | %4i |%8i|%8.f|%8i|\n", 1, 1, 0,
|
f->timings.new_time, f->timings.size, f->orig_time);
|
f->timings.new_time, f->timings.size, f->orig_time);
|
for (b = 0; b < f->num_bb; b++) {
|
for (b = 0; b < f->num_bb; b++) {
|
/* Print out results */
|
/* Print out results */
|
for (i = 1; i < f->bb[b].ntim; i++) { /* First one is base option */
|
for (i = 1; i < f->bb[b].ntim; i++) { /* First one is base option */
|
int time = f->bb[b].tim[i].new_time - f->timings.new_time;
|
int time = f->bb[b].tim[i].new_time - f->timings.new_time;
|
double size = f->bb[b].tim[i].size - f->timings.size;
|
double size = f->bb[b].tim[i].size - f->timings.size;
|
printf ("| ");
|
PRINTF ("| ");
|
print_option (b, i);
|
print_option (b, i);
|
printf (" |%4i / %4i | %4i |%+8i|%+8.f| |\n",
|
PRINTF (" |%4i / %4i | %4i |%+8i|%+8.f| |\n",
|
f->bb[b].tim[i].preroll, f->bb[b].tim[i].unroll, f->bb[b].tim[i].nshared,
|
f->bb[b].tim[i].preroll, f->bb[b].tim[i].unroll, f->bb[b].tim[i].nshared,
|
time, size);
|
time, size);
|
}
|
}
|
}
|
}
|
}
|
}
|
Line 396... |
Line 396... |
cuc_func *f;
|
cuc_func *f;
|
assert (f = dup_func (rf));
|
assert (f = dup_func (rf));
|
|
|
if (cuc_debug >= 2) print_cuc_bb (f, "BEFORE_GENERATE");
|
if (cuc_debug >= 2) print_cuc_bb (f, "BEFORE_GENERATE");
|
log ("Generating function %s.\n", name);
|
log ("Generating function %s.\n", name);
|
printf ("Generating function %s.\n", name);
|
PRINTF ("Generating function %s.\n", name);
|
|
|
format_func_options (tmp, rf);
|
format_func_options (tmp, rf);
|
if (strlen (tmp)) printf ("Applying options: %s\n", tmp);
|
if (strlen (tmp)) PRINTF ("Applying options: %s\n", tmp);
|
else printf ("Using basic options.\n");
|
else PRINTF ("Using basic options.\n");
|
|
|
/* Generate function as specified by options */
|
/* Generate function as specified by options */
|
for (b = 0; b < f->num_bb; b++) {
|
for (b = 0; b < f->num_bb; b++) {
|
cuc_timings *st;
|
cuc_timings *st;
|
if (rf->bb[b].selected_tim < 0) continue;
|
if (rf->bb[b].selected_tim < 0) continue;
|
Line 558... |
Line 558... |
filename_cut[i] = '\0';
|
filename_cut[i] = '\0';
|
break;
|
break;
|
}
|
}
|
}
|
}
|
|
|
printf ("Entering OpenRISC Custom Unit Compiler command prompt\n");
|
PRINTF ("Entering OpenRISC Custom Unit Compiler command prompt\n");
|
printf ("Using profile file \"%s\" and memory profile file \"%s\".\n", config.sim.prof_fn, config.sim.mprof_fn);
|
PRINTF ("Using profile file \"%s\" and memory profile file \"%s\".\n", config.sim.prof_fn, config.sim.mprof_fn);
|
sprintf (tmp1, "%s.log", filename_cut);
|
sprintf (tmp1, "%s.log", filename_cut);
|
printf ("Analyzing. (log file \"%s\").\n", tmp1);
|
PRINTF ("Analyzing. (log file \"%s\").\n", tmp1);
|
assert (flog = fopen (tmp1, "wt+"));
|
assert (flog = fopen (tmp1, "wt+"));
|
|
|
/* Loads in the specified timings table */
|
/* Loads in the specified timings table */
|
printf ("Using timings from \"%s\" at %s\n",config.cuc.timings_fn,
|
PRINTF ("Using timings from \"%s\" at %s\n",config.cuc.timings_fn,
|
generate_time_pretty (tmp1, config.sim.clkcycle_ps));
|
generate_time_pretty (tmp1, config.sim.clkcycle_ps));
|
load_timing_table (config.cuc.timings_fn);
|
load_timing_table (config.cuc.timings_fn);
|
runtime.cuc.cycle_duration = 1000. * config.sim.clkcycle_ps;
|
runtime.cuc.cycle_duration = 1000. * config.sim.clkcycle_ps;
|
printf ("Multicycle logic %s, bursts %s, %s memory order.\n",
|
PRINTF ("Multicycle logic %s, bursts %s, %s memory order.\n",
|
config.cuc.no_multicycle ? "OFF" : "ON", config.cuc.enable_bursts ? "ON" : "OFF",
|
config.cuc.no_multicycle ? "OFF" : "ON", config.cuc.enable_bursts ? "ON" : "OFF",
|
config.cuc.memory_order == MO_NONE ? "no" : config.cuc.memory_order == MO_WEAK ? "weak" :
|
config.cuc.memory_order == MO_NONE ? "no" : config.cuc.memory_order == MO_WEAK ? "weak" :
|
config.cuc.memory_order == MO_STRONG ? "strong" : "exact");
|
config.cuc.memory_order == MO_STRONG ? "strong" : "exact");
|
|
|
prof_set (1, 0);
|
prof_set (1, 0);
|
assert (prof_acquire (config.sim.prof_fn) == 0);
|
assert (prof_acquire (config.sim.prof_fn) == 0);
|
cuc_debug = 0;
|
cuc_debug = 0;
|
|
|
if (config.cuc.calling_convention)
|
if (config.cuc.calling_convention)
|
printf ("Assuming OpenRISC standard calling convention.\n");
|
PRINTF ("Assuming OpenRISC standard calling convention.\n");
|
|
|
/* Try all functions except "total" */
|
/* Try all functions except "total" */
|
for (i = 0; i < prof_nfuncs - 1; i++) {
|
for (i = 0; i < prof_nfuncs - 1; i++) {
|
long orig_time;
|
long orig_time;
|
unsigned long start_addr, end_addr;
|
unsigned long start_addr, end_addr;
|
Line 593... |
Line 593... |
/* Extract the function from the binary */
|
/* Extract the function from the binary */
|
sprintf (tmp1, "%s.bin", prof_func[i].name);
|
sprintf (tmp1, "%s.bin", prof_func[i].name);
|
end_addr = extract_function (tmp1, start_addr);
|
end_addr = extract_function (tmp1, start_addr);
|
|
|
log ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
|
log ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
|
printf ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
|
PRINTF ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
|
func[i] = analyse_function (prof_func[i].name, orig_time, start_addr,
|
func[i] = analyse_function (prof_func[i].name, orig_time, start_addr,
|
end_addr, config.cuc.memory_order);
|
end_addr, config.cuc.memory_order);
|
func_v[i] = 0;
|
func_v[i] = 0;
|
}
|
}
|
set_func_deps ();
|
set_func_deps ();
|
|
|
while (1) {
|
while (1) {
|
char *s;
|
char *s;
|
wait_command:
|
wait_command:
|
printf ("(cuc) ");
|
PRINTF ("(cuc) ");
|
fflush (stdout);
|
fflush (stdout);
|
fgets(tmp1, sizeof tmp1, stdin);
|
fgets(tmp1, sizeof tmp1, stdin);
|
for (s = tmp1; *s != '\0' && *s != '\n' && *s != '\r'; s++);
|
for (s = tmp1; *s != '\0' && *s != '\n' && *s != '\r'; s++);
|
*s = '\0';
|
*s = '\0';
|
|
|
Line 617... |
Line 617... |
|
|
/* profile command */
|
/* profile command */
|
} else if (strcmp (tmp1, "p") == 0 || strcmp (tmp1, "profile") == 0) {
|
} else if (strcmp (tmp1, "p") == 0 || strcmp (tmp1, "profile") == 0) {
|
int ntime = 0;
|
int ntime = 0;
|
int size = 0;
|
int size = 0;
|
printf ("-----------------------------------------------------------------------------\n");
|
PRINTF ("-----------------------------------------------------------------------------\n");
|
printf ("|function name |calls|avg cycles |old%| max. f. | impr. f.| options |\n");
|
PRINTF ("|function name |calls|avg cycles |old%| max. f. | impr. f.| options |\n");
|
printf ("|--------------------+-----+------------+----+----------|---------+---------|\n");
|
PRINTF ("|--------------------+-----+------------+----+----------|---------+---------|\n");
|
for (j = 0; j < prof_nfuncs; j++) {
|
for (j = 0; j < prof_nfuncs; j++) {
|
int bestcyc = 0, besti = 0;
|
int bestcyc = 0, besti = 0;
|
char tmp[100];
|
char tmp[100];
|
for (i = 0; i < prof_nfuncs; i++)
|
for (i = 0; i < prof_nfuncs; i++)
|
if (prof_func[i].cum_cycles > bestcyc) {
|
if (prof_func[i].cum_cycles > bestcyc) {
|
bestcyc = prof_func[i].cum_cycles;
|
bestcyc = prof_func[i].cum_cycles;
|
besti = i;
|
besti = i;
|
}
|
}
|
i = besti;
|
i = besti;
|
printf ("|%-20s|%5i|%12.1f|%3.0f%%| ",
|
PRINTF ("|%-20s|%5i|%12.1f|%3.0f%%| ",
|
strstrip (tmp, prof_func[i].name, 20), prof_func[i].calls,
|
strstrip (tmp, prof_func[i].name, 20), prof_func[i].calls,
|
((double)prof_func[i].cum_cycles / prof_func[i].calls),
|
((double)prof_func[i].cum_cycles / prof_func[i].calls),
|
(100. * prof_func[i].cum_cycles / prof_cycles));
|
(100. * prof_func[i].cum_cycles / prof_cycles));
|
if (func[i]) {
|
if (func[i]) {
|
double f = 1.0;
|
double f = 1.0;
|
Line 642... |
Line 642... |
int s = calc_size (func[i]);
|
int s = calc_size (func[i]);
|
f = 1. * func[i]->orig_time / nt;
|
f = 1. * func[i]->orig_time / nt;
|
ntime += nt * func[i]->num_runs;
|
ntime += nt * func[i]->num_runs;
|
size += s;
|
size += s;
|
} else ntime += prof_func[i].cum_cycles;
|
} else ntime += prof_func[i].cum_cycles;
|
printf ("%8.1f |%8.1f | %-8s|\n", 1.f * prof_func[i].cum_cycles
|
PRINTF ("%8.1f |%8.1f | %-8s|\n", 1.f * prof_func[i].cum_cycles
|
/ func[i]->timings.new_time, f, format_func_options (tmp, func[i]));
|
/ func[i]->timings.new_time, f, format_func_options (tmp, func[i]));
|
} else {
|
} else {
|
printf (" N/A | N/A | N/A |\n");
|
PRINTF (" N/A | N/A | N/A |\n");
|
ntime += prof_func[i].cum_cycles;
|
ntime += prof_func[i].cum_cycles;
|
}
|
}
|
prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
|
prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
|
}
|
}
|
for (i = 0; i < prof_nfuncs; i++)
|
for (i = 0; i < prof_nfuncs; i++)
|
prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
|
prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
|
printf ("-----------------------------------------------------------------------------\n");
|
PRINTF ("-----------------------------------------------------------------------------\n");
|
printf ("Total %i cycles (was %i), total added gates = %i. Speed factor %.1f\n",
|
PRINTF ("Total %i cycles (was %i), total added gates = %i. Speed factor %.1f\n",
|
ntime, prof_cycles, size, 1. * prof_cycles / ntime);
|
ntime, prof_cycles, size, 1. * prof_cycles / ntime);
|
|
|
/* debug command */
|
/* debug command */
|
} else if (strncmp (tmp1, "d", 1) == 0 || strncmp (tmp1, "debug", 5) == 0) {
|
} else if (strncmp (tmp1, "d", 1) == 0 || strncmp (tmp1, "debug", 5) == 0) {
|
sscanf (tmp1, "%*s %i", &cuc_debug);
|
sscanf (tmp1, "%*s %i", &cuc_debug);
|
Line 670... |
Line 670... |
for (i = 0; i < prof_nfuncs; i++)
|
for (i = 0; i < prof_nfuncs; i++)
|
if (func[i]) func[i]->tmp = func_v[i];
|
if (func[i]) func[i]->tmp = func_v[i];
|
for (i = 0; i < prof_nfuncs; i++) if (func[i])
|
for (i = 0; i < prof_nfuncs; i++) if (func[i])
|
for (j = 0; j < func[i]->nfdeps; j++)
|
for (j = 0; j < func[i]->nfdeps; j++)
|
if (!func[i]->fdeps[j] || !func[i]->fdeps[j]->tmp) {
|
if (!func[i]->fdeps[j] || !func[i]->fdeps[j]->tmp) {
|
printf ("Function %s must be selected for translation (required by %s)\n",
|
PRINTF ("Function %s must be selected for translation (required by %s)\n",
|
prof_func[j].name, prof_func[i].name);
|
prof_func[j].name, prof_func[i].name);
|
goto wait_command;
|
goto wait_command;
|
}
|
}
|
for (i = 0; i < prof_nfuncs; i++)
|
for (i = 0; i < prof_nfuncs; i++)
|
if (func[i] && func_v[i]) generate_function (func[i], prof_func[i].name, filename_cut);
|
if (func[i] && func_v[i]) generate_function (func[i], prof_func[i].name, filename_cut);
|
Line 684... |
Line 684... |
} else if (strcmp (tmp1, "sa") == 0 || strcmp (tmp1, "selectall") == 0) {
|
} else if (strcmp (tmp1, "sa") == 0 || strcmp (tmp1, "selectall") == 0) {
|
char tmp[50], ch;
|
char tmp[50], ch;
|
int p, o, b, f;
|
int p, o, b, f;
|
for (f = 0; f < prof_nfuncs; f++) if (func[f]) {
|
for (f = 0; f < prof_nfuncs; f++) if (func[f]) {
|
func_v[f] = 1;
|
func_v[f] = 1;
|
printf ("Function %s selected for translation.\n", prof_func[f].name);
|
PRINTF ("Function %s selected for translation.\n", prof_func[f].name);
|
}
|
}
|
|
|
/* select command */
|
/* select command */
|
} else if (strncmp (tmp1, "s", 1) == 0 || strncmp (tmp1, "select", 6) == 0) {
|
} else if (strncmp (tmp1, "s", 1) == 0 || strncmp (tmp1, "select", 6) == 0) {
|
char tmp[50], ch;
|
char tmp[50], ch;
|
int p, o, b, f;
|
int p, o, b, f;
|
p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
|
p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
|
if (p < 1) printf ("Invalid parameters.\n");
|
if (p < 1) PRINTF ("Invalid parameters.\n");
|
else {
|
else {
|
/* Check if we have valid option */
|
/* Check if we have valid option */
|
for (f = 0; f < prof_nfuncs; f++)
|
for (f = 0; f < prof_nfuncs; f++)
|
if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
|
if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
|
if (f < prof_nfuncs) {
|
if (f < prof_nfuncs) {
|
if (p == 1) {
|
if (p == 1) {
|
if (func[f]) {
|
if (func[f]) {
|
func_v[f] = 1;
|
func_v[f] = 1;
|
printf ("Function %s selected for translation.\n", prof_func[f].name);
|
PRINTF ("Function %s selected for translation.\n", prof_func[f].name);
|
} else printf ("Function %s not suitable for translation.\n", prof_func[f].name);
|
} else PRINTF ("Function %s not suitable for translation.\n", prof_func[f].name);
|
} else {
|
} else {
|
if (!func_v[f])
|
if (!func_v[f])
|
printf ("Function %s not yet selected for translation.\n", prof_func[f].name);
|
PRINTF ("Function %s not yet selected for translation.\n", prof_func[f].name);
|
if (p < 3) goto invalid_option;
|
if (p < 3) goto invalid_option;
|
for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
|
for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
|
if (!option_char[o]) goto invalid_option;
|
if (!option_char[o]) goto invalid_option;
|
if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
|
if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
|
if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
|
if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
|
|
|
/* select an option */
|
/* select an option */
|
func[f]->bb[b].selected_tim = o;
|
func[f]->bb[b].selected_tim = o;
|
if (func[f]->bb[b].tim[o].nshared) {
|
if (func[f]->bb[b].tim[o].nshared) {
|
printf ("Option has shared instructions: ");
|
PRINTF ("Option has shared instructions: ");
|
print_shared (func[f], func[f]->bb[b].tim[o].shared, func[f]->bb[b].tim[o].nshared);
|
print_shared (func[f], func[f]->bb[b].tim[o].shared, func[f]->bb[b].tim[o].nshared);
|
printf ("\n");
|
PRINTF ("\n");
|
}
|
}
|
goto wait_command;
|
goto wait_command;
|
invalid_option:
|
invalid_option:
|
printf ("Invalid option.\n");
|
PRINTF ("Invalid option.\n");
|
}
|
}
|
} else printf ("Invalid function.\n");
|
} else PRINTF ("Invalid function.\n");
|
}
|
}
|
|
|
/* unselect command */
|
/* unselect command */
|
} else if (strncmp (tmp1, "u", 1) == 0 || strncmp (tmp1, "unselect", 8) == 0) {
|
} else if (strncmp (tmp1, "u", 1) == 0 || strncmp (tmp1, "unselect", 8) == 0) {
|
char tmp[50], ch;
|
char tmp[50], ch;
|
int p, o, b, f;
|
int p, o, b, f;
|
p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
|
p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
|
if (p < 1) printf ("Invalid parameters.\n");
|
if (p < 1) PRINTF ("Invalid parameters.\n");
|
else {
|
else {
|
/* Check if we have valid option */
|
/* Check if we have valid option */
|
for (f = 0; f < prof_nfuncs; f++)
|
for (f = 0; f < prof_nfuncs; f++)
|
if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
|
if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
|
if (f < prof_nfuncs) {
|
if (f < prof_nfuncs) {
|
if (p == 1) {
|
if (p == 1) {
|
if (func[f]) {
|
if (func[f]) {
|
func_v[f] = 0;
|
func_v[f] = 0;
|
printf ("Function %s unselected for translation.\n", prof_func[f].name);
|
PRINTF ("Function %s unselected for translation.\n", prof_func[f].name);
|
} else printf ("Function %s not suitable for translation.\n", prof_func[f].name);
|
} else PRINTF ("Function %s not suitable for translation.\n", prof_func[f].name);
|
} else {
|
} else {
|
if (p < 3) goto invalid_option;
|
if (p < 3) goto invalid_option;
|
for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
|
for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
|
if (!option_char[o]) goto invalid_option;
|
if (!option_char[o]) goto invalid_option;
|
if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
|
if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
|
if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
|
if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
|
|
|
/* select an option */
|
/* select an option */
|
func[f]->bb[b].selected_tim = -1;
|
func[f]->bb[b].selected_tim = -1;
|
}
|
}
|
} else printf ("Invalid function.\n");
|
} else PRINTF ("Invalid function.\n");
|
}
|
}
|
|
|
/* options command */
|
/* options command */
|
} else if (strcmp (tmp1, "o") == 0 || strcmp (tmp1, "options") == 0) {
|
} else if (strcmp (tmp1, "o") == 0 || strcmp (tmp1, "options") == 0) {
|
int any = 0;
|
int any = 0;
|
printf ("Available options:\n");
|
PRINTF ("Available options:\n");
|
for (i = 0; i < prof_nfuncs; i++)
|
for (i = 0; i < prof_nfuncs; i++)
|
if (func[i]) {
|
if (func[i]) {
|
options_cmd (i, func[i]);
|
options_cmd (i, func[i]);
|
any = 1;
|
any = 1;
|
}
|
}
|
if (any) printf ("-----------------------------------------------------------------------------\n");
|
if (any) PRINTF ("-----------------------------------------------------------------------------\n");
|
else printf ("Sorry. No available options.\n");
|
else PRINTF ("Sorry. No available options.\n");
|
|
|
/* Ignore empty string */
|
/* Ignore empty string */
|
} else if (strcmp (tmp1, "") == 0) {
|
} else if (strcmp (tmp1, "") == 0) {
|
|
|
/* help command */
|
/* help command */
|
} else {
|
} else {
|
if (strcmp (tmp1, "h") != 0 && strcmp (tmp1, "help") != 0)
|
if (strcmp (tmp1, "h") != 0 && strcmp (tmp1, "help") != 0)
|
printf ("Unknown command.\n");
|
PRINTF ("Unknown command.\n");
|
printf ("OpenRISC Custom Unit Compiler command prompt\n");
|
PRINTF ("OpenRISC Custom Unit Compiler command prompt\n");
|
printf ("Available commands:\n");
|
PRINTF ("Available commands:\n");
|
printf (" h | help displays this help\n");
|
PRINTF (" h | help displays this help\n");
|
printf (" q | quit returns to or1ksim prompt\n");
|
PRINTF (" q | quit returns to or1ksim prompt\n");
|
printf (" p | profile displays function profiling\n");
|
PRINTF (" p | profile displays function profiling\n");
|
printf (" d | debug # sets debug level (0-9)\n");
|
PRINTF (" d | debug # sets debug level (0-9)\n");
|
printf (" o | options displays available options\n");
|
PRINTF (" o | options displays available options\n");
|
printf (" s | select func [option] selects an option/function\n");
|
PRINTF (" s | select func [option] selects an option/function\n");
|
printf (" u | unselect func [option] unselects an option/function\n");
|
PRINTF (" u | unselect func [option] unselects an option/function\n");
|
printf (" g | generate generates verilog file\n");
|
PRINTF (" g | generate generates verilog file\n");
|
}
|
}
|
}
|
}
|
|
|
/* Dispose memory */
|
/* Dispose memory */
|
for (i = 0; i < prof_nfuncs -1; i++)
|
for (i = 0; i < prof_nfuncs -1; i++)
|