Mercurial > hg > forks > dxa
comparison dump.c @ 11:fe4d840c13eb
Implement reference checking to reduce outputting of useless labels.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 14 May 2020 20:35:40 +0300 |
parents | 122134900c0e |
children | 84c0facfc43c |
comparison
equal
deleted
inserted
replaced
10:122134900c0e | 11:fe4d840c13eb |
---|---|
85 *lineprefix = 0; | 85 *lineprefix = 0; |
86 lineinfix = lineprefix; | 86 lineinfix = lineprefix; |
87 } | 87 } |
88 | 88 |
89 /* print the label definitions */ | 89 /* print the label definitions */ |
90 | |
91 for (address = EndAddress < StartAddress ? EndAddress : 0; | 90 for (address = EndAddress < StartAddress ? EndAddress : 0; |
92 address != StartAddress; address++) | 91 address != StartAddress; address++) |
93 { | 92 { |
94 if (IsLabeled (address) && !IsInsideRegion(address)) | 93 if (IsLabeled (address) && !IsInsideRegion(address) && IsReferenced(address)) |
95 { | 94 { |
96 fprintf (stdout, "%s%s = $%x\n", lineprefix, Label (address, abso, 0), | 95 fprintf (stdout, "%s%s = $%x\n", lineprefix, Label (address, abso, 0), |
97 address); | 96 address); |
98 } | 97 } |
99 } | 98 } |
100 | 99 |
101 if (EndAddress >= StartAddress) | 100 if (EndAddress >= StartAddress) |
102 { | 101 { |
103 for (address = EndAddress; address; address++) | 102 for (address = EndAddress; address; address++) |
104 { | 103 { |
105 if (IsLabeled (address) && !IsInsideRegion(address)) | 104 if (IsLabeled (address) && !IsInsideRegion(address) && IsReferenced(address)) |
106 { | 105 { |
107 fprintf (stdout, "%s%s = $%x\n", lineprefix, Label (address, abso, 0), | 106 fprintf (stdout, "%s%s = $%x\n", lineprefix, Label (address, abso, 0), |
108 address); | 107 address); |
109 } | 108 } |
110 } | 109 } |
120 | 119 |
121 | 120 |
122 for (address = StartAddress; (ADDR_T)(address - StartAddress) < | 121 for (address = StartAddress; (ADDR_T)(address - StartAddress) < |
123 (ADDR_T)(EndAddress - StartAddress); address += size) | 122 (ADDR_T)(EndAddress - StartAddress); address += size) |
124 if (GetMemType (address) == MEM_INSTRUCTION) { | 123 if (GetMemType (address) == MEM_INSTRUCTION) { |
125 if (IsLabeled (address)) { | 124 |
125 if (IsLabeled (address) && IsReferenced(address)) { | |
126 if (Options & M_ADDRESSES) | 126 if (Options & M_ADDRESSES) |
127 fprintf (stdout, "%04x %s%s:\n", address, | 127 fprintf (stdout, "%04x %s%s:\n", address, |
128 lineinfix, Label (address, abso, 0)); | 128 lineinfix, Label (address, abso, 0)); |
129 else { | 129 else { |
130 fprintf (stdout, "%s", Label (address, abso, 0)); | 130 fprintf (stdout, "%s", Label (address, abso, 0)); |
135 | 135 |
136 instr = &opset[Memory[address]]; | 136 instr = &opset[Memory[address]]; |
137 size = sizes[instr->admode]; | 137 size = sizes[instr->admode]; |
138 | 138 |
139 for (counter = 1; counter < size; counter++) { | 139 for (counter = 1; counter < size; counter++) { |
140 if (IsLabeled (address + counter)) { | 140 if (IsLabeled (address + counter)) |
141 { | |
141 if (Options & M_ADDRESSES) | 142 if (Options & M_ADDRESSES) |
142 fprintf (stdout, "\t%04x %s%s = * + %u\n", | 143 fprintf (stdout, "\t%04x %s%s = * + %u\n", |
143 (ADDR_T)(address + counter), | 144 (ADDR_T)(address + counter), |
144 lineinfix, Label (address + counter, abso, 0), counter); | 145 lineinfix, Label (address + counter, abso, 0), counter); |
145 else | 146 else |