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