debug output: write helper names
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4529 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
39cf05d322
commit
4dc81f2822
48
tcg/tcg.c
48
tcg/tcg.c
@ -516,22 +516,11 @@ void tcg_register_helper(void *func, const char *name)
|
|||||||
s->helpers = realloc(s->helpers, n * sizeof(TCGHelperInfo));
|
s->helpers = realloc(s->helpers, n * sizeof(TCGHelperInfo));
|
||||||
s->allocated_helpers = n;
|
s->allocated_helpers = n;
|
||||||
}
|
}
|
||||||
s->helpers[s->nb_helpers].func = func;
|
s->helpers[s->nb_helpers].func = (tcg_target_ulong)func;
|
||||||
s->helpers[s->nb_helpers].name = name;
|
s->helpers[s->nb_helpers].name = name;
|
||||||
s->nb_helpers++;
|
s->nb_helpers++;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *tcg_helper_get_name(TCGContext *s, void *func)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i = 0; i < s->nb_helpers; i++) {
|
|
||||||
if (s->helpers[i].func == func)
|
|
||||||
return s->helpers[i].name;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline TCGType tcg_get_base_type(TCGContext *s, TCGv arg)
|
static inline TCGType tcg_get_base_type(TCGContext *s, TCGv arg)
|
||||||
{
|
{
|
||||||
return s->temps[GET_TCGV(arg)].base_type;
|
return s->temps[GET_TCGV(arg)].base_type;
|
||||||
@ -718,6 +707,37 @@ char *tcg_get_arg_str(TCGContext *s, char *buf, int buf_size, TCGv arg)
|
|||||||
return tcg_get_arg_str_idx(s, buf, buf_size, GET_TCGV(arg));
|
return tcg_get_arg_str_idx(s, buf, buf_size, GET_TCGV(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* find helper definition (XXX: inefficient) */
|
||||||
|
static TCGHelperInfo *tcg_find_helper(TCGContext *s, tcg_target_ulong val)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < s->nb_helpers; i++) {
|
||||||
|
if (s->helpers[i].func == val)
|
||||||
|
return &s->helpers[i];
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *tcg_get_helper_str_idx(TCGContext *s, char *buf, int buf_size,
|
||||||
|
int idx)
|
||||||
|
{
|
||||||
|
TCGTemp *ts;
|
||||||
|
TCGHelperInfo *th;
|
||||||
|
|
||||||
|
ts = &s->temps[idx];
|
||||||
|
if (ts->val_type == TEMP_VAL_CONST) {
|
||||||
|
/* find helper name (XXX: inefficient) */
|
||||||
|
th = tcg_find_helper(s, ts->val);
|
||||||
|
if (th) {
|
||||||
|
pstrcpy(buf, buf_size, "$");
|
||||||
|
pstrcat(buf, buf_size, th->name);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tcg_get_arg_str_idx(s, buf, buf_size, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void tcg_dump_ops(TCGContext *s, FILE *outfile)
|
void tcg_dump_ops(TCGContext *s, FILE *outfile)
|
||||||
{
|
{
|
||||||
const uint16_t *opc_ptr;
|
const uint16_t *opc_ptr;
|
||||||
@ -735,6 +755,7 @@ void tcg_dump_ops(TCGContext *s, FILE *outfile)
|
|||||||
fprintf(outfile, " %s ", def->name);
|
fprintf(outfile, " %s ", def->name);
|
||||||
if (c == INDEX_op_call) {
|
if (c == INDEX_op_call) {
|
||||||
TCGArg arg;
|
TCGArg arg;
|
||||||
|
|
||||||
/* variable number of arguments */
|
/* variable number of arguments */
|
||||||
arg = *args++;
|
arg = *args++;
|
||||||
nb_oargs = arg >> 16;
|
nb_oargs = arg >> 16;
|
||||||
@ -742,9 +763,8 @@ void tcg_dump_ops(TCGContext *s, FILE *outfile)
|
|||||||
nb_cargs = def->nb_cargs;
|
nb_cargs = def->nb_cargs;
|
||||||
|
|
||||||
/* function name */
|
/* function name */
|
||||||
/* XXX: dump helper name for call */
|
|
||||||
fprintf(outfile, "%s",
|
fprintf(outfile, "%s",
|
||||||
tcg_get_arg_str_idx(s, buf, sizeof(buf), args[nb_oargs + nb_iargs - 1]));
|
tcg_get_helper_str_idx(s, buf, sizeof(buf), args[nb_oargs + nb_iargs - 1]));
|
||||||
/* flags */
|
/* flags */
|
||||||
fprintf(outfile, ",$0x%" TCG_PRIlx,
|
fprintf(outfile, ",$0x%" TCG_PRIlx,
|
||||||
args[nb_oargs + nb_iargs]);
|
args[nb_oargs + nb_iargs]);
|
||||||
|
Loading…
Reference in New Issue
Block a user