2a3
> * Copyright (c) 2015 Advanced Micro Devices, Inc.
52c53
< * Base class for load and store ops
---
> * Base class for memory ops
54c55
< class LdStOp : public X86MicroopBase
---
> class MemOp : public X86MicroopBase
62d62
< const RegIndex data;
69c69
< LdStOp(ExtMachInst _machInst,
---
> MemOp(ExtMachInst _machInst,
74d73
< InstRegIndex _data,
81d79
< data(_data.idx),
86c84,85
< foldOBit = (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0;
---
> foldOBit =
> (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0;
89a89
> };
90a91,116
> /**
> * Base class for load and store ops using one register
> */
> class LdStOp : public MemOp
> {
> protected:
> const RegIndex data;
>
> //Constructor
> LdStOp(ExtMachInst _machInst,
> const char * mnem, const char * _instMnem,
> uint64_t setFlags,
> uint8_t _scale, InstRegIndex _index, InstRegIndex _base,
> uint64_t _disp, InstRegIndex _segment,
> InstRegIndex _data,
> uint8_t _dataSize, uint8_t _addressSize,
> Request::FlagsType _memFlags,
> OpClass __opClass) :
> MemOp(_machInst, mnem, _instMnem, setFlags,
> _scale, _index, _base, _disp, _segment,
> _dataSize, _addressSize, _memFlags,
> __opClass),
> data(_data.idx)
> {
> }
>
93a120,153
>
> /**
> * Base class for load and store ops using two registers, we will
> * call them split ops for this reason. These are mainly used to
> * implement cmpxchg8b and cmpxchg16b.
> */
> class LdStSplitOp : public MemOp
> {
> protected:
> const RegIndex dataLow;
> const RegIndex dataHi;
>
> //Constructor
> LdStSplitOp(ExtMachInst _machInst,
> const char * mnem, const char * _instMnem,
> uint64_t setFlags,
> uint8_t _scale, InstRegIndex _index, InstRegIndex _base,
> uint64_t _disp, InstRegIndex _segment,
> InstRegIndex _dataLow, InstRegIndex _dataHi,
> uint8_t _dataSize, uint8_t _addressSize,
> Request::FlagsType _memFlags,
> OpClass __opClass) :
> MemOp(_machInst, mnem, _instMnem, setFlags,
> _scale, _index, _base, _disp, _segment,
> _dataSize, _addressSize, _memFlags,
> __opClass),
> dataLow(_dataLow.idx),
> dataHi(_dataHi.idx)
> {
> }
>
> std::string generateDisassembly(Addr pc,
> const SymbolTable *symtab) const;
> };