36 |
// out[2] - R |
// out[2] - R |
37 |
class registers : public circuit { |
class registers : public circuit { |
38 |
private: |
private: |
39 |
|
const int win_num; |
40 |
vector<unsigned long> regs; |
vector<unsigned long> regs; |
41 |
instr_word iw; |
instr_word iw; |
42 |
public: |
public: |
43 |
registers( int nin , int nout ) |
registers( int nin , int nout ) |
44 |
: circuit(nin, nout), regs(512) {}; |
: circuit(nin, nout), win_num(32), |
45 |
void process(int /*CWP*/) { |
regs(8 + 16*win_num) {}; |
46 |
int src1 = 0, src2 = 0, dst = 0; |
void set_reg( int CWP, int n, unsigned long val ); |
47 |
iw = get_in(0); |
unsigned long get_reg( int CWP, int n ); |
48 |
|
void process_out(int CWP); |
49 |
if (iw.format == instr_word::primary_reg || |
void process_in(int CWP); |
|
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); |
|
|
} |
|
50 |
|
|
51 |
}; |
}; |
52 |
|
|