summaryrefslogtreecommitdiff
path: root/src/arch/x86/microcode_rom.hh
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2008-10-12 17:48:44 -0700
committerGabe Black <gblack@eecs.umich.edu>2008-10-12 17:48:44 -0700
commite5f80924671bf0cfaf02c51f4b98d529631733f1 (patch)
tree1bdc1b3d0178e4648bbde6f4de378a20d295d027 /src/arch/x86/microcode_rom.hh
parentc9ea0b73492bf116c836c54199898f29d9664bc0 (diff)
downloadgem5-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.hh37
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__