Made the lldb_private::Opcode struct into a real boy... I mean class.
Modified the Disassembler::Instruction base class to contain an Opcode instance so that we can know the bytes for an instruction without needing to keep the data around. Modified the DisassemblerLLVM's instruction class to correctly extract the opcode bytes if all goes well. llvm-svn: 128248
This commit is contained in:
parent
ceef55466a
commit
0ae962735f
|
@ -19,6 +19,7 @@
|
|||
#include "lldb/lldb-private.h"
|
||||
#include "lldb/Core/Address.h"
|
||||
#include "lldb/Core/ArchSpec.h"
|
||||
#include "lldb/Core/Opcode.h"
|
||||
#include "lldb/Core/PluginInterface.h"
|
||||
|
||||
namespace lldb_private {
|
||||
|
@ -27,6 +28,7 @@ class Instruction
|
|||
{
|
||||
public:
|
||||
Instruction (const Address &addr);
|
||||
Instruction (const Address &addr, const Opcode &opcode);
|
||||
|
||||
virtual
|
||||
~Instruction();
|
||||
|
@ -59,10 +61,19 @@ public:
|
|||
DoesBranch () const = 0;
|
||||
|
||||
virtual size_t
|
||||
Extract (const DataExtractor& data, uint32_t data_offset) = 0;
|
||||
Extract (const Disassembler &disassembler,
|
||||
const DataExtractor& data,
|
||||
uint32_t data_offset) = 0;
|
||||
|
||||
const Opcode &
|
||||
GetOpcode () const
|
||||
{
|
||||
return m_opcode;
|
||||
}
|
||||
|
||||
protected:
|
||||
Address m_addr; // The section offset address of this instruction
|
||||
Opcode m_opcode; // The opcode for this instruction
|
||||
};
|
||||
|
||||
|
||||
|
@ -206,6 +217,12 @@ public:
|
|||
const InstructionList &
|
||||
GetInstructionList () const;
|
||||
|
||||
const ArchSpec &
|
||||
GetArchitecture () const
|
||||
{
|
||||
return m_arch;
|
||||
}
|
||||
|
||||
protected:
|
||||
//------------------------------------------------------------------
|
||||
// Classes that inherit from Disassembler can see and modify these
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include "lldb/lldb-public.h"
|
||||
#include "lldb/Core/PluginInterface.h"
|
||||
#include "lldb/Core/Opcode.h"
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
/// @class EmulateInstruction EmulateInstruction.h "lldb/Core/EmulateInstruction.h"
|
||||
|
@ -432,22 +433,10 @@ public:
|
|||
return m_byte_order;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
OpcodeAsUnsigned (bool *success_ptr)
|
||||
const Opcode &
|
||||
GetOpcode () const
|
||||
{
|
||||
if (success_ptr)
|
||||
*success_ptr = true;
|
||||
switch (m_opcode.type)
|
||||
{
|
||||
case eOpcode8: return m_opcode.data.inst8;
|
||||
case eOpcode16: return m_opcode.data.inst16;
|
||||
case eOpcode32: return m_opcode.data.inst32;
|
||||
case eOpcode64: return m_opcode.data.inst64;
|
||||
case eOpcodeBytes: break;
|
||||
}
|
||||
if (success_ptr)
|
||||
*success_ptr = false;
|
||||
return 0;
|
||||
return m_opcode;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
|
|
@ -0,0 +1,217 @@
|
|||
//===-- Opcode.h ------------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef lldb_Opcode_h
|
||||
#define lldb_Opcode_h
|
||||
|
||||
// C Includes
|
||||
// C++ Includes
|
||||
// Other libraries and framework includes
|
||||
// Project includes
|
||||
#include "lldb/lldb-public.h"
|
||||
|
||||
namespace lldb_private {
|
||||
|
||||
class Opcode
|
||||
{
|
||||
public:
|
||||
enum Type
|
||||
{
|
||||
eTypeInvalid,
|
||||
eType8,
|
||||
eType16,
|
||||
eType32,
|
||||
eType64,
|
||||
eTypeBytes
|
||||
};
|
||||
|
||||
Opcode () : m_type (eTypeInvalid)
|
||||
{
|
||||
}
|
||||
|
||||
Opcode (uint8_t inst) : m_type (eType8)
|
||||
{
|
||||
m_data.inst8 = inst;
|
||||
}
|
||||
|
||||
Opcode (uint16_t inst) : m_type (eType16)
|
||||
{
|
||||
m_data.inst16 = inst;
|
||||
}
|
||||
|
||||
Opcode (uint32_t inst) : m_type (eType32)
|
||||
{
|
||||
m_data.inst32 = inst;
|
||||
}
|
||||
|
||||
Opcode (uint64_t inst) : m_type (eType64)
|
||||
{
|
||||
m_data.inst64 = inst;
|
||||
}
|
||||
|
||||
Opcode (uint8_t *bytes, size_t length)
|
||||
{
|
||||
SetOpcodeBytes (bytes, length);
|
||||
}
|
||||
|
||||
Opcode::Type
|
||||
GetType () const
|
||||
{
|
||||
return m_type;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
GetOpcode8 (uint8_t invalid_opcode = UINT8_MAX) const
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
case Opcode::eTypeInvalid: break;
|
||||
case Opcode::eType8: return m_data.inst8;
|
||||
case Opcode::eType16: break;
|
||||
case Opcode::eType32: break;
|
||||
case Opcode::eType64: break;
|
||||
case Opcode::eTypeBytes: break;
|
||||
break;
|
||||
}
|
||||
return invalid_opcode;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
GetOpcode16 (uint16_t invalid_opcode = UINT16_MAX) const
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
case Opcode::eTypeInvalid: break;
|
||||
case Opcode::eType8: return m_data.inst8;
|
||||
case Opcode::eType16: return m_data.inst16;
|
||||
case Opcode::eType32: break;
|
||||
case Opcode::eType64: break;
|
||||
case Opcode::eTypeBytes: break;
|
||||
}
|
||||
return invalid_opcode;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
GetOpcode32 (uint32_t invalid_opcode = UINT32_MAX) const
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
case Opcode::eTypeInvalid: break;
|
||||
case Opcode::eType8: return m_data.inst8;
|
||||
case Opcode::eType16: return m_data.inst16;
|
||||
case Opcode::eType32: return m_data.inst32;
|
||||
case Opcode::eType64: break;
|
||||
case Opcode::eTypeBytes: break;
|
||||
}
|
||||
return invalid_opcode;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
GetOpcode64 (uint64_t invalid_opcode = UINT64_MAX) const
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
case Opcode::eTypeInvalid: break;
|
||||
case Opcode::eType8: return m_data.inst8;
|
||||
case Opcode::eType16: return m_data.inst16;
|
||||
case Opcode::eType32: return m_data.inst32;
|
||||
case Opcode::eType64: return m_data.inst64;
|
||||
case Opcode::eTypeBytes: break;
|
||||
}
|
||||
return invalid_opcode;
|
||||
}
|
||||
|
||||
void
|
||||
SetOpcode8 (uint8_t inst)
|
||||
{
|
||||
m_type = eType8;
|
||||
m_data.inst8 = inst;
|
||||
}
|
||||
|
||||
void
|
||||
SetOpcode16 (uint16_t inst)
|
||||
{
|
||||
m_type = eType16;
|
||||
m_data.inst16 = inst;
|
||||
}
|
||||
|
||||
void
|
||||
SetOpcode32 (uint32_t inst)
|
||||
{
|
||||
m_type = eType32;
|
||||
m_data.inst32 = inst;
|
||||
}
|
||||
|
||||
void
|
||||
SetOpcode64 (uint64_t inst)
|
||||
{
|
||||
m_type = eType64;
|
||||
m_data.inst64 = inst;
|
||||
}
|
||||
|
||||
void
|
||||
SetOpcodeBytes (const void *bytes, size_t length)
|
||||
{
|
||||
if (bytes && length > 0)
|
||||
{
|
||||
m_type = eTypeBytes;
|
||||
assert (length < sizeof (m_data.inst.bytes));
|
||||
memcpy (m_data.inst.bytes, bytes, length);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_type = eTypeInvalid;
|
||||
m_data.inst.length = 0;
|
||||
}
|
||||
}
|
||||
|
||||
const void *
|
||||
GetOpcodeBytes () const
|
||||
{
|
||||
if (m_type == Opcode::eTypeBytes)
|
||||
return m_data.inst.bytes;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
GetByteSize () const
|
||||
{
|
||||
switch (m_type)
|
||||
{
|
||||
case Opcode::eTypeInvalid: break;
|
||||
case Opcode::eType8: return sizeof(m_data.inst8);
|
||||
case Opcode::eType16: return sizeof(m_data.inst16);
|
||||
case Opcode::eType32: return sizeof(m_data.inst32);
|
||||
case Opcode::eType64: return sizeof(m_data.inst64);
|
||||
case Opcode::eTypeBytes: return m_data.inst.length;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
Opcode::Type m_type;
|
||||
union
|
||||
{
|
||||
uint8_t inst8;
|
||||
uint16_t inst16;
|
||||
uint32_t inst32;
|
||||
uint64_t inst64;
|
||||
struct
|
||||
{
|
||||
uint8_t length;
|
||||
uint8_t bytes[16]; // This must be big enough to handle any opcode for any supported target.
|
||||
} inst;
|
||||
} m_data;
|
||||
};
|
||||
|
||||
} // namespace lldb_private
|
||||
|
||||
#endif // lldb_Opcode_h
|
|
@ -65,33 +65,6 @@ namespace lldb_private
|
|||
// pass it.
|
||||
} OptionDefinition;
|
||||
|
||||
|
||||
enum OpcodeType
|
||||
{
|
||||
eOpcode8,
|
||||
eOpcode16,
|
||||
eOpcode32,
|
||||
eOpcode64,
|
||||
eOpcodeBytes
|
||||
};
|
||||
|
||||
struct Opcode
|
||||
{
|
||||
OpcodeType type;
|
||||
union
|
||||
{
|
||||
uint8_t inst8;
|
||||
uint16_t inst16;
|
||||
uint32_t inst32;
|
||||
uint64_t inst64;
|
||||
struct
|
||||
{
|
||||
uint8_t length;
|
||||
uint8_t bytes[16]; // This must be big enough to handle any opcode for any supported target.
|
||||
} inst;
|
||||
} data;
|
||||
};
|
||||
|
||||
} // namespace lldb_private
|
||||
|
||||
#endif // #if defined(__cplusplus)
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
264A97BF133918BC0017F0BE /* PlatformRemoteGDBServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 264A97BD133918BC0017F0BE /* PlatformRemoteGDBServer.cpp */; };
|
||||
264A97C0133918BC0017F0BE /* PlatformRemoteGDBServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 264A97BE133918BC0017F0BE /* PlatformRemoteGDBServer.h */; };
|
||||
265ABF6310F42EE900531910 /* DebugSymbols.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 265ABF6210F42EE900531910 /* DebugSymbols.framework */; };
|
||||
26651A16133BF9CD005B64B7 /* Opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 26651A15133BF9CC005B64B7 /* Opcode.h */; };
|
||||
26651A18133BF9E0005B64B7 /* Opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26651A17133BF9DF005B64B7 /* Opcode.cpp */; };
|
||||
2668020E115FD12C008E1FE4 /* lldb-defines.h in Headers */ = {isa = PBXBuildFile; fileRef = 26BC7C2510F1B3BC00F91463 /* lldb-defines.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
2668020F115FD12C008E1FE4 /* lldb-enumerations.h in Headers */ = {isa = PBXBuildFile; fileRef = 26BC7C2610F1B3BC00F91463 /* lldb-enumerations.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
26680214115FD12C008E1FE4 /* lldb-types.h in Headers */ = {isa = PBXBuildFile; fileRef = 26BC7C2910F1B3BC00F91463 /* lldb-types.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
|
@ -631,6 +633,8 @@
|
|||
2660D9F711922A1300958FBD /* StringExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StringExtractor.h; path = source/Utility/StringExtractor.h; sourceTree = "<group>"; };
|
||||
2660D9FE11922A7F00958FBD /* ThreadPlanStepUntil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadPlanStepUntil.cpp; path = source/Target/ThreadPlanStepUntil.cpp; sourceTree = "<group>"; };
|
||||
26651A14133BEC76005B64B7 /* lldb-public.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "lldb-public.h"; path = "include/lldb/lldb-public.h"; sourceTree = "<group>"; };
|
||||
26651A15133BF9CC005B64B7 /* Opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Opcode.h; path = include/lldb/Core/Opcode.h; sourceTree = "<group>"; };
|
||||
26651A17133BF9DF005B64B7 /* Opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Opcode.cpp; path = source/Core/Opcode.cpp; sourceTree = "<group>"; };
|
||||
26680207115FD0ED008E1FE4 /* LLDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LLDB.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
266960591199F4230075C61A /* build-llvm.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = "build-llvm.pl"; sourceTree = "<group>"; };
|
||||
2669605A1199F4230075C61A /* build-swig-wrapper-classes.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "build-swig-wrapper-classes.sh"; sourceTree = "<group>"; };
|
||||
|
@ -1832,6 +1836,8 @@
|
|||
26BC7E8210F1B85900F91463 /* ModuleChild.cpp */,
|
||||
26BC7D6C10F1B77400F91463 /* ModuleList.h */,
|
||||
26BC7E8310F1B85900F91463 /* ModuleList.cpp */,
|
||||
26651A15133BF9CC005B64B7 /* Opcode.h */,
|
||||
26651A17133BF9DF005B64B7 /* Opcode.cpp */,
|
||||
26BC7D7010F1B77400F91463 /* PluginInterface.h */,
|
||||
26BC7D7110F1B77400F91463 /* PluginManager.h */,
|
||||
26BC7E8A10F1B85900F91463 /* PluginManager.cpp */,
|
||||
|
@ -2521,6 +2527,7 @@
|
|||
26744EF41338317700EF765A /* GDBRemoteCommunicationServer.h in Headers */,
|
||||
264A97C0133918BC0017F0BE /* PlatformRemoteGDBServer.h in Headers */,
|
||||
2697A54E133A6305004E4240 /* PlatformDarwin.h in Headers */,
|
||||
26651A16133BF9CD005B64B7 /* Opcode.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -3080,6 +3087,7 @@
|
|||
26744EF31338317700EF765A /* GDBRemoteCommunicationServer.cpp in Sources */,
|
||||
264A97BF133918BC0017F0BE /* PlatformRemoteGDBServer.cpp in Sources */,
|
||||
2697A54D133A6305004E4240 /* PlatformDarwin.cpp in Sources */,
|
||||
26651A18133BF9E0005B64B7 /* Opcode.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
@ -468,6 +468,14 @@ Disassembler::Disassemble
|
|||
|
||||
Instruction::Instruction(const Address &addr) :
|
||||
m_addr (addr)
|
||||
{
|
||||
::memset (&m_opcode, 0, sizeof (m_opcode));
|
||||
}
|
||||
|
||||
|
||||
Instruction::Instruction(const Address &addr, const Opcode &opcode) :
|
||||
m_addr (addr),
|
||||
m_opcode (opcode)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -59,9 +59,9 @@ EmulateInstruction::EmulateInstruction
|
|||
m_write_mem_callback (write_mem_callback),
|
||||
m_read_reg_callback (read_reg_callback),
|
||||
m_write_reg_callback (write_reg_callback),
|
||||
m_opcode (),
|
||||
m_opcode_pc (LLDB_INVALID_ADDRESS)
|
||||
{
|
||||
::memset (&m_opcode, 0, sizeof (m_opcode));
|
||||
}
|
||||
|
||||
uint64_t
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
//===-- Baton.cpp -----------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "lldb/Core/Opcode.h"
|
||||
|
||||
// C Includes
|
||||
// C++ Includes
|
||||
// Other libraries and framework includes
|
||||
// Project includes
|
||||
|
||||
using namespace lldb;
|
||||
using namespace lldb_private;
|
|
@ -74,7 +74,7 @@ static int IPRegisterReader(uint64_t *value, unsigned regID, void* arg)
|
|||
return -1;
|
||||
}
|
||||
|
||||
DisassemblerLLVM::InstructionLLVM::InstructionLLVM (EDDisassemblerRef disassembler, const Address &addr) :
|
||||
DisassemblerLLVM::InstructionLLVM::InstructionLLVM (const Address &addr, EDDisassemblerRef disassembler) :
|
||||
Instruction (addr),
|
||||
m_disassembler (disassembler)
|
||||
{
|
||||
|
@ -334,10 +334,41 @@ DisassemblerLLVM::InstructionLLVM::GetByteSize() const
|
|||
}
|
||||
|
||||
size_t
|
||||
DisassemblerLLVM::InstructionLLVM::Extract(const DataExtractor &data, uint32_t data_offset)
|
||||
DisassemblerLLVM::InstructionLLVM::Extract (const Disassembler &disassembler,
|
||||
const lldb_private::DataExtractor &data,
|
||||
uint32_t data_offset)
|
||||
{
|
||||
if (EDCreateInsts(&m_inst, 1, m_disassembler, DataExtractorByteReader, data_offset, (void*)(&data)))
|
||||
return EDInstByteSize(m_inst);
|
||||
{
|
||||
const int byte_size = EDInstByteSize(m_inst);
|
||||
uint32_t offset = data_offset;
|
||||
// Make a copy of the opcode in m_opcode
|
||||
switch (disassembler.GetArchitecture().GetMachine())
|
||||
{
|
||||
case llvm::Triple::x86:
|
||||
case llvm::Triple::x86_64:
|
||||
m_opcode.SetOpcodeBytes (data.PeekData (data_offset, byte_size), byte_size);
|
||||
break;
|
||||
|
||||
case llvm::Triple::arm:
|
||||
assert (byte_size == 4);
|
||||
m_opcode.SetOpcode32 (data.GetU32 (&offset));
|
||||
break;
|
||||
|
||||
case llvm::Triple::thumb:
|
||||
assert ((byte_size == 2) || (byte_size == 4));
|
||||
if (byte_size == 2)
|
||||
m_opcode.SetOpcode16 (data.GetU16 (&offset));
|
||||
else
|
||||
m_opcode.SetOpcode32 (data.GetU32 (&offset));
|
||||
break;
|
||||
|
||||
default:
|
||||
assert (!"This shouldn't happen since we control the architecture we allow DisassemblerLLVM to be created for");
|
||||
break;
|
||||
}
|
||||
return byte_size;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
@ -430,10 +461,10 @@ DisassemblerLLVM::DecodeInstructions
|
|||
if (inst_addr.GetAddressClass () == eAddressClassCodeAlternateISA)
|
||||
use_thumb = true;
|
||||
}
|
||||
InstructionSP inst_sp (new InstructionLLVM (use_thumb ? m_disassembler_thumb : m_disassembler,
|
||||
inst_addr));
|
||||
InstructionSP inst_sp (new InstructionLLVM (inst_addr,
|
||||
use_thumb ? m_disassembler_thumb : m_disassembler));
|
||||
|
||||
size_t inst_byte_size = inst_sp->Extract (data, data_offset);
|
||||
size_t inst_byte_size = inst_sp->Extract (*this, data, data_offset);
|
||||
|
||||
if (inst_byte_size == 0)
|
||||
break;
|
||||
|
|
|
@ -22,7 +22,8 @@ public:
|
|||
class InstructionLLVM : public lldb_private::Instruction
|
||||
{
|
||||
public:
|
||||
InstructionLLVM(EDDisassemblerRef disassembler, const lldb_private::Address &addr);
|
||||
InstructionLLVM (const lldb_private::Address &addr,
|
||||
EDDisassemblerRef disassembler);
|
||||
|
||||
virtual
|
||||
~InstructionLLVM();
|
||||
|
@ -42,7 +43,8 @@ public:
|
|||
GetByteSize() const;
|
||||
|
||||
size_t
|
||||
Extract (const lldb_private::DataExtractor &data,
|
||||
Extract (const Disassembler &disassembler,
|
||||
const lldb_private::DataExtractor &data,
|
||||
uint32_t data_offset);
|
||||
|
||||
protected:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -125,10 +125,10 @@ public:
|
|||
ArchVersion();
|
||||
|
||||
bool
|
||||
ConditionPassed ();
|
||||
ConditionPassed (const uint32_t opcode);
|
||||
|
||||
uint32_t
|
||||
CurrentCond ();
|
||||
CurrentCond (const uint32_t opcode);
|
||||
|
||||
// InITBlock - Returns true if we're in Thumb mode and inside an IT Block.
|
||||
bool InITBlock();
|
||||
|
@ -301,7 +301,7 @@ protected:
|
|||
uint32_t variants;
|
||||
EmulateInstructionARM::ARMEncoding encoding;
|
||||
ARMInstrSize size;
|
||||
bool (EmulateInstructionARM::*callback) (EmulateInstructionARM::ARMEncoding encoding);
|
||||
bool (EmulateInstructionARM::*callback) (const uint32_t opcode, const EmulateInstructionARM::ARMEncoding encoding);
|
||||
const char *name;
|
||||
} ARMOpcode;
|
||||
|
||||
|
@ -314,423 +314,423 @@ protected:
|
|||
|
||||
// A8.6.123 PUSH
|
||||
bool
|
||||
EmulatePUSH (ARMEncoding encoding);
|
||||
EmulatePUSH (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.122 POP
|
||||
bool
|
||||
EmulatePOP (ARMEncoding encoding);
|
||||
EmulatePOP (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.8 ADD (SP plus immediate)
|
||||
bool
|
||||
EmulateADDRdSPImm (ARMEncoding encoding);
|
||||
EmulateADDRdSPImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.97 MOV (register) -- Rd == r7|ip and Rm == sp
|
||||
bool
|
||||
EmulateMOVRdSP (ARMEncoding encoding);
|
||||
EmulateMOVRdSP (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.97 MOV (register) -- move from r8-r15 to r0-r7
|
||||
bool
|
||||
EmulateMOVLowHigh (ARMEncoding encoding);
|
||||
EmulateMOVLowHigh (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.59 LDR (literal)
|
||||
bool
|
||||
EmulateLDRRtPCRelative (ARMEncoding encoding);
|
||||
EmulateLDRRtPCRelative (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.8 ADD (SP plus immediate)
|
||||
bool
|
||||
EmulateADDSPImm (ARMEncoding encoding);
|
||||
EmulateADDSPImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.9 ADD (SP plus register)
|
||||
bool
|
||||
EmulateADDSPRm (ARMEncoding encoding);
|
||||
EmulateADDSPRm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.23 BL, BLX (immediate)
|
||||
bool
|
||||
EmulateBLXImmediate (ARMEncoding encoding);
|
||||
EmulateBLXImmediate (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.24 BLX (register)
|
||||
bool
|
||||
EmulateBLXRm (ARMEncoding encoding);
|
||||
EmulateBLXRm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.25 BX
|
||||
bool
|
||||
EmulateBXRm (ARMEncoding encoding);
|
||||
EmulateBXRm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.26 BXJ
|
||||
bool
|
||||
EmulateBXJRm (ARMEncoding encoding);
|
||||
EmulateBXJRm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.212 SUB (immediate, ARM) -- Rd == r7 and Rm == ip
|
||||
bool
|
||||
EmulateSUBR7IPImm (ARMEncoding encoding);
|
||||
EmulateSUBR7IPImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.215 SUB (SP minus immediate) -- Rd == ip
|
||||
bool
|
||||
EmulateSUBIPSPImm (ARMEncoding encoding);
|
||||
EmulateSUBIPSPImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.215 SUB (SP minus immediate)
|
||||
bool
|
||||
EmulateSUBSPImm (ARMEncoding encoding);
|
||||
EmulateSUBSPImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.194 STR (immediate, ARM) -- Rn == sp
|
||||
bool
|
||||
EmulateSTRRtSP (ARMEncoding encoding);
|
||||
EmulateSTRRtSP (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.355 VPUSH
|
||||
bool
|
||||
EmulateVPUSH (ARMEncoding encoding);
|
||||
EmulateVPUSH (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.354 VPOP
|
||||
bool
|
||||
EmulateVPOP (ARMEncoding encoding);
|
||||
EmulateVPOP (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.218 SVC (previously SWI)
|
||||
bool
|
||||
EmulateSVC (ARMEncoding encoding);
|
||||
EmulateSVC (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.50 IT
|
||||
bool
|
||||
EmulateIT (ARMEncoding encoding);
|
||||
EmulateIT (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.16 B
|
||||
bool
|
||||
EmulateB (ARMEncoding encoding);
|
||||
EmulateB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.27 CBNZ, CBZ
|
||||
bool
|
||||
EmulateCB (ARMEncoding encoding);
|
||||
EmulateCB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.226 TBB, TBH
|
||||
bool
|
||||
EmulateTB (ARMEncoding encoding);
|
||||
EmulateTB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.4 ADD (immediate, Thumb)
|
||||
bool
|
||||
EmulateADDImmThumb (ARMEncoding encoding);
|
||||
EmulateADDImmThumb (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.5 ADD (immediate, ARM)
|
||||
bool
|
||||
EmulateADDImmARM (ARMEncoding encoding);
|
||||
EmulateADDImmARM (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.6 ADD (register)
|
||||
bool
|
||||
EmulateADDReg (ARMEncoding encoding);
|
||||
EmulateADDReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.97 MOV (register)
|
||||
bool
|
||||
EmulateMOVRdRm (ARMEncoding encoding);
|
||||
EmulateMOVRdRm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.96 MOV (immediate)
|
||||
bool
|
||||
EmulateMOVRdImm (ARMEncoding encoding);
|
||||
EmulateMOVRdImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.35 CMP (immediate)
|
||||
bool
|
||||
EmulateCMPImm (ARMEncoding encoding);
|
||||
EmulateCMPImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.36 CMP (register)
|
||||
bool
|
||||
EmulateCMPReg (ARMEncoding encoding);
|
||||
EmulateCMPReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.14 ASR (immediate)
|
||||
bool
|
||||
EmulateASRImm (ARMEncoding encoding);
|
||||
EmulateASRImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.15 ASR (register)
|
||||
bool
|
||||
EmulateASRReg (ARMEncoding encoding);
|
||||
EmulateASRReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.88 LSL (immediate)
|
||||
bool
|
||||
EmulateLSLImm (ARMEncoding encoding);
|
||||
EmulateLSLImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.89 LSL (register)
|
||||
bool
|
||||
EmulateLSLReg (ARMEncoding encoding);
|
||||
EmulateLSLReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.90 LSR (immediate)
|
||||
bool
|
||||
EmulateLSRImm (ARMEncoding encoding);
|
||||
EmulateLSRImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.91 LSR (register)
|
||||
bool
|
||||
EmulateLSRReg (ARMEncoding encoding);
|
||||
EmulateLSRReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.139 ROR (immediate)
|
||||
bool
|
||||
EmulateRORImm (ARMEncoding encoding);
|
||||
EmulateRORImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.140 ROR (register)
|
||||
bool
|
||||
EmulateRORReg (ARMEncoding encoding);
|
||||
EmulateRORReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.141 RRX
|
||||
bool
|
||||
EmulateRRX (ARMEncoding encoding);
|
||||
EmulateRRX (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// Helper method for ASR, LSL, LSR, ROR (immediate), and RRX
|
||||
bool
|
||||
EmulateShiftImm (ARMEncoding encoding, ARM_ShifterType shift_type);
|
||||
EmulateShiftImm (const uint32_t opcode, const ARMEncoding encoding, ARM_ShifterType shift_type);
|
||||
|
||||
// Helper method for ASR, LSL, LSR, and ROR (register)
|
||||
bool
|
||||
EmulateShiftReg (ARMEncoding encoding, ARM_ShifterType shift_type);
|
||||
EmulateShiftReg (const uint32_t opcode, const ARMEncoding encoding, ARM_ShifterType shift_type);
|
||||
|
||||
// A8.6.53 LDM/LDMIA/LDMFD
|
||||
bool
|
||||
EmulateLDM (ARMEncoding encoding);
|
||||
EmulateLDM (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.54 LDMDA/LDMFA
|
||||
bool
|
||||
EmulateLDMDA (ARMEncoding encoding);
|
||||
EmulateLDMDA (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.55 LDMDB/LDMEA
|
||||
bool
|
||||
EmulateLDMDB (ARMEncoding encoding);
|
||||
EmulateLDMDB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.56 LDMIB/LDMED
|
||||
bool
|
||||
EmulateLDMIB (ARMEncoding encoding);
|
||||
EmulateLDMIB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.57 LDR (immediate, Thumb) -- Encoding T1
|
||||
bool
|
||||
EmulateLDRRtRnImm (ARMEncoding encoding);
|
||||
EmulateLDRRtRnImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.188 STM/STMIA/STMEA
|
||||
bool
|
||||
EmulateSTM (ARMEncoding encoding);
|
||||
EmulateSTM (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.189 STMDA/STMED
|
||||
bool
|
||||
EmulateSTMDA (ARMEncoding encoding);
|
||||
EmulateSTMDA (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.190 STMDB/STMFD
|
||||
bool
|
||||
EmulateSTMDB (ARMEncoding encoding);
|
||||
EmulateSTMDB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.191 STMIB/STMFA
|
||||
bool
|
||||
EmulateSTMIB (ARMEncoding encoding);
|
||||
EmulateSTMIB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.192 STR (immediate, Thumb)
|
||||
bool
|
||||
EmulateSTRThumb(ARMEncoding encoding);
|
||||
EmulateSTRThumb(const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.194 STR (register)
|
||||
bool
|
||||
EmulateSTRRegister (ARMEncoding encoding);
|
||||
EmulateSTRRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.195 STRB (immediate, Thumb)
|
||||
bool
|
||||
EmulateSTRBThumb (ARMEncoding encoding);
|
||||
EmulateSTRBThumb (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.207 STRH (register)
|
||||
bool
|
||||
EmulateSTRHRegister (ARMEncoding encoding);
|
||||
EmulateSTRHRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.1 ADC (immediate)
|
||||
bool
|
||||
EmulateADCImm (ARMEncoding encoding);
|
||||
EmulateADCImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.2 ADC (Register)
|
||||
bool
|
||||
EmulateADCReg (ARMEncoding encoding);
|
||||
EmulateADCReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.10 ADR
|
||||
bool
|
||||
EmulateADR (ARMEncoding encoding);
|
||||
EmulateADR (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.11 AND (immediate)
|
||||
bool
|
||||
EmulateANDImm (ARMEncoding encoding);
|
||||
EmulateANDImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.12 AND (register)
|
||||
bool
|
||||
EmulateANDReg (ARMEncoding encoding);
|
||||
EmulateANDReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.19 BIC (immediate)
|
||||
bool
|
||||
EmulateBICImm (ARMEncoding encoding);
|
||||
EmulateBICImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.20 BIC (register)
|
||||
bool
|
||||
EmulateBICReg (ARMEncoding encoding);
|
||||
EmulateBICReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.26 BXJ
|
||||
bool
|
||||
EmulateBXJ (ARMEncoding encoding);
|
||||
EmulateBXJ (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.32 CMN (immediate)
|
||||
bool
|
||||
EmulateCMNImm (ARMEncoding encoding);
|
||||
EmulateCMNImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.33 CMN (register)
|
||||
bool
|
||||
EmulateCMNReg (ARMEncoding encoding);
|
||||
EmulateCMNReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.44 EOR (immediate)
|
||||
bool
|
||||
EmulateEORImm (ARMEncoding encoding);
|
||||
EmulateEORImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.45 EOR (register)
|
||||
bool
|
||||
EmulateEORReg (ARMEncoding encoding);
|
||||
EmulateEORReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.58 LDR (immediate, ARM) - Encoding A1
|
||||
bool
|
||||
EmulateLDRImmediateARM (ARMEncoding encoding);
|
||||
EmulateLDRImmediateARM (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.60 LDR (register) - Encoding T1, T2, A1
|
||||
bool
|
||||
EmulateLDRRegister (ARMEncoding encoding);
|
||||
EmulateLDRRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.61 LDRB (immediate, Thumb) - Encoding T1, T2
|
||||
bool
|
||||
EmulateLDRBImmediate (ARMEncoding encoding);
|
||||
EmulateLDRBImmediate (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.63 LDRB (literal) - Encoding T1
|
||||
bool
|
||||
EmulateLDRBLiteral (ARMEncoding encoding);
|
||||
EmulateLDRBLiteral (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.64 LDRB (register) - Encoding T1
|
||||
bool
|
||||
EmulateLDRBRegister (ARMEncoding encoding);
|
||||
EmulateLDRBRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.73 LDRH (immediate, Thumb) - Encoding T1, T2
|
||||
bool
|
||||
EmulateLDRHImmediate (ARMEncoding encoding);
|
||||
EmulateLDRHImmediate (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.75 LDRH (literal) - Encoding T1
|
||||
bool
|
||||
EmulateLDRHLiteral (ARMEncoding encoding);
|
||||
EmulateLDRHLiteral (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.76 LDRH (register) - Encoding T1, T2
|
||||
bool
|
||||
EmulateLDRHRegister (ARMEncoding encoding);
|
||||
EmulateLDRHRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.78 LDRSB (immediate) - Encoding T1
|
||||
bool
|
||||
EmulateLDRSBImmediate (ARMEncoding encoding);
|
||||
EmulateLDRSBImmediate (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.79 LDRSB (literal) - Encoding T1
|
||||
bool
|
||||
EmulateLDRSBLiteral (ARMEncoding encoding);
|
||||
EmulateLDRSBLiteral (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.80 LDRSB (register) - Encoding T1, T2
|
||||
bool
|
||||
EmulateLDRSBRegister (ARMEncoding encoding);
|
||||
EmulateLDRSBRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.82 LDRSH (immediate) - Encoding T1
|
||||
bool
|
||||
EmulateLDRSHImmediate (ARMEncoding encoding);
|
||||
EmulateLDRSHImmediate (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.83 LDRSH (literal) - Encoding T1
|
||||
bool
|
||||
EmulateLDRSHLiteral (ARMEncoding encoding);
|
||||
EmulateLDRSHLiteral (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.84 LDRSH (register) - Encoding T1, T2
|
||||
bool
|
||||
EmulateLDRSHRegister (ARMEncoding encoding);
|
||||
EmulateLDRSHRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.105 MUL
|
||||
bool
|
||||
EmulateMUL (ARMEncoding encoding);
|
||||
EmulateMUL (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.106 MVN (immediate)
|
||||
bool
|
||||
EmulateMVNImm (ARMEncoding encoding);
|
||||
EmulateMVNImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.107 MVN (register)
|
||||
bool
|
||||
EmulateMVNReg (ARMEncoding encoding);
|
||||
EmulateMVNReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.113 ORR (immediate)
|
||||
bool
|
||||
EmulateORRImm (ARMEncoding encoding);
|
||||
EmulateORRImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.114 ORR (register)
|
||||
bool
|
||||
EmulateORRReg (ARMEncoding encoding);
|
||||
EmulateORRReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.117 PLD (immediate, literal) - Encoding T1, T2, T3, A1
|
||||
bool
|
||||
EmulatePLDImmediate (ARMEncoding encoding);
|
||||
EmulatePLDImmediate (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.119 PLI (immediate,literal) - Encoding T3, A1
|
||||
bool
|
||||
EmulatePLIImmediate (ARMEncoding encoding);
|
||||
EmulatePLIImmediate (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.120 PLI (register) - Encoding T1, A1
|
||||
bool
|
||||
EmulatePLIRegister (ARMEncoding encoding);
|
||||
EmulatePLIRegister (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.141 RSB (immediate)
|
||||
bool
|
||||
EmulateRSBImm (ARMEncoding encoding);
|
||||
EmulateRSBImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.142 RSB (register)
|
||||
bool
|
||||
EmulateRSBReg (ARMEncoding encoding);
|
||||
EmulateRSBReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.144 RSC (immediate)
|
||||
bool
|
||||
EmulateRSCImm (ARMEncoding encoding);
|
||||
EmulateRSCImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.145 RSC (register)
|
||||
bool
|
||||
EmulateRSCReg (ARMEncoding encoding);
|
||||
EmulateRSCReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.150 SBC (immediate)
|
||||
bool
|
||||
EmulateSBCImm (ARMEncoding encoding);
|
||||
EmulateSBCImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.151 SBC (register)
|
||||
bool
|
||||
EmulateSBCReg (ARMEncoding encoding);
|
||||
EmulateSBCReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.211 SUB (immediate, Thumb)
|
||||
bool
|
||||
EmulateSUBImmThumb (ARMEncoding encoding);
|
||||
EmulateSUBImmThumb (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.212 SUB (immediate, ARM)
|
||||
bool
|
||||
EmulateSUBImmARM (ARMEncoding encoding);
|
||||
EmulateSUBImmARM (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.222 SXTB - Encoding T1
|
||||
bool
|
||||
EmulateSXTB (ARMEncoding encoding);
|
||||
EmulateSXTB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.224 SXTH - EncodingT1
|
||||
bool
|
||||
EmulateSXTH (ARMEncoding encoding);
|
||||
EmulateSXTH (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.227 TEQ (immediate) - Encoding A1
|
||||
bool
|
||||
EmulateTEQImm (ARMEncoding encoding);
|
||||
EmulateTEQImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.228 TEQ (register) - Encoding A1
|
||||
bool
|
||||
EmulateTEQReg (ARMEncoding encoding);
|
||||
EmulateTEQReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.230 TST (immediate) - Encoding A1
|
||||
bool
|
||||
EmulateTSTImm (ARMEncoding encoding);
|
||||
EmulateTSTImm (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.231 TST (register) - Encoding T1, A1
|
||||
bool
|
||||
EmulateTSTReg (ARMEncoding encoding);
|
||||
EmulateTSTReg (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.262 UXTB - Encoding T1
|
||||
bool
|
||||
EmulateUXTB (ARMEncoding encoding);
|
||||
EmulateUXTB (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// A8.6.264 UXTH - Encoding T1
|
||||
bool
|
||||
EmulateUXTH (ARMEncoding encoding);
|
||||
EmulateUXTH (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
// B6.1.8 RFE
|
||||
bool
|
||||
EmulateRFE (ARMEncoding encoding);
|
||||
EmulateRFE (const uint32_t opcode, const ARMEncoding encoding);
|
||||
|
||||
uint32_t m_arm_isa;
|
||||
Mode m_opcode_mode;
|
||||
|
|
Loading…
Reference in New Issue