/* * $Id: registers.h,v 1.1 2002/11/26 22:27:33 misto Exp $ */ #ifndef SMARC_PROC_REGISTERS_H #define SMARC_PROC_REGISTERS_H #include "circuit.h" #include "instr_word.h" // in[0] - instruction word // in[1] - result // in[2] - result addr // out[0] - A1 // out[1] - A2 // out[2] - R class registers : public circuit { private: vector regs; instr_word iw; public: registers( int nin , int nout ) : circuit(nin, nout), regs(512) {}; void process(int /*CWP*/) { int src1 = 0, src2 = 0, dst = 0; iw = get_in(0); if (iw.format == instr_word::primary_reg || iw.format == instr_word::primary_imm ) src1 = iw.src1; if (iw.format == instr_word::primary_reg ) src2 = iw.src2; if (iw.format == instr_word::primary_reg || iw.format == instr_word::primary_imm || iw.format == instr_word::sethi_format ) dst = iw.dst; set_out( 0, regs[src1] ); set_out( 1, regs[src2] ); set_out( 2, regs[dst] ); int in = get_in(2); regs[in] = get_in(1); } }; #endif