| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 118152
|
| |
|
|
|
|
|
| |
parts. Represent the operation mode as an optional operand instead.
rdar://8614429
llvm-svn: 118137
|
| |
|
|
| |
llvm-svn: 117571
|
| |
|
|
| |
llvm-svn: 116454
|
| |
|
|
|
|
|
| |
and handle the operand explicitly. Flesh out encoding information. Add an
explicit disassembler testcase for the instruction.
llvm-svn: 116432
|
| |
|
|
| |
llvm-svn: 116201
|
| |
|
|
| |
llvm-svn: 114949
|
| |
|
|
| |
llvm-svn: 114240
|
| |
|
|
|
|
| |
unnecessary dtor for MCOperand.
llvm-svn: 114064
|
| |
|
|
|
|
|
| |
moves. Previously, the immediate was printed as the encoded integer value,
which is incorrect.
llvm-svn: 114021
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"The register specified for a dregpair is the corresponding Q register, so to
get the pair, we need to look up the sub-regs based on the qreg. Create a
lookup function since we don't have access to TargetRegisterInfo here to
be able to use getSubReg(ARM::dsub_[01])."
Additionaly, fix the NEON VLD1* and VST1* instruction patterns not to use
the dregpair modifier for the 2xdreg versions. Explicitly specifying the two
registers as operands is more correct and more consistent with the other
instruction patterns. This enables further cleanup of special case code in the
disassembler as a nice side-effect.
llvm-svn: 113903
|
| |
|
|
|
|
| |
Cygwin-1.5, following up to r113255.
llvm-svn: 113345
|
| |
|
|
| |
llvm-svn: 113255
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
all the other LDM/STM instructions. This fixes asm printer crashes when
compiling with -O0. I've changed one of the NEON tests (vst3.ll) to run
with -O0 to check this in the future.
Prior to this change VLDM/VSTM used addressing mode #5, but not really.
The offset field was used to hold a count of the number of registers being
loaded or stored, and the AM5 opcode field was expanded to specify the IA
or DB mode, instead of the standard ADD/SUB specifier. Much of the backend
was not aware of these special cases. The crashes occured when rewriting
a frameindex caused the AM5 offset field to be changed so that it did not
have a valid submode. I don't know exactly what changed to expose this now.
Maybe we've never done much with -O0 and NEON. Regardless, there's no longer
any reason to keep a count of the VLDM/VSTM registers, so we can use
addressing mode #4 and clean things up in a lot of places.
llvm-svn: 112322
|
| |
|
|
| |
llvm-svn: 111260
|
| |
|
|
|
|
|
| |
printing "lsl #0". This fixes the remaining parts of pr7792. Make
corresponding changes for encoding/decoding these instructions.
llvm-svn: 111251
|
| |
|
|
|
|
| |
instruction opcode. This fixes part of PR7792.
llvm-svn: 111047
|
| |
|
|
|
|
| |
same lines as the change I made for ARM saturate instructions.
llvm-svn: 111029
|
| |
|
|
|
|
|
| |
the memory barrier variants (other than 'SY' full system domain read and write)
are treated as one instruction with option operand.
llvm-svn: 110951
|
| |
|
|
|
|
|
|
|
|
| |
entry for ARM STRBT is actually a super-instruction for A8.6.199 STRBT A1 & A2.
Recover by looking for ARM:USAT encoding pattern before delegating to the auto-
gened decoder.
Added a "usat" test case to arm-tests.txt.
llvm-svn: 110894
|
| |
|
|
|
|
| |
Added two test cases to arm-tests.txt.
llvm-svn: 110880
|
| |
|
|
|
|
| |
instruction opcode. This also fixes part of PR7792.
llvm-svn: 110875
|
| |
|
|
|
|
|
|
|
| |
memory and synchronization barrier dmb and dsb instructions.
- Change instruction names to something more sensible (matching name of actual
instructions).
- Added tests for memory barrier codegen.
llvm-svn: 110785
|
| |
|
|
|
|
|
|
|
| |
(I discovered 2 more copies of the ARM instruction format list, bringing the
total to 4!! Two of them were already out of sync. I haven't yet gotten into
the disassembler enough to know the best way to fix this, but something needs
to be done.) Add support for encoding these instructions.
llvm-svn: 110754
|
| |
|
|
| |
llvm-svn: 109946
|
| |
|
|
|
|
|
| |
reference registers past the end of the NEON register file, and report them
as invalid instead of asserting when trying to print them. PR7746.
llvm-svn: 109933
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
have 4 bits per register in the operand encoding), but have undefined
behavior when the operand value is 13 or 15 (SP and PC, respectively).
The trivial coalescer in linear scan sometimes will merge a copy from
SP into a subsequent instruction which uses the copy, and if that
instruction cannot legally reference SP, we get bad code such as:
mls r0,r9,r0,sp
instead of:
mov r2, sp
mls r0, r9, r0, r2
This patch adds a new register class for use by Thumb2 that excludes
the problematic registers (SP and PC) and is used instead of GPR
for those operands which cannot legally reference PC or SP. The
trivial coalescer explicitly requires that the register class
of the destination for the COPY instruction contain the source
register for the COPY to be considered for coalescing. This prevents
errant instructions like that above.
PR7499
llvm-svn: 109842
|
| |
|
|
|
|
| |
PR7745.
llvm-svn: 109788
|
| |
|
|
| |
llvm-svn: 108929
|
| |
|
|
|
|
|
| |
and a combine pattern to use it for setting a bit-field to a constant
value. More to come for non-constant stores.
llvm-svn: 108570
|
| |
|
|
| |
llvm-svn: 108130
|
| |
|
|
| |
llvm-svn: 106927
|
| |
|
|
|
|
| |
"N..." instead of "NEON..." for consistency with the other NEON format names.
llvm-svn: 106921
|
| |
|
|
|
|
| |
Renumber MiscFrm to 25.
llvm-svn: 106916
|
| |
|
|
| |
llvm-svn: 106360
|
| |
|
|
|
|
|
| |
MachineRegisterInfo doesn't have to confusingly allocate an extra
entry.
llvm-svn: 106296
|
| |
|
|
|
|
|
|
|
|
|
| |
the machine instruction representation of the immediate value to be encoded
into an integer with similar fields as the actual VMOV instruction. This makes
things easier for the disassembler, since it can just stuff the bits into the
immediate operand, but harder for the asm printer since it has to decode the
value to be printed. Testcase for the encoding will follow later when MC has
more support for ARM.
llvm-svn: 105836
|
| |
|
|
|
|
| |
immediates to avoid breaking the build.
llvm-svn: 105652
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
In file included from X86InstrInfo.cpp:16:
X86GenInstrInfo.inc:2789: error: integer constant is too large for 'long' type
X86GenInstrInfo.inc:2790: error: integer constant is too large for 'long' type
X86GenInstrInfo.inc:2792: error: integer constant is too large for 'long' type
X86GenInstrInfo.inc:2793: error: integer constant is too large for 'long' type
X86GenInstrInfo.inc:2808: error: integer constant is too large for 'long' type
X86GenInstrInfo.inc:2809: error: integer constant is too large for 'long' type
X86GenInstrInfo.inc:2816: error: integer constant is too large for 'long' type
X86GenInstrInfo.inc:2817: error: integer constant is too large for 'long' type
llvm-svn: 105524
|
| |
|
|
|
|
| |
yet, only assembly encoding support.
llvm-svn: 105521
|
| |
|
|
| |
llvm-svn: 102008
|
| |
|
|
|
|
|
|
| |
before reglist were not properly handled with respect to IT Block. Fix that by
creating a new method ARMBasicMCBuilder::DoPredicateOperands() used by those
instructions for disassembly. Add a test case.
llvm-svn: 101974
|
| |
|
|
|
|
| |
instead of just asserting.
llvm-svn: 101942
|
| |
|
|
|
|
|
|
|
| |
Rn(Inst{19-16})=='1111',
transform the Opcode to the corresponding t2LDR*pci counterpart.
Ref: A8.6.86 LDRT, A8.6.65 LDRBT, A8.6.77 LDRHT, A8.6.81 LDRSBT, A8.6.85 LDRSHT
llvm-svn: 101915
|
| |
|
|
|
|
| |
d==15 is considered illegal. Return false instead of assert().
llvm-svn: 101852
|
| |
|
|
| |
llvm-svn: 101839
|
| |
|
|
| |
llvm-svn: 101827
|
| |
|
|
|
|
|
|
|
|
| |
Pseudocode details of conditional, Condition bits '111x' indicate the
instruction is always executed. That is, '1111' is a leagl condition field
value, which is now mapped to ARMCC::AL.
Also add a test case for condition field '1111'.
llvm-svn: 101817
|
| |
|
|
|
|
|
|
| |
instructions should have Rd (Inst{11-8}) != 0b1111.
Ref: A6.3 32-bit Thumb instruction encoding
A6.3.11 Data-processing (shifted register)
llvm-svn: 101788
|
| |
|
|
|
|
| |
VLD1q*_UPD and VST1q*_UPD have the ${dst:dregpair} operand now.
llvm-svn: 101784
|