diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2008-10-12 17:48:44 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2008-10-12 17:48:44 -0700 |
commit | e5f80924671bf0cfaf02c51f4b98d529631733f1 (patch) | |
tree | 1bdc1b3d0178e4648bbde6f4de378a20d295d027 /src/arch/x86/microcode_rom.hh | |
parent | c9ea0b73492bf116c836c54199898f29d9664bc0 (diff) | |
download | gem5-e5f80924671bf0cfaf02c51f4b98d529631733f1.tar.xz |
X86: Make X86's microcode ROM actually do something.
Diffstat (limited to 'src/arch/x86/microcode_rom.hh')
-rw-r--r-- | src/arch/x86/microcode_rom.hh | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/arch/x86/microcode_rom.hh b/src/arch/x86/microcode_rom.hh index 1495ff699..f8ad410ce 100644 --- a/src/arch/x86/microcode_rom.hh +++ b/src/arch/x86/microcode_rom.hh @@ -31,11 +31,44 @@ #ifndef __ARCH_X86_MICROCODE_ROM_HH__ #define __ARCH_X86_MICROCODE_ROM_HH__ -#include "sim/microcode_rom.hh" +#include "arch/x86/emulenv.hh" +#include "cpu/static_inst.hh" + +namespace X86ISAInst +{ + class MicrocodeRom + { + protected: + + typedef StaticInstPtr (*GenFunc)(StaticInstPtr); + + static const MicroPC numMicroops; + + GenFunc * genFuncs; + + public: + //Constructor. + MicrocodeRom(); + + //Destructor. + ~MicrocodeRom() + { + delete [] genFuncs; + } + + StaticInstPtr + fetchMicroop(MicroPC microPC, StaticInstPtr curMacroop) + { + microPC = normalMicroPC(microPC); + assert(microPC < numMicroops); + return genFuncs[microPC](curMacroop); + } + }; +} namespace X86ISA { - using ::MicrocodeRom; + using X86ISAInst::MicrocodeRom; } #endif // __ARCH_X86_MICROCODE_ROM_HH__ |