@@ -2121,6 +2121,85 @@ static void optim_remove_unused_temporary( Environment * _environment ) {
2121
2121
optim ( buf [2 ], RULE "unused temporary" , "\tTST%s" , v1 -> str );
2122
2122
++ _environment -> removedAssemblyLines ;
2123
2123
}
2124
+
2125
+ } else if (
2126
+ ( ( po_buf_match ( buf [0 ], " LDA #*" , v1 ) || po_buf_match ( buf [0 ], " CLRA" ) ) && po_buf_match ( buf [1 ], " STA *" , v2 ) && po_buf_match ( buf [2 ], " STD *" , v3 ) ) ||
2127
+ ( ( po_buf_match ( buf [0 ], " LDB #*" , v1 ) || po_buf_match ( buf [0 ], " CLRB" ) ) && po_buf_match ( buf [1 ], " STB *" , v2 ) && po_buf_match ( buf [2 ], " STD *" , v3 ) )
2128
+ ) {
2129
+
2130
+ char * realVarName = strdup ( v2 -> str );
2131
+ char * c = strstr ( realVarName , "+" );
2132
+ if ( c ) {
2133
+ * c = 0 ;
2134
+ }
2135
+ c = strstr ( realVarName , "<(" );
2136
+ if ( c ) {
2137
+ strcpy ( c , c + 2 );
2138
+ }
2139
+ c = strstr ( realVarName , ")" );
2140
+ if ( c ) {
2141
+ * c = 0 ;
2142
+ }
2143
+
2144
+ // printf(" RULE #2 for [%s]\n", realVarName );
2145
+
2146
+ UnusedSymbol * tmp = currentlyUnusedSymbols ;
2147
+ while ( tmp ) {
2148
+ // printf(" - compare %s = %s\n", realVarName, tmp->realName );
2149
+ if ( strcmp ( realVarName , tmp -> realName ) == 0 ) {
2150
+ // printf(" > found!\n" );
2151
+ break ;
2152
+ }
2153
+ tmp = tmp -> next ;
2154
+ }
2155
+ // printf( "\n" );
2156
+ if ( tmp ) {
2157
+ // printf(" APPLIED #2\n");
2158
+ // optim( buf[0], RULE "unused temporary bug", NULL );
2159
+ optim ( buf [1 ], RULE "unused temporary" , NULL );
2160
+ ++ _environment -> removedAssemblyLines ;
2161
+ ++ _environment -> removedAssemblyLines ;
2162
+ }
2163
+ } else if (
2164
+ po_buf_match ( buf [0 ], " DEC*" , v1 ) &&
2165
+ po_buf_match ( buf [1 ], "_*" , v4 ) &&
2166
+ po_buf_match ( buf [2 ], " ST* *" , v3 , v2 ) &&
2167
+ (po_buf_cmp ( v1 , v3 ) == 0 )
2168
+ ) {
2169
+
2170
+ char * realVarName = strdup ( v2 -> str );
2171
+ char * c = strstr ( realVarName , "+" );
2172
+ if ( c ) {
2173
+ * c = 0 ;
2174
+ }
2175
+ c = strstr ( realVarName , "<(" );
2176
+ if ( c ) {
2177
+ strcpy ( c , c + 2 );
2178
+ }
2179
+ c = strstr ( realVarName , ")" );
2180
+ if ( c ) {
2181
+ * c = 0 ;
2182
+ }
2183
+
2184
+ // printf(" RULE #2 for [%s]\n", realVarName );
2185
+
2186
+ UnusedSymbol * tmp = currentlyUnusedSymbolsQ ;
2187
+ while ( tmp ) {
2188
+ // printf(" - compare %s = %s\n", realVarName, tmp->realName );
2189
+ if ( strcmp ( realVarName , tmp -> realName ) == 0 ) {
2190
+ // printf(" > found!\n" );
2191
+ break ;
2192
+ }
2193
+ tmp = tmp -> next ;
2194
+ }
2195
+ // printf( "\n" );
2196
+ if ( tmp ) {
2197
+ // printf(" APPLIED #2\n");
2198
+ // optim( buf[0], RULE "unused temporary", NULL );
2199
+ optim ( buf [2 ], RULE "unused temporary" , "\tTST%s" , v1 -> str );
2200
+ ++ _environment -> removedAssemblyLines ;
2201
+ }
2202
+
2124
2203
} else if (
2125
2204
( ( po_buf_match ( buf [0 ], " LDA #*" , v1 ) || po_buf_match ( buf [0 ], " CLRA" ) ) && po_buf_match ( buf [1 ], " STA *" , v2 ) ) ||
2126
2205
( ( po_buf_match ( buf [0 ], " LDB #*" , v1 ) || po_buf_match ( buf [0 ], " CLRB" ) ) && po_buf_match ( buf [1 ], " STB *" , v2 ) ) ||
@@ -2155,7 +2234,7 @@ static void optim_remove_unused_temporary( Environment * _environment ) {
2155
2234
// printf( "\n" );
2156
2235
if ( tmp ) {
2157
2236
// printf(" APPLIED #2\n");
2158
- // optim( buf[0], RULE "unused temporary", NULL );
2237
+ optim ( buf [0 ], RULE "unused temporary bug " , NULL );
2159
2238
optim ( buf [1 ], RULE "unused temporary" , NULL );
2160
2239
++ _environment -> removedAssemblyLines ;
2161
2240
++ _environment -> removedAssemblyLines ;
0 commit comments