// -*- c++ -*-
//
// regfile.h:
// register file
//
#ifndef	REGFILE_H
#define	REGFILE_H

#include "sim.h"

//#define	ZERO_REG_NUMBER		0

using namespace std;

class regfile {
private:
    int		num_of_regs;
    sim_word	*data;
public:
    // constuctor
    regfile(int size = 32) {
        num_of_regs = size;
        data = new sim_word[size];

        reset();
    }

    // destructor
    ~regfile() {
        delete[] data;
    }

    void reset() {
        for (int i = 0; i < num_of_regs; i++)
            data[i] = 0;
    }

    sim_word &operator[](int i) {
        if (i < 0 || i >= num_of_regs) {
            cerr << "regfile::operator[]: illegal register number "
                 << i << endl;
            i = 0;
        }
#ifdef	ZERO_REG_NUMBER
        data[ZERO_REG_NUMBER] = 0;	// usually register 0 always zero
#endif
        return data[i];
    }
};

#endif
// end of regfile.h