| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
to assemble back.
Note: The current code in DecodeMSRMask() rejects the unpredictable A/R MSR mask '0000' with Fail. The code in the patch follows this style and rejects unpredictable M-class MSR masks also with Fail (instead of SoftFail). If SoftFail is preferred in this case then additional changes to ARMInstPrinter (to print non-symbolic masks) and ARMAsmParser (to parse non-symbolic masks) will be needed.
Patch by Petr Pavlu!
llvm-svn: 214505
|
|
|
|
|
|
|
| |
definition below all of the header #include lines, lib/Target/...
edition.
llvm-svn: 206842
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch re-introduces the MCContext member that was removed from
MCDisassembler in r206063, and requires that an MCContext be passed in at
MCDisassembler construction time. (Previously the MCContext member had been
initialized in an ad-hoc fashion after construction). The MCCContext member
can be used by MCDisassembler sub-classes to construct constant or
target-specific MCExprs.
This patch updates disassemblers for in-tree targets, and provides the
MCRegisterInfo instance that some disassemblers were using through the
MCContext (previously those backends were constructing their own
MCRegisterInfo instances).
llvm-svn: 206241
|
|
|
|
|
|
| |
ThumbLE/ThumbBE
llvm-svn: 205317
|
|
|
|
|
|
| |
Reviewed at http://llvm-reviews.chandlerc.com/D3095
llvm-svn: 205007
|
|
|
|
|
|
| |
class.
llvm-svn: 203439
|
|
|
|
|
|
| |
ARMv8 (ARM encodings)
llvm-svn: 194261
|
|
|
|
| |
llvm-svn: 193705
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The set of circumstances where the writeback register is allowed to be in the
list of registers is rather baroque, but I think this implements them all on
the assembly parsing side.
For disassembly, we still warn about an ARM-mode LDM even if the architecture
revision is < v7 (the required architecture information isn't available). It's
a silly instruction anyway, so hopefully no-one will mind.
rdar://problem/15223374
llvm-svn: 193185
|
|
|
|
|
|
| |
Pointed out by Joerg.
llvm-svn: 191749
|
|
|
|
| |
llvm-svn: 190996
|
|
|
|
|
|
|
|
| |
definition of t2PLDWpci,
as pldw does not have a literal variant (i.e. pc relative version)
llvm-svn: 187804
|
|
|
|
|
|
|
| |
This adds a new class for non-predicable NEON instructions and a
new DecoderNamespace for v8 NEON instructions.
llvm-svn: 186504
|
|
|
|
| |
llvm-svn: 185651
|
|
|
|
|
|
|
|
|
| |
instructions.
This adds a new decoder table/namespace 'VFPV8', as these instructions have their
top 4 bits as 0b1111, while other Thumb instructions have 0b1110.
llvm-svn: 185642
|
|
|
|
|
|
|
| |
When encoded to thumb, VFP instruction and VMOV/VDUP between scalar and
core registers, must have their predicate bit to 0b1110.
llvm-svn: 184707
|
|
|
|
| |
llvm-svn: 184706
|
|
|
|
|
|
| |
mask == 0 -> UNPRED
llvm-svn: 184702
|
|
|
|
| |
llvm-svn: 184701
|
|
|
|
|
|
|
|
| |
This fixes two previous issues:
- Negative offsets were not correctly disassembled
- The decoded opcodes were not the right one
llvm-svn: 184180
|
|
|
|
| |
llvm-svn: 184179
|
|
|
|
| |
llvm-svn: 183914
|
|
|
|
| |
llvm-svn: 183731
|
|
|
|
|
|
| |
The decoded MCInst wasn't reencoded as the same instruction
llvm-svn: 183729
|
|
|
|
|
|
| |
ISB should only accepts full system sync, other options are reserved
llvm-svn: 183656
|
|
|
|
|
|
| |
Enforce Table A7-15 (op=1, cmode=0b111) -> UNDEF
llvm-svn: 183612
|
|
|
|
| |
llvm-svn: 183611
|
|
|
|
|
|
|
|
|
| |
Handle the case when the disassembler table can't tell
the difference between some encodings of QADD and CPS.
Add some necessary safe guards in CPS decoding as well.
llvm-svn: 183610
|
|
|
|
|
|
| |
UNPRED was reported instead of UNDEF
llvm-svn: 183608
|
|
|
|
|
|
|
|
|
| |
These instructions are deprecated oddities, but we still need to be able to
disassemble (and reassemble) them if and when they're encountered.
Patch by Amaury de la Vieuville.
llvm-svn: 183011
|
|
|
|
| |
llvm-svn: 182680
|
|
|
|
|
|
|
|
|
|
| |
There was exactly one caller using this API right, the others were relying on
specific behavior of the default implementation. Since it's too hard to use it
right just remove it and standardize on the default behavior.
Defines away PR16132.
llvm-svn: 182636
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a basic first step towards symbolization of disassembled
instructions. This used to be done using externally provided (C API)
callbacks. This patch introduces:
- the MCSymbolizer class, that mimics the same functions that were used
in the X86 and ARM disassemblers to symbolize immediate operands and
to annotate loads based off PC (for things like c string literals).
- the MCExternalSymbolizer class, which implements the old C API.
- the MCRelocationInfo class, which provides a way for targets to
translate relocations (either object::RelocationRef, or disassembler
C API VariantKinds) to MCExprs.
- the MCObjectSymbolizer class, which does symbolization using what it
finds in an object::ObjectFile. This makes simple symbolization (with
no fancy relocation stuff) work for all object formats!
- x86-64 Mach-O and ELF MCRelocationInfos.
- A basic ARM Mach-O MCRelocationInfo, that provides just enough to
support the C API VariantKinds.
Most of what works in otool (the only user of the old symbolization API
that I know of) for x86-64 symbolic disassembly (-tvV) works, namely:
- symbol references: call _foo; jmp 15 <_foo+50>
- relocations: call _foo-_bar; call _foo-4
- __cf?string: leaq 193(%rip), %rax ## literal pool for "hello"
Stub support is the main missing part (because libObject doesn't know,
among other things, about mach-o indirect symbols).
As for the MCSymbolizer API, instead of relying on the disassemblers
to call the tryAdding* methods, maybe this could be done automagically
using InstrInfo? For instance, even though PC-relative LEAs are used
to get the address of string literals in a typical Mach-O file, a MOV
would be used in an ELF file. And right now, the explicit symbolization
only recognizes PC-relative LEAs. InstrInfo should have already have
most of what is needed to know what to symbolize, so this can
definitely be improved.
I'd also like to remove object::RelocationRef::getValueString (it seems
only used by relocation printing in objdump), as simply printing the
created MCExpr is definitely enough (and cleaner than string concats).
llvm-svn: 182625
|
|
|
|
|
|
| |
implemented. I have added these using wrapper methods around the original custom decoder (incidentally - this is a huge poorly written method that should be cleaned up. I have left it as is since the changes would be much to hard to review).
llvm-svn: 182281
|
|
|
|
|
|
| |
registers are half as many, the ARM reference manual mandates the least significant bit to be zeroed out. Failure to do so should result in an undefined instruction. With this change test/MC/Disassembler/ARM/invalid-VQADD-arm.txt is passing (removed XFAIL).
llvm-svn: 182279
|
|
|
|
| |
llvm-svn: 182226
|
|
|
|
|
|
| |
instructions when they are used to write to the APSR. In this case, the destination operand should be APSR_nzcv, and the encoding of the target should be 0b1111 (same as for PC). In pre-UAL syntax, this form used the PC register as a textual target. This is still allowed for backward compatibility.
llvm-svn: 181705
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"hint" space for Thumb actually overlaps the encoding space of the CPS
instruction. In actuality, hints can be defined as CPS instructions where imod
and M bits are all nil.
Handle decoding of permitted nop-compatible hints (i.e. nop, yield, wfi, wfe,
sev) in DecodeT2CPSInstruction.
This commit adds a proper diagnostic message for Imm0_4 and updates all tests.
Patch by Mihail Popa <Mihail.Popa@arm.com>.
llvm-svn: 180617
|
|
|
|
|
|
| |
Patch from Mihail Popa
llvm-svn: 179854
|
|
|
|
| |
llvm-svn: 179847
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The reference manual defines only 5 permitted values for the immediate field of the "hint" instruction:
1. nop (imm == 0)
2. yield (imm == 1)
3. wfe (imm == 2)
4. wfi (imm == 3)
5. sev (imm == 4)
Therefore, restrict the permitted values for the "hint" instruction to 0 through 4.
Patch by Mihail Popa <Mihail.Popa@arm.com>
llvm-svn: 179707
|
|
|
|
|
|
|
|
| |
the upper bit is set.
They should always be zero-extended, not sign extended. Added test case.
llvm-svn: 178275
|
|
|
|
|
|
|
|
|
|
| |
If PC or SP is the destination, the disassembler erroneously failed with the
invalid encoding, despite the manual saying that both are fine.
This patch addresses failure to decode encoding T4 of LDR (A8.8.62) which is a
postindexed load, where the offset 0xc is applied to SP after the load occurs.
llvm-svn: 178017
|
|
|
|
| |
llvm-svn: 170578
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sooooo many of these had incorrect or strange main module includes.
I have manually inspected all of these, and fixed the main module
include to be the nearest plausible thing I could find. If you own or
care about any of these source files, I encourage you to take some time
and check that these edits were sensible. I can't have broken anything
(I strictly added headers, and reordered them, never removed), but they
may not be the headers you'd really like to identify as containing the
API being implemented.
Many forward declarations and missing includes were added to a header
files to allow them to parse cleanly when included first. The main
module rule does in fact have its merits. =]
llvm-svn: 169131
|
|
|
|
|
|
| |
which would then cause an assert when printed. rdar://11437956
llvm-svn: 168960
|
|
|
|
|
|
|
| |
is 24 bits not 20 and the decoding needed to correctly handle converting the
J1 and J2 bits to their I1 and I2 values to reconstruct the displacement.
llvm-svn: 166982
|
|
|
|
|
|
|
| |
because the value is incorrectly being signed extended when passed to
SymbolLookUp().
llvm-svn: 166234
|
|
|
|
|
|
|
|
|
| |
This patch fixes load/store instructions to handle less common cases
like "asr #32", "rrx" properly throughout the MC layer.
Patch by Chris Lidbury.
llvm-svn: 164455
|
|
|
|
|
|
| |
Patch by Chris Lidbury.
llvm-svn: 163323
|