dyn_inst.hh revision 9918:2c7219e2d999
18981Sandreas.hansson@arm.com/*
210902Sandreas.sandberg@arm.com * Copyright (c) 2010 ARM Limited
38981Sandreas.hansson@arm.com * Copyright (c) 2013 Advanced Micro Devices, Inc.
48981Sandreas.hansson@arm.com * All rights reserved
58981Sandreas.hansson@arm.com *
68981Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall
78981Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual
88981Sandreas.hansson@arm.com * property including but not limited to intellectual property relating
98981Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software
108981Sandreas.hansson@arm.com * licensed hereunder.  You may use the software subject to the license
118981Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated
128981Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software,
138981Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form.
148981Sandreas.hansson@arm.com *
158981Sandreas.hansson@arm.com * Copyright (c) 2004-2006 The Regents of The University of Michigan
168981Sandreas.hansson@arm.com * All rights reserved.
178981Sandreas.hansson@arm.com *
188981Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without
198981Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are
208981Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright
218981Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer;
228981Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright
238981Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the
248981Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution;
258981Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its
268981Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from
278981Sandreas.hansson@arm.com * this software without specific prior written permission.
288981Sandreas.hansson@arm.com *
298981Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
308981Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
318981Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
328981Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
338981Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
348981Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
358981Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
368981Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
378981Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
388981Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
398981Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
408981Sandreas.hansson@arm.com *
418981Sandreas.hansson@arm.com * Authors: Kevin Lim
428981Sandreas.hansson@arm.com */
438981Sandreas.hansson@arm.com
448981Sandreas.hansson@arm.com#ifndef __CPU_O3_DYN_INST_HH__
458981Sandreas.hansson@arm.com#define __CPU_O3_DYN_INST_HH__
468981Sandreas.hansson@arm.com
4710994Sandreas.sandberg@arm.com#include "arch/isa_traits.hh"
488981Sandreas.hansson@arm.com#include "config/the_isa.hh"
498981Sandreas.hansson@arm.com#include "cpu/o3/cpu.hh"
508981Sandreas.hansson@arm.com#include "cpu/o3/isa_specific.hh"
518981Sandreas.hansson@arm.com#include "cpu/base_dyn_inst.hh"
528981Sandreas.hansson@arm.com#include "cpu/inst_seq.hh"
538981Sandreas.hansson@arm.com#include "cpu/reg_class.hh"
548981Sandreas.hansson@arm.com
558981Sandreas.hansson@arm.comclass Packet;
568981Sandreas.hansson@arm.com
578981Sandreas.hansson@arm.com/**
588981Sandreas.hansson@arm.com * Mostly implementation & ISA specific AlphaDynInst. As with most
598981Sandreas.hansson@arm.com * other classes in the new CPU model, it is templated on the Impl to
608981Sandreas.hansson@arm.com * allow for passing in of all types, such as the CPU type and the ISA
618981Sandreas.hansson@arm.com * type. The AlphaDynInst serves as the primary interface to the CPU
628981Sandreas.hansson@arm.com * for instructions that are executing.
6310902Sandreas.sandberg@arm.com */
648981Sandreas.hansson@arm.comtemplate <class Impl>
658981Sandreas.hansson@arm.comclass BaseO3DynInst : public BaseDynInst<Impl>
668981Sandreas.hansson@arm.com{
678981Sandreas.hansson@arm.com  public:
688981Sandreas.hansson@arm.com    /** Typedef for the CPU. */
698981Sandreas.hansson@arm.com    typedef typename Impl::O3CPU O3CPU;
708981Sandreas.hansson@arm.com
718981Sandreas.hansson@arm.com    /** Binary machine instruction type. */
728981Sandreas.hansson@arm.com    typedef TheISA::MachInst MachInst;
738981Sandreas.hansson@arm.com    /** Extended machine instruction type. */
748981Sandreas.hansson@arm.com    typedef TheISA::ExtMachInst ExtMachInst;
758981Sandreas.hansson@arm.com    /** Logical register index type. */
768981Sandreas.hansson@arm.com    typedef TheISA::RegIndex RegIndex;
7711168Sandreas.hansson@arm.com    /** Integer register index type. */
7811168Sandreas.hansson@arm.com    typedef TheISA::IntReg   IntReg;
7911168Sandreas.hansson@arm.com    typedef TheISA::FloatReg FloatReg;
8011168Sandreas.hansson@arm.com    typedef TheISA::FloatRegBits FloatRegBits;
818981Sandreas.hansson@arm.com    /** Misc register index type. */
8210902Sandreas.sandberg@arm.com    typedef TheISA::MiscReg  MiscReg;
8310902Sandreas.sandberg@arm.com
8411168Sandreas.hansson@arm.com    enum {
858981Sandreas.hansson@arm.com        MaxInstSrcRegs = TheISA::MaxInstSrcRegs,        //< Max source regs
8610902Sandreas.sandberg@arm.com        MaxInstDestRegs = TheISA::MaxInstDestRegs       //< Max dest regs
8711168Sandreas.hansson@arm.com    };
888981Sandreas.hansson@arm.com
898981Sandreas.hansson@arm.com  public:
908981Sandreas.hansson@arm.com    /** BaseDynInst constructor given a binary instruction. */
918981Sandreas.hansson@arm.com    BaseO3DynInst(StaticInstPtr staticInst, StaticInstPtr macroop,
928981Sandreas.hansson@arm.com                  TheISA::PCState pc, TheISA::PCState predPC,
938981Sandreas.hansson@arm.com                  InstSeqNum seq_num, O3CPU *cpu);
948981Sandreas.hansson@arm.com
958981Sandreas.hansson@arm.com    /** BaseDynInst constructor given a static inst pointer. */
968981Sandreas.hansson@arm.com    BaseO3DynInst(StaticInstPtr _staticInst, StaticInstPtr _macroop);
978981Sandreas.hansson@arm.com
988981Sandreas.hansson@arm.com    ~BaseO3DynInst();
998981Sandreas.hansson@arm.com
1008981Sandreas.hansson@arm.com    /** Executes the instruction.*/
1019542Sandreas.hansson@arm.com    Fault execute();
1029542Sandreas.hansson@arm.com
1038981Sandreas.hansson@arm.com    /** Initiates the access.  Only valid for memory operations. */
1048981Sandreas.hansson@arm.com    Fault initiateAcc();
1058981Sandreas.hansson@arm.com
1069542Sandreas.hansson@arm.com    /** Completes the access.  Only valid for memory operations. */
1079542Sandreas.hansson@arm.com    Fault completeAcc(PacketPtr pkt);
1088981Sandreas.hansson@arm.com
1098981Sandreas.hansson@arm.com  private:
1108981Sandreas.hansson@arm.com    /** Initializes variables. */
1118981Sandreas.hansson@arm.com    void initVars();
1128981Sandreas.hansson@arm.com
1138981Sandreas.hansson@arm.com  protected:
1148981Sandreas.hansson@arm.com    /** Values to be written to the destination misc. registers. */
1158981Sandreas.hansson@arm.com    MiscReg _destMiscRegVal[TheISA::MaxMiscDestRegs];
1168981Sandreas.hansson@arm.com
1178981Sandreas.hansson@arm.com    /** Indexes of the destination misc. registers. They are needed to defer
1188981Sandreas.hansson@arm.com     * the write accesses to the misc. registers until the commit stage, when
1198981Sandreas.hansson@arm.com     * the instruction is out of its speculative state.
1208981Sandreas.hansson@arm.com     */
1218981Sandreas.hansson@arm.com    short _destMiscRegIdx[TheISA::MaxMiscDestRegs];
1228981Sandreas.hansson@arm.com
1238981Sandreas.hansson@arm.com    /** Number of destination misc. registers. */
1248981Sandreas.hansson@arm.com    uint8_t _numDestMiscRegs;
1258981Sandreas.hansson@arm.com
1268981Sandreas.hansson@arm.com
1278981Sandreas.hansson@arm.com  public:
1288981Sandreas.hansson@arm.com#if TRACING_ON
1298981Sandreas.hansson@arm.com    /** Tick records used for the pipeline activity viewer. */
1308981Sandreas.hansson@arm.com    Tick fetchTick;	     // instruction fetch is completed.
1318981Sandreas.hansson@arm.com    int32_t decodeTick;  // instruction enters decode phase
1328981Sandreas.hansson@arm.com    int32_t renameTick;  // instruction enters rename phase
1338981Sandreas.hansson@arm.com    int32_t dispatchTick;
1348981Sandreas.hansson@arm.com    int32_t issueTick;
1358981Sandreas.hansson@arm.com    int32_t completeTick;
1368981Sandreas.hansson@arm.com    int32_t commitTick;
1378981Sandreas.hansson@arm.com    int32_t storeTick;
1388981Sandreas.hansson@arm.com#endif
1398981Sandreas.hansson@arm.com
1408981Sandreas.hansson@arm.com    /** Reads a misc. register, including any side-effects the read
1418981Sandreas.hansson@arm.com     * might have as defined by the architecture.
1428981Sandreas.hansson@arm.com     */
1438981Sandreas.hansson@arm.com    MiscReg readMiscReg(int misc_reg)
1448981Sandreas.hansson@arm.com    {
1458981Sandreas.hansson@arm.com        return this->cpu->readMiscReg(misc_reg, this->threadNumber);
1468981Sandreas.hansson@arm.com    }
1478981Sandreas.hansson@arm.com
1488981Sandreas.hansson@arm.com    /** Sets a misc. register, including any side-effects the write
1498981Sandreas.hansson@arm.com     * might have as defined by the architecture.
1508981Sandreas.hansson@arm.com     */
1518981Sandreas.hansson@arm.com    void setMiscReg(int misc_reg, const MiscReg &val)
1528981Sandreas.hansson@arm.com    {
1538981Sandreas.hansson@arm.com        /** Writes to misc. registers are recorded and deferred until the
1548981Sandreas.hansson@arm.com         * commit stage, when updateMiscRegs() is called. First, check if
1558981Sandreas.hansson@arm.com         * the misc reg has been written before and update its value to be
1568981Sandreas.hansson@arm.com         * committed instead of making a new entry. If not, make a new
1578981Sandreas.hansson@arm.com         * entry and record the write.
1588981Sandreas.hansson@arm.com         */
1598981Sandreas.hansson@arm.com        for (int idx = 0; idx < _numDestMiscRegs; idx++) {
1608981Sandreas.hansson@arm.com            if (_destMiscRegIdx[idx] == misc_reg) {
1618981Sandreas.hansson@arm.com               _destMiscRegVal[idx] = val;
1628981Sandreas.hansson@arm.com               return;
1638981Sandreas.hansson@arm.com            }
1648981Sandreas.hansson@arm.com        }
16510713Sandreas.hansson@arm.com
1668981Sandreas.hansson@arm.com        assert(_numDestMiscRegs < TheISA::MaxMiscDestRegs);
16710713Sandreas.hansson@arm.com        _destMiscRegIdx[_numDestMiscRegs] = misc_reg;
1688981Sandreas.hansson@arm.com        _destMiscRegVal[_numDestMiscRegs] = val;
1698981Sandreas.hansson@arm.com        _numDestMiscRegs++;
1708981Sandreas.hansson@arm.com    }
1718981Sandreas.hansson@arm.com
1728981Sandreas.hansson@arm.com    /** Reads a misc. register, including any side-effects the read
1738981Sandreas.hansson@arm.com     * might have as defined by the architecture.
1748981Sandreas.hansson@arm.com     */
1758981Sandreas.hansson@arm.com    TheISA::MiscReg readMiscRegOperand(const StaticInst *si, int idx)
1768981Sandreas.hansson@arm.com    {
1778981Sandreas.hansson@arm.com        return this->cpu->readMiscReg(
1788981Sandreas.hansson@arm.com                si->srcRegIdx(idx) - TheISA::Misc_Reg_Base,
1798981Sandreas.hansson@arm.com                this->threadNumber);
1808981Sandreas.hansson@arm.com    }
1818981Sandreas.hansson@arm.com
1828981Sandreas.hansson@arm.com    /** Sets a misc. register, including any side-effects the write
1838981Sandreas.hansson@arm.com     * might have as defined by the architecture.
1848981Sandreas.hansson@arm.com     */
1858981Sandreas.hansson@arm.com    void setMiscRegOperand(const StaticInst *si, int idx,
1868981Sandreas.hansson@arm.com                                     const MiscReg &val)
1878981Sandreas.hansson@arm.com    {
1888981Sandreas.hansson@arm.com        int misc_reg = si->destRegIdx(idx) - TheISA::Misc_Reg_Base;
1898981Sandreas.hansson@arm.com        setMiscReg(misc_reg, val);
1908981Sandreas.hansson@arm.com    }
1918981Sandreas.hansson@arm.com
1928981Sandreas.hansson@arm.com    /** Called at the commit stage to update the misc. registers. */
1938981Sandreas.hansson@arm.com    void updateMiscRegs()
1948981Sandreas.hansson@arm.com    {
1958981Sandreas.hansson@arm.com        // @todo: Pretty convoluted way to avoid squashing from happening when
1968981Sandreas.hansson@arm.com        // using the TC during an instruction's execution (specifically for
1978981Sandreas.hansson@arm.com        // instructions that have side-effects that use the TC).  Fix this.
1988981Sandreas.hansson@arm.com        // See cpu/o3/dyn_inst_impl.hh.
1998981Sandreas.hansson@arm.com        bool no_squash_from_TC = this->thread->noSquashFromTC;
2008981Sandreas.hansson@arm.com        this->thread->noSquashFromTC = true;
2018981Sandreas.hansson@arm.com
2028981Sandreas.hansson@arm.com        for (int i = 0; i < _numDestMiscRegs; i++)
2038981Sandreas.hansson@arm.com            this->cpu->setMiscReg(
2048981Sandreas.hansson@arm.com                _destMiscRegIdx[i], _destMiscRegVal[i], this->threadNumber);
2058981Sandreas.hansson@arm.com
2068981Sandreas.hansson@arm.com        this->thread->noSquashFromTC = no_squash_from_TC;
2078981Sandreas.hansson@arm.com    }
2088981Sandreas.hansson@arm.com
2098981Sandreas.hansson@arm.com    void forwardOldRegs()
2108981Sandreas.hansson@arm.com    {
2118981Sandreas.hansson@arm.com
2128981Sandreas.hansson@arm.com        for (int idx = 0; idx < this->numDestRegs(); idx++) {
2138981Sandreas.hansson@arm.com            PhysRegIndex prev_phys_reg = this->prevDestRegIdx(idx);
2148981Sandreas.hansson@arm.com            TheISA::RegIndex original_dest_reg =
2158981Sandreas.hansson@arm.com                this->staticInst->destRegIdx(idx);
2169090Sandreas.hansson@arm.com            switch (regIdxToClass(original_dest_reg)) {
2178981Sandreas.hansson@arm.com              case IntRegClass:
2188981Sandreas.hansson@arm.com                this->setIntRegOperand(this->staticInst.get(), idx,
2198981Sandreas.hansson@arm.com                                       this->cpu->readIntReg(prev_phys_reg));
2208981Sandreas.hansson@arm.com                break;
22110713Sandreas.hansson@arm.com              case FloatRegClass:
2228981Sandreas.hansson@arm.com                this->setFloatRegOperandBits(this->staticInst.get(), idx,
22310713Sandreas.hansson@arm.com                                             this->cpu->readFloatRegBits(prev_phys_reg));
2248981Sandreas.hansson@arm.com                break;
2258981Sandreas.hansson@arm.com              case MiscRegClass:
2268981Sandreas.hansson@arm.com                // no need to forward misc reg values
2278981Sandreas.hansson@arm.com                break;
2288981Sandreas.hansson@arm.com            }
2298981Sandreas.hansson@arm.com        }
2308981Sandreas.hansson@arm.com    }
2318981Sandreas.hansson@arm.com    /** Calls hardware return from error interrupt. */
2328981Sandreas.hansson@arm.com    Fault hwrei();
2338981Sandreas.hansson@arm.com    /** Traps to handle specified fault. */
2348981Sandreas.hansson@arm.com    void trap(Fault fault);
2358981Sandreas.hansson@arm.com    bool simPalCheck(int palFunc);
2368981Sandreas.hansson@arm.com
2378981Sandreas.hansson@arm.com    /** Emulates a syscall. */
2388981Sandreas.hansson@arm.com    void syscall(int64_t callnum);
2398981Sandreas.hansson@arm.com
2408981Sandreas.hansson@arm.com  public:
2418981Sandreas.hansson@arm.com
2428981Sandreas.hansson@arm.com    // The register accessor methods provide the index of the
2438981Sandreas.hansson@arm.com    // instruction's operand (e.g., 0 or 1), not the architectural
2448981Sandreas.hansson@arm.com    // register index, to simplify the implementation of register
2458981Sandreas.hansson@arm.com    // renaming.  We find the architectural register index by indexing
2468981Sandreas.hansson@arm.com    // into the instruction's own operand index table.  Note that a
2478981Sandreas.hansson@arm.com    // raw pointer to the StaticInst is provided instead of a
2488981Sandreas.hansson@arm.com    // ref-counted StaticInstPtr to redice overhead.  This is fine as
2498981Sandreas.hansson@arm.com    // long as these methods don't copy the pointer into any long-term
2508981Sandreas.hansson@arm.com    // storage (which is pretty hard to imagine they would have reason
2519090Sandreas.hansson@arm.com    // to do).
2528981Sandreas.hansson@arm.com
2538981Sandreas.hansson@arm.com    uint64_t readIntRegOperand(const StaticInst *si, int idx)
2548981Sandreas.hansson@arm.com    {
25510713Sandreas.hansson@arm.com        return this->cpu->readIntReg(this->_srcRegIdx[idx]);
2568981Sandreas.hansson@arm.com    }
25710713Sandreas.hansson@arm.com
2588981Sandreas.hansson@arm.com    FloatReg readFloatRegOperand(const StaticInst *si, int idx)
2598981Sandreas.hansson@arm.com    {
2608981Sandreas.hansson@arm.com        return this->cpu->readFloatReg(this->_srcRegIdx[idx]);
2618981Sandreas.hansson@arm.com    }
2628981Sandreas.hansson@arm.com
2638981Sandreas.hansson@arm.com    FloatRegBits readFloatRegOperandBits(const StaticInst *si, int idx)
2648981Sandreas.hansson@arm.com    {
2658981Sandreas.hansson@arm.com        return this->cpu->readFloatRegBits(this->_srcRegIdx[idx]);
2668981Sandreas.hansson@arm.com    }
2678981Sandreas.hansson@arm.com
2688981Sandreas.hansson@arm.com    /** @todo: Make results into arrays so they can handle multiple dest
2698981Sandreas.hansson@arm.com     *  registers.
2708981Sandreas.hansson@arm.com     */
2718981Sandreas.hansson@arm.com    void setIntRegOperand(const StaticInst *si, int idx, uint64_t val)
2728981Sandreas.hansson@arm.com    {
2738981Sandreas.hansson@arm.com        this->cpu->setIntReg(this->_destRegIdx[idx], val);
2748981Sandreas.hansson@arm.com        BaseDynInst<Impl>::setIntRegOperand(si, idx, val);
2758981Sandreas.hansson@arm.com    }
2768981Sandreas.hansson@arm.com
2778981Sandreas.hansson@arm.com    void setFloatRegOperand(const StaticInst *si, int idx, FloatReg val)
2788981Sandreas.hansson@arm.com    {
2798981Sandreas.hansson@arm.com        this->cpu->setFloatReg(this->_destRegIdx[idx], val);
2808981Sandreas.hansson@arm.com        BaseDynInst<Impl>::setFloatRegOperand(si, idx, val);
2818981Sandreas.hansson@arm.com    }
2828981Sandreas.hansson@arm.com
2838981Sandreas.hansson@arm.com    void setFloatRegOperandBits(const StaticInst *si, int idx,
2848981Sandreas.hansson@arm.com                                FloatRegBits val)
2858981Sandreas.hansson@arm.com    {
2868981Sandreas.hansson@arm.com        this->cpu->setFloatRegBits(this->_destRegIdx[idx], val);
2878981Sandreas.hansson@arm.com        BaseDynInst<Impl>::setFloatRegOperandBits(si, idx, val);
2888981Sandreas.hansson@arm.com    }
2898981Sandreas.hansson@arm.com
2908981Sandreas.hansson@arm.com#if THE_ISA == MIPS_ISA
2918981Sandreas.hansson@arm.com    uint64_t readRegOtherThread(int misc_reg)
2928981Sandreas.hansson@arm.com    {
2938981Sandreas.hansson@arm.com        panic("MIPS MT not defined for O3 CPU.\n");
2948981Sandreas.hansson@arm.com        return 0;
2958981Sandreas.hansson@arm.com    }
2968981Sandreas.hansson@arm.com
2978981Sandreas.hansson@arm.com    void setRegOtherThread(int misc_reg, const TheISA::MiscReg &val)
2988981Sandreas.hansson@arm.com    {
2998981Sandreas.hansson@arm.com        panic("MIPS MT not defined for O3 CPU.\n");
3008981Sandreas.hansson@arm.com    }
3018981Sandreas.hansson@arm.com#endif
3028981Sandreas.hansson@arm.com
3038981Sandreas.hansson@arm.com  public:
3048981Sandreas.hansson@arm.com    /** Calculates EA part of a memory instruction. Currently unused,
3058981Sandreas.hansson@arm.com     * though it may be useful in the future if we want to split
3068981Sandreas.hansson@arm.com     * memory operations into EA calculation and memory access parts.
3078981Sandreas.hansson@arm.com     */
3088981Sandreas.hansson@arm.com    Fault calcEA()
3098981Sandreas.hansson@arm.com    {
3108981Sandreas.hansson@arm.com        return this->staticInst->eaCompInst()->execute(this, this->traceData);
3118981Sandreas.hansson@arm.com    }
3128981Sandreas.hansson@arm.com
3138981Sandreas.hansson@arm.com    /** Does the memory access part of a memory instruction. Currently unused,
3148981Sandreas.hansson@arm.com     * though it may be useful in the future if we want to split
3158981Sandreas.hansson@arm.com     * memory operations into EA calculation and memory access parts.
3168981Sandreas.hansson@arm.com     */
3178981Sandreas.hansson@arm.com    Fault memAccess()
3188981Sandreas.hansson@arm.com    {
3198981Sandreas.hansson@arm.com        return this->staticInst->memAccInst()->execute(this, this->traceData);
3208981Sandreas.hansson@arm.com    }
3218981Sandreas.hansson@arm.com};
3228981Sandreas.hansson@arm.com
3238981Sandreas.hansson@arm.com#endif // __CPU_O3_ALPHA_DYN_INST_HH__
3248981Sandreas.hansson@arm.com
3258981Sandreas.hansson@arm.com