Caroline Tice
485b4d8352
Add new instruction context, eContextWriteRegisterRandomBits.
...
Add new utility function, WriteBits32Unknown
Modify the LDM* instruction emulation functions to call WriteBits32Unknown.
Add missing overview comments to the LDM* instruction emulation functions.
Add code to emulate LDMDA Arm instruction.
llvm-svn: 125377
2011-02-11 17:59:55 +00:00
Johnny Chen
c7af6fe3bd
Add an entry for CMP (immediate) (Encoding T1) to the g_thumb_opcodes table.
...
llvm-svn: 125333
2011-02-11 02:02:56 +00:00
Johnny Chen
37c48b02a4
Add a helper method AddWithCarry() to the EmulateInstructionARM class.
...
llvm-svn: 125329
2011-02-11 01:29:53 +00:00
Johnny Chen
c843a78efc
Namings are important. Renamed Bits32(const uint32_t val, uint32_t bit) to Bit32(val, bit) and
...
SetBits32(uint32_t &bits, uint32_t bit, uint32_t val) to SetBit32(bits, bit, val).
llvm-svn: 125312
2011-02-10 21:39:01 +00:00
Johnny Chen
101f6efb8a
Some refactorings to use the convenience function: Bits32(const uint32_t value, const uint32_t bit).
...
llvm-svn: 125303
2011-02-10 19:54:05 +00:00
Johnny Chen
992b48c4be
Add some comment markers.
...
llvm-svn: 125302
2011-02-10 19:40:42 +00:00
Johnny Chen
0cfda5bbb5
Add a generic EmulateMovRdRm() method and modify/add entries to the g_thumb_opcodes
...
table. Also add some more defines and convenience functions.
llvm-svn: 125300
2011-02-10 19:29:03 +00:00
Johnny Chen
77224a5422
Rearrange the order of g_thumb_opcodes entries.
...
llvm-svn: 125295
2011-02-10 18:13:23 +00:00
Johnny Chen
cc13e4c62e
Add EmulateLDRRtRnImm() for EncodingT1 of LDR (immediate, Thumb) to the g_thumb_opcodes table,
...
and a helper method UnalignedSupport().
llvm-svn: 125258
2011-02-10 01:52:38 +00:00
Johnny Chen
1cabebe7bc
Add a new member variable m_new_inst_cpsr to catch the to-be-updated state
...
of the CPSR during the course of executing an opcode, and modified SelectInstrSet()
to update this variable instead of the original m_inst_cpsr, which should be
the cached copy of the CPSR at the beginning of executing the opcode.
llvm-svn: 125244
2011-02-09 23:59:17 +00:00
Johnny Chen
edf55ae52a
Add EmulateAddRdnRm() for EncodingT2 of ADD(register) to the g_thumb_opcodes table,
...
and a helper method ALUWritePC(Context&, uint32_t).
llvm-svn: 125241
2011-02-09 23:43:29 +00:00
Johnny Chen
0ce4a83c44
Modified existing Emulate* methods to call LoadWritePC(context, data) where appropriate to
...
effect an interworking branch if the ArchVersion() is ARMv5T and above.
llvm-svn: 125227
2011-02-09 22:02:17 +00:00
Johnny Chen
8bba644bf4
Modified EmulatePop impl to use the helper method LoadWritePC(context, data) since if PC
...
is in the list of registers to be load and we're in ARMv5T and above, this is an interworking branch.
llvm-svn: 125212
2011-02-09 19:30:49 +00:00
Johnny Chen
cc707657f9
If the CPSR is changed due to switching between ARM and Thumb ISETSTATE,
...
we want to record it and issue a WriteRegister callback so the clients
can track the mode changes accordingly.
llvm-svn: 125209
2011-02-09 19:11:32 +00:00
Greg Clayton
000aeb89ae
Patch from Kirk Beitz to make things compile on MinGW minus the putenv part.
...
llvm-svn: 125199
2011-02-09 17:41:27 +00:00
Johnny Chen
7eaacc517b
Add some helper methods to the EmulateInstructionARM class as a first step in the
...
refactorings of EmulateInstructionARM.cpp file, which will be modified later to
take advantage of these helper methods.
llvm-svn: 125148
2011-02-09 01:00:31 +00:00
Caroline Tice
123b89b67f
Add code to emulate the LDMIB Arm instruction.
...
Modify code for LDM and LDMDB instructions to only
create one context and to reuse it, rather than
creating multiple contexts.
llvm-svn: 125139
2011-02-08 23:56:10 +00:00
Johnny Chen
108a363318
Fix typos.
...
llvm-svn: 125138
2011-02-08 23:49:37 +00:00
Johnny Chen
03feace9d0
Add EmulateCB() entry to the g_thumb_opcodes table to represent "Compare and Branch
...
on NonZero and Compare and Branch on Zero" operations.
llvm-svn: 125134
2011-02-08 23:21:57 +00:00
Caroline Tice
cdb58e1236
Add code to emulate LDMDB Arm instruction.
...
llvm-svn: 125133
2011-02-08 23:16:02 +00:00
Caroline Tice
7aa01cfd64
Add code to emulate the LDM ARM instruction.
...
llvm-svn: 125118
2011-02-08 22:24:38 +00:00
Johnny Chen
181376f29f
Add missing implementation for "BL, BLX (immediate)" Encoding T1 and an entry for "bl <label>"
...
into g_thumb_opcodes table.
llvm-svn: 125112
2011-02-08 20:36:34 +00:00
Johnny Chen
86e48b6940
Add missing implementation for "BL, BLX (immediate)" Encoding A1.
...
llvm-svn: 125103
2011-02-08 18:58:31 +00:00
Johnny Chen
a3990398a3
Add implementation for EmulateInstructionARM::EmulateB() and fixed two typos in g_thumb_opcodes
...
as pointed out By Caroline. Refactored a little bit by adding two new helper methods to the
EmulateInstructionARM class:
o BranchWritePC()
o BXWritePC()
llvm-svn: 125059
2011-02-08 00:06:35 +00:00
Johnny Chen
05a975d777
Add EmulateInstructionARM::EmulateB entries to the g_arm_opcodes and g_thumb_opcodes
...
tables. EmulateB() has empty impl. and needs to be filled in later.
llvm-svn: 125048
2011-02-07 20:11:47 +00:00
Greg Clayton
95e314260e
Header patch, virtual dtor patch and missed UUID patch from Kirk Beitz.
...
llvm-svn: 124931
2011-02-05 02:56:16 +00:00
Johnny Chen
56902044a7
Handle the thumb branch instructions which have their cond bits embedded in the instruction stream.
...
llvm-svn: 124925
2011-02-05 01:39:52 +00:00
Johnny Chen
6e2acff0be
Add EmulateInstructionARM::EmulateIT() to the g_thumb_opcodes table,
...
to represent the the 'If Then' instruction which makes up to four following
instructions (the IT block)conditional.
Hook up ITSession utility class as a member variable of EmulateInstructionARM.
llvm-svn: 124915
2011-02-05 00:46:10 +00:00
Johnny Chen
ea745e86c8
Add a utility class ITSession to maintain the ITState for the Thumb ISA.
...
llvm-svn: 124906
2011-02-04 23:02:47 +00:00
Johnny Chen
b52193787d
Add EmulateInstructionARM::EmulateSVC() to the g_arm_opcodes and g_thumb_opcodes tables,
...
to represent the supervisor call instruction (previosuly software interrupt).
llvm-svn: 124840
2011-02-04 00:40:18 +00:00
Johnny Chen
d07a57f222
Add EmulateBLXImmediate() and EmulateBLXRm() to the g_arm_opcodes and g_thumb_opcodes tables,
...
which represent "bl <label>", "blx <label>", and "blx <Rm>" instructions.
llvm-svn: 124710
2011-02-02 01:13:56 +00:00
Johnny Chen
2684ccccda
Remove the 'lldb_private::' namespace resolution operator.
...
llvm-svn: 124671
2011-02-01 18:51:48 +00:00
Johnny Chen
3d9011d6dd
Add EmulateVPOP() to the g_arm_opcodes and g_thumb_opcodes tables, which represents
...
an operation to load multiple extension registers from the stack.
llvm-svn: 124670
2011-02-01 18:35:28 +00:00
Greg Clayton
c46f94d490
Cleaned up the EmulateInstructionARM to have the evaluate instruction
...
callbacks use member functions.
llvm-svn: 124636
2011-02-01 00:49:32 +00:00
Greg Clayton
c1dfd93e1e
Made the EmulateInstruction class into a plug-in interface and moved the
...
source files around into the places they need to go.
llvm-svn: 124631
2011-02-01 00:04:43 +00:00