1feadbf2807b11cff85b59814299648a9076af71
[libfirm] / ir / be / ia32 / dump_support.inl
1 static void fprintf_tv(FILE *F, tarval *tv, int brackets) {
2   char buf[1024];
3   tarval_snprintf(buf, sizeof(buf), tv);
4
5   if (brackets)
6     fprintf(F, "[%s]", buf);
7   else
8     fprintf(F, "%s", buf);
9 }
10
11 static int dump_node_ia32(ir_node *n, FILE *F, dump_reason_t reason) {
12   const char *name, *p;
13   ir_mode    *mode = NULL;
14   int        bad   = 0;
15
16   switch (reason) {
17     case dump_node_opcode_txt:
18       name = get_irn_opname(n);
19       fprintf(F, "%s", name);
20       break;
21
22     case dump_node_mode_txt:
23       mode = get_irn_mode(n);
24
25       if (mode && mode != mode_BB && mode != mode_ANY && mode != mode_BAD && mode != mode_T) {
26         /* dump below */
27       }
28       else if (is_ia32_Load(n)) {
29         mode = get_irn_mode(get_irn_n(n, 1));
30       }
31       else if (is_ia32_Store(n)) {
32         mode = get_irn_mode(get_irn_n(n, 2));
33       }
34
35       if (mode)
36         fprintf(F, "[%s]", get_mode_name(mode));
37       break;
38
39     case dump_node_nodeattr_txt:
40       name = get_irn_opname(n);
41       p = name + strlen(name) - 2;
42       if (p[0] == '_' && p[1] == 'i') {
43         tarval *tv = get_Immop_tarval(n);
44         if (tv)
45           fprintf_tv(F, tv, 1);
46         else {
47           fprintf(F, "[SymConst]");
48         }
49       }
50       break;
51
52     case dump_node_info_txt:
53       if (is_ia32_Lea(n)) {
54         tarval *o  = get_ia32_Lea_offs(n);
55         tarval *tv = get_Immop_tarval(n);
56
57         fprintf(F, "LEA ");
58         if (o)
59           fprintf_tv(F, o, 0);
60         fprintf(F, "(%s, %s", get_irn_opname(get_irn_n(n, 0)), get_irn_opname(get_irn_n(n, 1)));
61         if (tv) {
62           fprintf(F, ", ");
63           fprintf_tv(F, tv, 0);
64         }
65         fprintf(F, ")\n");
66       }
67       break;
68   }
69
70   return bad;
71 }