Commit 4dc81f2822187f4503d4bdb76785cafa5b28db0b

Authored by bellard
1 parent 39cf05d3

debug output: write helper names

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4529 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 35 additions and 15 deletions
tcg/tcg.c
@@ -516,22 +516,11 @@ void tcg_register_helper(void *func, const char *name) @@ -516,22 +516,11 @@ void tcg_register_helper(void *func, const char *name)
516 s->helpers = realloc(s->helpers, n * sizeof(TCGHelperInfo)); 516 s->helpers = realloc(s->helpers, n * sizeof(TCGHelperInfo));
517 s->allocated_helpers = n; 517 s->allocated_helpers = n;
518 } 518 }
519 - s->helpers[s->nb_helpers].func = func; 519 + s->helpers[s->nb_helpers].func = (tcg_target_ulong)func;
520 s->helpers[s->nb_helpers].name = name; 520 s->helpers[s->nb_helpers].name = name;
521 s->nb_helpers++; 521 s->nb_helpers++;
522 } 522 }
523 523
524 -const char *tcg_helper_get_name(TCGContext *s, void *func)  
525 -{  
526 - int i;  
527 -  
528 - for(i = 0; i < s->nb_helpers; i++) {  
529 - if (s->helpers[i].func == func)  
530 - return s->helpers[i].name;  
531 - }  
532 - return NULL;  
533 -}  
534 -  
535 static inline TCGType tcg_get_base_type(TCGContext *s, TCGv arg) 524 static inline TCGType tcg_get_base_type(TCGContext *s, TCGv arg)
536 { 525 {
537 return s->temps[GET_TCGV(arg)].base_type; 526 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) @@ -718,6 +707,37 @@ char *tcg_get_arg_str(TCGContext *s, char *buf, int buf_size, TCGv arg)
718 return tcg_get_arg_str_idx(s, buf, buf_size, GET_TCGV(arg)); 707 return tcg_get_arg_str_idx(s, buf, buf_size, GET_TCGV(arg));
719 } 708 }
720 709
  710 +/* find helper definition (XXX: inefficient) */
  711 +static TCGHelperInfo *tcg_find_helper(TCGContext *s, tcg_target_ulong val)
  712 +{
  713 + int i;
  714 + for(i = 0; i < s->nb_helpers; i++) {
  715 + if (s->helpers[i].func == val)
  716 + return &s->helpers[i];
  717 + }
  718 + return NULL;
  719 +}
  720 +
  721 +static const char *tcg_get_helper_str_idx(TCGContext *s, char *buf, int buf_size,
  722 + int idx)
  723 +{
  724 + TCGTemp *ts;
  725 + TCGHelperInfo *th;
  726 +
  727 + ts = &s->temps[idx];
  728 + if (ts->val_type == TEMP_VAL_CONST) {
  729 + /* find helper name (XXX: inefficient) */
  730 + th = tcg_find_helper(s, ts->val);
  731 + if (th) {
  732 + pstrcpy(buf, buf_size, "$");
  733 + pstrcat(buf, buf_size, th->name);
  734 + return buf;
  735 + }
  736 + }
  737 + return tcg_get_arg_str_idx(s, buf, buf_size, idx);
  738 +}
  739 +
  740 +
721 void tcg_dump_ops(TCGContext *s, FILE *outfile) 741 void tcg_dump_ops(TCGContext *s, FILE *outfile)
722 { 742 {
723 const uint16_t *opc_ptr; 743 const uint16_t *opc_ptr;
@@ -735,6 +755,7 @@ void tcg_dump_ops(TCGContext *s, FILE *outfile) @@ -735,6 +755,7 @@ void tcg_dump_ops(TCGContext *s, FILE *outfile)
735 fprintf(outfile, " %s ", def->name); 755 fprintf(outfile, " %s ", def->name);
736 if (c == INDEX_op_call) { 756 if (c == INDEX_op_call) {
737 TCGArg arg; 757 TCGArg arg;
  758 +
738 /* variable number of arguments */ 759 /* variable number of arguments */
739 arg = *args++; 760 arg = *args++;
740 nb_oargs = arg >> 16; 761 nb_oargs = arg >> 16;
@@ -742,9 +763,8 @@ void tcg_dump_ops(TCGContext *s, FILE *outfile) @@ -742,9 +763,8 @@ void tcg_dump_ops(TCGContext *s, FILE *outfile)
742 nb_cargs = def->nb_cargs; 763 nb_cargs = def->nb_cargs;
743 764
744 /* function name */ 765 /* function name */
745 - /* XXX: dump helper name for call */  
746 fprintf(outfile, "%s", 766 fprintf(outfile, "%s",
747 - tcg_get_arg_str_idx(s, buf, sizeof(buf), args[nb_oargs + nb_iargs - 1])); 767 + tcg_get_helper_str_idx(s, buf, sizeof(buf), args[nb_oargs + nb_iargs - 1]));
748 /* flags */ 768 /* flags */
749 fprintf(outfile, ",$0x%" TCG_PRIlx, 769 fprintf(outfile, ",$0x%" TCG_PRIlx,
750 args[nb_oargs + nb_iargs]); 770 args[nb_oargs + nb_iargs]);
tcg/tcg.h
@@ -192,7 +192,7 @@ typedef struct TCGTemp { @@ -192,7 +192,7 @@ typedef struct TCGTemp {
192 } TCGTemp; 192 } TCGTemp;
193 193
194 typedef struct TCGHelperInfo { 194 typedef struct TCGHelperInfo {
195 - void *func; 195 + tcg_target_ulong func;
196 const char *name; 196 const char *name;
197 } TCGHelperInfo; 197 } TCGHelperInfo;
198 198