diff --git a/src/arch/arm/insts/macromem.hh b/src/arch/arm/insts/macromem.hh index 8541131fd4..1dd69ea01e 100644 --- a/src/arch/arm/insts/macromem.hh +++ b/src/arch/arm/insts/macromem.hh @@ -42,6 +42,7 @@ #define __ARCH_ARM_MACROMEM_HH__ #include "arch/arm/insts/pred_inst.hh" +#include "arch/arm/pcstate.hh" #include "arch/arm/tlb.hh" namespace gem5 @@ -75,14 +76,15 @@ class MicroOp : public PredOp public: void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { + auto &apc = pcState.as(); if (flags[IsLastMicroop]) { - pcState.uEnd(); + apc.uEnd(); } else if (flags[IsMicroop]) { - pcState.uAdvance(); + apc.uAdvance(); } else { - pcState.advance(); + apc.advance(); } } }; @@ -96,14 +98,15 @@ class MicroOpX : public ArmStaticInst public: void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { + auto &apc = pcState.as(); if (flags[IsLastMicroop]) { - pcState.uEnd(); + apc.uEnd(); } else if (flags[IsMicroop]) { - pcState.uAdvance(); + apc.uAdvance(); } else { - pcState.advance(); + apc.advance(); } } }; diff --git a/src/arch/arm/insts/mem.hh b/src/arch/arm/insts/mem.hh index 7bee981ad4..4a2c8a0034 100644 --- a/src/arch/arm/insts/mem.hh +++ b/src/arch/arm/insts/mem.hh @@ -42,6 +42,7 @@ #define __ARCH_ARM_MEM_HH__ #include "arch/arm/insts/pred_inst.hh" +#include "arch/arm/pcstate.hh" namespace gem5 { @@ -57,14 +58,15 @@ class MightBeMicro : public PredOp {} void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { + auto &apc = pcState.as(); if (flags[IsLastMicroop]) { - pcState.uEnd(); + apc.uEnd(); } else if (flags[IsMicroop]) { - pcState.uAdvance(); + apc.uAdvance(); } else { - pcState.advance(); + apc.advance(); } } }; diff --git a/src/arch/arm/insts/mem64.hh b/src/arch/arm/insts/mem64.hh index 7fb168ccfb..e2dd5dd481 100644 --- a/src/arch/arm/insts/mem64.hh +++ b/src/arch/arm/insts/mem64.hh @@ -40,6 +40,7 @@ #include "arch/arm/insts/misc64.hh" #include "arch/arm/insts/static_inst.hh" +#include "arch/arm/pcstate.hh" namespace gem5 { @@ -75,14 +76,15 @@ class MightBeMicro64 : public ArmStaticInst {} void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { + auto &apc = pcState.as(); if (flags[IsLastMicroop]) { - pcState.uEnd(); + apc.uEnd(); } else if (flags[IsMicroop]) { - pcState.uAdvance(); + apc.uAdvance(); } else { - pcState.advance(); + apc.advance(); } } }; diff --git a/src/arch/arm/insts/pred_inst.hh b/src/arch/arm/insts/pred_inst.hh index 2e35622fef..1f62614058 100644 --- a/src/arch/arm/insts/pred_inst.hh +++ b/src/arch/arm/insts/pred_inst.hh @@ -42,6 +42,7 @@ #define __ARCH_ARM_INSTS_PREDINST_HH__ #include "arch/arm/insts/static_inst.hh" +#include "arch/arm/pcstate.hh" #include "base/compiler.hh" #include "base/logging.hh" #include "base/trace.hh" @@ -391,12 +392,13 @@ class PredMicroop : public PredOp } void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { + auto &apc = pcState.as(); if (flags[IsLastMicroop]) - pcState.uEnd(); + apc.uEnd(); else - pcState.uAdvance(); + apc.uAdvance(); } }; diff --git a/src/arch/arm/insts/static_inst.hh b/src/arch/arm/insts/static_inst.hh index 95e7f0958b..3979a4951d 100644 --- a/src/arch/arm/insts/static_inst.hh +++ b/src/arch/arm/insts/static_inst.hh @@ -46,6 +46,7 @@ #include "arch/arm/faults.hh" #include "arch/arm/utility.hh" #include "arch/arm/isa.hh" +#include "arch/arm/pcstate.hh" #include "arch/arm/self_debug.hh" #include "arch/arm/system.hh" #include "base/trace.hh" @@ -197,9 +198,9 @@ class ArmStaticInst : public StaticInst uint64_t imm) const; void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { - pcState.advance(); + pcState.as().advance(); } uint64_t getEMI() const override { return machInst; } diff --git a/src/arch/arm/insts/vfp.hh b/src/arch/arm/insts/vfp.hh index 5f5b374549..76b727eda5 100644 --- a/src/arch/arm/insts/vfp.hh +++ b/src/arch/arm/insts/vfp.hh @@ -43,6 +43,7 @@ #include #include "arch/arm/insts/misc.hh" +#include "arch/arm/pcstate.hh" #include "arch/arm/regs/misc.hh" namespace gem5 @@ -853,14 +854,15 @@ class FpOp : public PredOp bool flush, uint32_t rMode) const; void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { + auto &apc = pcState.as(); if (flags[IsLastMicroop]) { - pcState.uEnd(); + apc.uEnd(); } else if (flags[IsMicroop]) { - pcState.uAdvance(); + apc.uAdvance(); } else { - pcState.advance(); + apc.advance(); } } diff --git a/src/arch/mips/isa/base.isa b/src/arch/mips/isa/base.isa index bfc46c23c3..b02a8c4ad9 100644 --- a/src/arch/mips/isa/base.isa +++ b/src/arch/mips/isa/base.isa @@ -59,9 +59,9 @@ output header {{ ExtMachInst machInst; void - advancePC(MipsISA::PCState &pc) const override + advancePC(PCStateBase &pc) const override { - pc.advance(); + pc.as().advance(); } PCState diff --git a/src/arch/power/insts/static_inst.hh b/src/arch/power/insts/static_inst.hh index 54ef589536..bbe93fe4d2 100644 --- a/src/arch/power/insts/static_inst.hh +++ b/src/arch/power/insts/static_inst.hh @@ -29,6 +29,7 @@ #ifndef __ARCH_POWER_INSTS_STATICINST_HH__ #define __ARCH_POWER_INSTS_STATICINST_HH__ +#include "arch/power/pcstate.hh" #include "arch/power/types.hh" #include "base/trace.hh" #include "cpu/static_inst.hh" @@ -68,9 +69,9 @@ class PowerStaticInst : public StaticInst Addr pc, const loader::SymbolTable *symtab) const override; void - advancePC(PowerISA::PCState &pcState) const override + advancePC(PCStateBase &pc_state) const override { - pcState.advance(); + pc_state.as().advance(); } PCState diff --git a/src/arch/riscv/insts/static_inst.cc b/src/arch/riscv/insts/static_inst.cc index de40f67dba..ee8ab43e75 100644 --- a/src/arch/riscv/insts/static_inst.cc +++ b/src/arch/riscv/insts/static_inst.cc @@ -29,6 +29,7 @@ #include "arch/riscv/insts/static_inst.hh" +#include "arch/riscv/pcstate.hh" #include "arch/riscv/types.hh" #include "cpu/static_inst.hh" @@ -39,12 +40,13 @@ namespace RiscvISA { void -RiscvMicroInst::advancePC(PCState &pcState) const +RiscvMicroInst::advancePC(PCStateBase &pcState) const { + auto &rpc = pcState.as(); if (flags[IsLastMicroop]) { - pcState.uEnd(); + rpc.uEnd(); } else { - pcState.uAdvance(); + rpc.uAdvance(); } } diff --git a/src/arch/riscv/insts/static_inst.hh b/src/arch/riscv/insts/static_inst.hh index 867f9a486a..1e2ec2854f 100644 --- a/src/arch/riscv/insts/static_inst.hh +++ b/src/arch/riscv/insts/static_inst.hh @@ -32,6 +32,7 @@ #include +#include "arch/riscv/pcstate.hh" #include "arch/riscv/types.hh" #include "cpu/exec_context.hh" #include "cpu/static_inst.hh" @@ -57,7 +58,11 @@ class RiscvStaticInst : public StaticInst public: ExtMachInst machInst; - void advancePC(PCState &pc) const override { pc.advance(); } + void + advancePC(PCStateBase &pc) const override + { + pc.as().advance(); + } PCState buildRetPC(const PCState &curPC, const PCState &callPC) const override @@ -131,7 +136,7 @@ class RiscvMicroInst : public RiscvStaticInst flags[IsMicroop] = true; } - void advancePC(PCState &pcState) const override; + void advancePC(PCStateBase &pcState) const override; }; } // namespace RiscvISA diff --git a/src/arch/sparc/insts/micro.hh b/src/arch/sparc/insts/micro.hh index 2d8918988f..b07e8c27ca 100644 --- a/src/arch/sparc/insts/micro.hh +++ b/src/arch/sparc/insts/micro.hh @@ -101,12 +101,13 @@ class SparcMicroInst : public SparcStaticInst } void - advancePC(SparcISA::PCState &pcState) const override + advancePC(PCStateBase &pc_state) const override { + auto &spc = pc_state.as(); if (flags[IsLastMicroop]) - pcState.uEnd(); + spc.uEnd(); else - pcState.uAdvance(); + spc.uAdvance(); } }; diff --git a/src/arch/sparc/insts/static_inst.cc b/src/arch/sparc/insts/static_inst.cc index 2b35783c21..d6da2b05ff 100644 --- a/src/arch/sparc/insts/static_inst.cc +++ b/src/arch/sparc/insts/static_inst.cc @@ -29,6 +29,7 @@ #include "arch/sparc/insts/static_inst.hh" +#include "arch/sparc/pcstate.hh" #include "arch/sparc/regs/int.hh" #include "arch/sparc/regs/misc.hh" #include "base/bitunion.hh" @@ -79,9 +80,9 @@ SparcStaticInst::printRegArray(std::ostream &os, const RegId *indexArray, } void -SparcStaticInst::advancePC(SparcISA::PCState &pcState) const +SparcStaticInst::advancePC(PCStateBase &pcState) const { - pcState.advance(); + pcState.as().advance(); } void diff --git a/src/arch/sparc/insts/static_inst.hh b/src/arch/sparc/insts/static_inst.hh index 5b67b80bf8..b2dfd5e9d0 100644 --- a/src/arch/sparc/insts/static_inst.hh +++ b/src/arch/sparc/insts/static_inst.hh @@ -32,6 +32,7 @@ #include +#include "arch/sparc/pcstate.hh" #include "arch/sparc/types.hh" #include "base/trace.hh" #include "cpu/exec_context.hh" @@ -110,7 +111,7 @@ class SparcStaticInst : public StaticInst void printRegArray(std::ostream &os, const RegId *indexArray, int num) const; - void advancePC(PCState &pcState) const override; + void advancePC(PCStateBase &pcState) const override; static bool passesFpCondition(uint32_t fcc, uint32_t condition); static bool passesCondition(uint32_t codes, uint32_t condition); diff --git a/src/arch/x86/insts/microop.hh b/src/arch/x86/insts/microop.hh index c59c5b93fe..350294faa2 100644 --- a/src/arch/x86/insts/microop.hh +++ b/src/arch/x86/insts/microop.hh @@ -39,6 +39,7 @@ #define __ARCH_X86_INSTS_MICROOP_HH__ #include "arch/x86/insts/static_inst.hh" +#include "arch/x86/pcstate.hh" #include "base/compiler.hh" namespace gem5 @@ -132,12 +133,13 @@ class X86MicroopBase : public X86StaticInst bool checkCondition(uint64_t flags, int condition) const; void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { + auto &xpc = pcState.as(); if (flags[IsLastMicroop]) - pcState.uEnd(); + xpc.uEnd(); else - pcState.uAdvance(); + xpc.uAdvance(); } PCState branchTarget(const PCState &branchPC) const override; diff --git a/src/arch/x86/insts/static_inst.hh b/src/arch/x86/insts/static_inst.hh index 3b2b9f681a..1654e81cc0 100644 --- a/src/arch/x86/insts/static_inst.hh +++ b/src/arch/x86/insts/static_inst.hh @@ -38,6 +38,7 @@ #ifndef __ARCH_X86_INSTS_STATICINST_HH__ #define __ARCH_X86_INSTS_STATICINST_HH__ +#include "arch/x86/pcstate.hh" #include "arch/x86/types.hh" #include "base/trace.hh" #include "cpu/static_inst.hh" @@ -198,9 +199,9 @@ class X86StaticInst : public StaticInst } void - advancePC(PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { - pcState.advance(); + pcState.as().advance(); } PCState diff --git a/src/cpu/nop_static_inst.cc b/src/cpu/nop_static_inst.cc index 8baf948796..b9a69dcb3e 100644 --- a/src/cpu/nop_static_inst.cc +++ b/src/cpu/nop_static_inst.cc @@ -28,6 +28,7 @@ #include "cpu/nop_static_inst.hh" +#include "arch/pcstate.hh" #include "cpu/static_inst.hh" namespace gem5 @@ -48,9 +49,9 @@ class NopStaticInst : public StaticInst } void - advancePC(TheISA::PCState &pcState) const override + advancePC(PCStateBase &pcState) const override { - pcState.advance(); + pcState.as().advance(); } std::string diff --git a/src/cpu/static_inst.hh b/src/cpu/static_inst.hh index 2039644271..d8c09ad623 100644 --- a/src/cpu/static_inst.hh +++ b/src/cpu/static_inst.hh @@ -320,7 +320,7 @@ class StaticInst : public RefCounted, public StaticInstFlags panic("completeAcc not defined!"); } - virtual void advancePC(TheISA::PCState &pc_state) const = 0; + virtual void advancePC(PCStateBase &pc_state) const = 0; virtual TheISA::PCState buildRetPC(const TheISA::PCState &cur_pc,