src/Sim/Memory/MemOrderManager/MemOrderOperations.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 MEM_ORDER_OPERATIONS_H
00033 #define MEM_ORDER_OPERATIONS_H
00034 
00035 #include "Interface/MemAccess.h"
00036 
00037 namespace Onikiri 
00038 {
00039 
00040     class MemOrderOperations
00041     {
00042     public:
00043 
00044         MemOrderOperations();
00045         void SetTargetEndian( bool targetIsLittleEndian )
00046         {
00047             m_targetIsLittleEndian = targetIsLittleEndian;
00048         }
00049 
00050         void SetAlignment( int alignment );
00051 
00052         // For store-load forwarding on a LS-queue.
00053         u64 ReadPreviousAccess( const MemAccess& load, const MemAccess& store );
00054 
00055         // Merge 2 accesses to a single value.
00056         u64 MergePartialAccess( const MemAccess& base, const MemAccess& store );
00057 
00058         // Convert endian for store-load forwarding.
00059         u64 CorrectEndian( u64 src, int size );
00060 
00061         // AhXd
00062         bool IsOverlapped( const MemAccess& access1, const MemAccess& access2 ) const;
00063         bool IsOverlapped( u64 addr1, int size1, u64 addr2, int size2 ) const;
00064 
00065         bool IsOverlappedInAligned( const MemAccess& access1, const MemAccess& access2 ) const;
00066         bool IsOverlappedInAligned( u64 addr1, int size1, u64 addr2, int size2 ) const;
00067 
00068         // Returns whether a 'inner' access is in a 'outer' access or not.
00069         bool IsInnerAccess( const MemAccess& inner, const MemAccess& outer ) const;
00070         bool IsInnerAccess( u64 inner, int innerSize, u64 outer, int outerSize ) const;
00071 
00072     protected:
00073         bool m_targetIsLittleEndian;    // Whether a target architecture is little endian or not.
00074         int  m_memoryAlignment;
00075         u64  m_memoryAlignmentMask;
00076     };
00077 }; // namespace Onikiri
00078 
00079 #endif // MEM_ORDER_OPERATIONS_H
00080 

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