/* * va_optimizer.c - Brute force search for optimum vertical adder * * T. Scott Dattalo * NOV98 */ enum INSTRUCTIONS { NOP, MOVWF_r, MOVFW_r, ANDWF_r, ANDFW_r, IORWF_r, IORFW_r, XORWF_r, XORFW_r, COMF_r, COMF_rw, MOVWF_t, MOVFW_t, ANDWF_t, ANDFW_t, IORWF_t, IORFW_t, XORWF_t, XORFW_t, COMF_t, COMF_tw, MOVWF_k, MOVFW_k, ANDWF_k, ANDFW_k, IORWF_k, IORFW_k, XORWF_k, XORFW_k, COMF_k, COMF_kw, CLRF_t, XORLW_ff, TOTAL_INSTRUCTIONS }; char * opcodes[]= { "NOP", "MOVWF_r", "MOVFW_r", "ANDWF_r", "ANDFW_r", "IORWF_r", "IORFW_r", "XORWF_r", "XORFW_r", "COMF_r", "COMF_rw", "MOVWF_t", "MOVFW_t", "ANDWF_t", "ANDFW_t", "IORWF_t", "IORFW_t", "XORWF_t", "XORFW_t", "COMF_t", "COMF_tw", "MOVWF_k", "MOVFW_k", "ANDWF_k", "ANDFW_k", "IORWF_k", "IORFW_k", "XORWF_k", "XORFW_k", "COMF_k", "COMF_kw", "CLRF_t", "XORLW_ff", "last" }; #define PROGRAM_SIZE 6 unsigned int program[PROGRAM_SIZE]; int main(int argc, char ** argv) { unsigned int k, r, w, t, i, current_address, looping, count, done; printf("vertical adder optimizer\n"); printf("%s\n",opcodes[0]); /* Initialize the program: */ for(i = 0; i TOTAL_INSTRUCTIONS) { program[current_address] = NOP+1; if(++current_address >= PROGRAM_SIZE) { looping = 0; done = 1; } else looping = 1; } else { current_address = 0; looping = 0; } } while(looping); } while(!done); }