src/Sim/Predictor/BPred/RAS.h

説明を見る。
00001 // 
00002 // Copyright (c) 2005-2008 Kenichi Watanabe.
00003 // Copyright (c) 2005-2008 Yasuhiro Watari.
00004 // Copyright (c) 2005-2008 Hironori Ichibayashi.
00005 // Copyright (c) 2008-2009 Kazuo Horio.
00006 // Copyright (c) 2009-2013 Naruki Kurata.
00007 // Copyright (c) 2005-2013 Ryota Shioya.
00008 // Copyright (c) 2005-2013 Masahiro Goshima.
00009 // 
00010 // This software is provided 'as-is', without any express or implied
00011 // warranty. In no event will the authors be held liable for any damages
00012 // arising from the use of this software.
00013 // 
00014 // Permission is granted to anyone to use this software for any purpose,
00015 // including commercial applications, and to alter it and redistribute it
00016 // freely, subject to the following restrictions:
00017 // 
00018 // 1. The origin of this software must not be misrepresented; you must not
00019 // claim that you wrote the original software. If you use this software
00020 // in a product, an acknowledgment in the product documentation would be
00021 // appreciated but is not required.
00022 // 
00023 // 2. Altered source versions must be plainly marked as such, and must not be
00024 // misrepresented as being the original software.
00025 // 
00026 // 3. This notice may not be removed or altered from any source
00027 // distribution.
00028 // 
00029 // 
00030 
00031 
00032 #ifndef __RAS_H__
00033 #define __RAS_H__
00034 
00035 #include "Interface/Addr.h"
00036 #include "Interface/OpStateIF.h"
00037 #include "Sim/Foundation/Checkpoint/CheckpointedData.h"
00038 
00039 #include "Env/Param/ParamExchange.h"
00040 #include "Sim/Foundation/Resource/ResourceNode.h"
00041 
00042 namespace Onikiri 
00043 {
00044     class SimPC;
00045 
00046     // return address stack
00047     class RAS : public PhysicalResourceNode
00048     {
00049     private:
00050         CheckpointMaster*     m_checkpointMaster;
00051         CheckpointedData<int> m_stackTop; // Stackgbvヲ
00052         std::vector<PC>       m_stack;
00053 
00054         CheckpointedData<int> m_backupStackTop;
00055         static const int MAX_BACKUP_SIZE = 1;
00056         typedef boost::array< PC, MAX_BACKUP_SIZE > BackupStack;
00057         CheckpointedData< BackupStack > m_backupStack;
00058         bool m_enableBackup;
00059 
00060         int m_stackSize;
00061     public:
00062         // parameter mapping
00063         BEGIN_PARAM_MAP( GetParamPath() )
00064             PARAM_ENTRY( "@StackSize", m_stackSize )
00065             PARAM_ENTRY( "@EnableBackup", m_enableBackup )
00066         END_PARAM_MAP()
00067 
00068         BEGIN_RESOURCE_MAP()
00069             RESOURCE_ENTRY( CheckpointMaster, "checkpointMaster", m_checkpointMaster )
00070         END_RESOURCE_MAP()
00071 
00072         RAS();
00073         virtual ~RAS();
00074 
00075         void Initialize(InitPhase phase);
00076 
00077         // call PCpush
00078         void Push(const SimPC& pc);
00079         
00080         // return PCPop
00081         SimPC Pop();
00082 
00083         // accessors
00084         int GetStackSize() { return m_stackSize; }
00085 
00086         int PointStackPos(int basePos, int stackSize, int offset) 
00087         { return (basePos + stackSize + offset) % stackSize; }
00088     };
00089 
00090 }; // namespace Onikiri
00091 
00092 #endif // __RAS_H__
00093 

Onikiri2に対してTue Jun 18 14:34:25 2013に生成されました。  doxygen 1.4.7