diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-02-25 10:18:22 -0800 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-02-25 10:18:22 -0800 |
commit | dc53ca89f685155ff00103ed013b1ed6a6ad91a6 (patch) | |
tree | 828f6e8583bc62e3182ff48e90e299138acd4307 /src/arch/x86/insts | |
parent | 897c3748925e83301027d85dbc4c0479d972fda4 (diff) | |
download | gem5-dc53ca89f685155ff00103ed013b1ed6a6ad91a6.tar.xz |
X86: Add a flag to force memory accesses to happen at CPL 0.
Diffstat (limited to 'src/arch/x86/insts')
-rw-r--r-- | src/arch/x86/insts/microldstop.hh | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/arch/x86/insts/microldstop.hh b/src/arch/x86/insts/microldstop.hh index eccd37dc2..f0051e2cf 100644 --- a/src/arch/x86/insts/microldstop.hh +++ b/src/arch/x86/insts/microldstop.hh @@ -60,9 +60,16 @@ #include "arch/x86/insts/microop.hh" #include "mem/packet.hh" +#include "mem/request.hh" namespace X86ISA { + static const Request::FlagsType SegmentFlagMask = mask(4); + static const int FlagShift = 4; + enum FlagBit { + CPL0FlagBit = 1 + }; + /** * Base class for load and store ops */ @@ -77,6 +84,7 @@ namespace X86ISA const RegIndex data; const uint8_t dataSize; const uint8_t addressSize; + const Request::FlagsType memFlags; RegIndex foldOBit, foldABit; //Constructor @@ -87,13 +95,15 @@ namespace X86ISA uint64_t _disp, uint8_t _segment, RegIndex _data, uint8_t _dataSize, uint8_t _addressSize, + Request::FlagsType _memFlags, OpClass __opClass) : X86MicroopBase(machInst, mnem, _instMnem, isMicro, isDelayed, isFirst, isLast, __opClass), scale(_scale), index(_index), base(_base), disp(_disp), segment(_segment), data(_data), - dataSize(_dataSize), addressSize(_addressSize) + dataSize(_dataSize), addressSize(_addressSize), + memFlags(_memFlags | _segment) { foldOBit = (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0; foldABit = |