James Y Knight
f7e7017281
Sparc: Support PSR, TBR, WIM read/write instructions.
...
Differential Revision: http://reviews.llvm.org/D8971
llvm-svn: 237582
2015-05-18 16:38:47 +00:00
James Y Knight
24060be73a
Sparc: Add the "alternate address space" load/store instructions.
...
- Adds support for the asm syntax, which has an immediate integer
"ASI" (address space identifier) appearing after an address, before
a comma.
- Adds the various-width load, store, and swap in alternate address
space instructions. (ldsba, ldsha, lduba, lduha, lda, stba, stha,
sta, swapa)
This does not attempt to hook these instructions up to pointer address
spaces in LLVM, although that would probably be a reasonable thing to
do in the future.
Differential Revision: http://reviews.llvm.org/D8904
llvm-svn: 237581
2015-05-18 16:35:04 +00:00
James Y Knight
807563df22
Add support for the Sparc implementation-defined "ASR" registers.
...
(Note that register "Y" is essentially just ASR0).
Also added some test cases for divide and multiply, which had none before.
Differential Revision: http://reviews.llvm.org/D8670
llvm-svn: 237580
2015-05-18 16:29:48 +00:00
Sergey Dmitrouk
842a51bad8
Reapply r235977 "[DebugInfo] Add debug locations to constant SD nodes"
...
[DebugInfo] Add debug locations to constant SD nodes
This adds debug location to constant nodes of Selection DAG and updates
all places that create constants to pass debug locations
(see PR13269).
Can't guarantee that all locations are correct, but in a lot of cases choice
is obvious, so most of them should be. At least all tests pass.
Tests for these changes do not cover everything, instead just check it for
SDNodes, ARM and AArch64 where it's easy to get incorrect locations on
constants.
This is not complete fix as FastISel contains workaround for wrong debug
locations, which drops locations from instructions on processing constants,
but there isn't currently a way to use debug locations from constants there
as llvm::Constant doesn't cache it (yet). Although this is a bit different
issue, not directly related to these changes.
Differential Revision: http://reviews.llvm.org/D9084
llvm-svn: 235989
2015-04-28 14:05:47 +00:00
Daniel Jasper
48e93f7181
Revert "[DebugInfo] Add debug locations to constant SD nodes"
...
This breaks a test:
http://bb.pgr.jp/builders/cmake-llvm-x86_64-linux/builds/23870
llvm-svn: 235987
2015-04-28 13:38:35 +00:00
Sergey Dmitrouk
adb4c69d5c
[DebugInfo] Add debug locations to constant SD nodes
...
This adds debug location to constant nodes of Selection DAG and updates
all places that create constants to pass debug locations
(see PR13269).
Can't guarantee that all locations are correct, but in a lot of cases choice
is obvious, so most of them should be. At least all tests pass.
Tests for these changes do not cover everything, instead just check it for
SDNodes, ARM and AArch64 where it's easy to get incorrect locations on
constants.
This is not complete fix as FastISel contains workaround for wrong debug
locations, which drops locations from instructions on processing constants,
but there isn't currently a way to use debug locations from constants there
as llvm::Constant doesn't cache it (yet). Although this is a bit different
issue, not directly related to these changes.
Differential Revision: http://reviews.llvm.org/D9084
llvm-svn: 235977
2015-04-28 11:56:37 +00:00
Eric Christopher
f5e9406243
Reuse a bunch of cached subtargets and remove getSubtarget calls
...
without a Function argument.
llvm-svn: 227644
2015-01-30 23:46:43 +00:00
Pete Cooper
c18261d467
Fix a whole bunch of binary literals which were the wrong size. All were being silently zero extended to the correct width.
...
The commit after this changes { } and 0bxx literals to be of type bits<n> and not int. This means we need to write exactly the right number of bits, and not rely on the values being silently zero extended for us.
llvm-svn: 215082
2014-08-07 05:46:54 +00:00
Venkatraman Govindaraju
f703132b09
[Sparc] Add support for decoding 'swap' instruction.
...
llvm-svn: 203424
2014-03-09 23:32:07 +00:00
Venkatraman Govindaraju
925ec9b11e
[Sparc] Add trap on integer condition codes (Ticc) instructions to Sparc backend.
...
llvm-svn: 202670
2014-03-02 23:39:07 +00:00
Venkatraman Govindaraju
07d3af2821
[Sparc] Add return/rett instruction to Sparc backend.
...
llvm-svn: 202666
2014-03-02 22:55:53 +00:00
Venkatraman Govindaraju
4fa2ab26f5
[Sparc] Add support for decoding jmpl/retl/ret instruction.
...
llvm-svn: 202663
2014-03-02 21:17:44 +00:00
Venkatraman Govindaraju
c3084ad294
[Sparc] Add fcmpe* instructions to Sparc backend.
...
llvm-svn: 202661
2014-03-02 19:56:19 +00:00
Venkatraman Govindaraju
f9a202a9ac
[Sparc] Add VIS instructions to sparc backend.
...
llvm-svn: 202660
2014-03-02 19:31:21 +00:00
Venkatraman Govindaraju
b745e67a64
[SparcV9] Adds support for branch on integer register instructions (BPr) and conditional moves on integer register (MOVr/FMOVr).
...
llvm-svn: 202628
2014-03-02 09:46:56 +00:00
Venkatraman Govindaraju
600f390bb9
[Sparc] Add support for parsing branches and conditional move instructions with %fcc1-%fcc3 conditional registers.
...
llvm-svn: 202616
2014-03-02 06:28:15 +00:00
Venkatraman Govindaraju
293a81c406
[Sparc] Make floating point branch instruction formats to accept %fcc0-%fcc1 conditional registers as input.
...
No functionality change.
llvm-svn: 202614
2014-03-02 04:43:45 +00:00
Venkatraman Govindaraju
81aae57282
[Sparc] Add support for parsing fcmp with %fcc registers.
...
llvm-svn: 202610
2014-03-02 03:39:39 +00:00
Venkatraman Govindaraju
bac285f588
[Sparc] Add register class for floating point conditional flags (%fcc0 - %fcc3).
...
llvm-svn: 202604
2014-03-02 02:12:33 +00:00
Venkatraman Govindaraju
c86e0f3873
[SparcV9] Add support for parsing branch instructions with prediction.
...
llvm-svn: 202602
2014-03-01 22:03:07 +00:00
Venkatraman Govindaraju
2286874119
[Sparc] Add support for parsing annulled branch instructions.
...
llvm-svn: 202599
2014-03-01 20:08:48 +00:00
Venkatraman Govindaraju
e0c5bff720
[Sparc] Add support for parsing sparcv9 instructions addc/subc/addccc/subccc.
...
llvm-svn: 202598
2014-03-01 18:54:52 +00:00
Venkatraman Govindaraju
2a9c430677
[Sparc] Add missing ALU instruction patterns.
...
llvm-svn: 202597
2014-03-01 17:51:00 +00:00
Venkatraman Govindaraju
256735d485
[Sparc] Add support to decode unimp instruction.
...
llvm-svn: 202581
2014-03-01 09:28:18 +00:00
Venkatraman Govindaraju
484ca1a030
[Sparc] Add support to decode negative simm13 operands in the sparc disassembler.
...
llvm-svn: 202578
2014-03-01 09:11:57 +00:00
Venkatraman Govindaraju
78df2dec0c
[Sparc] Add support for decoding call instructions in the sparc disassembler.
...
llvm-svn: 202577
2014-03-01 08:30:58 +00:00
Venkatraman Govindaraju
fb54821398
[Sparc] Add support to disassemble sparc memory instructions.
...
llvm-svn: 202575
2014-03-01 07:46:33 +00:00
Benjamin Kramer
facca1f049
SPARC: Implement TRAP lowering. Matches what GCC emits.
...
llvm-svn: 201994
2014-02-23 21:43:52 +00:00
Venkatraman Govindaraju
ced9226b0f
[Sparc] Emit correct encoding for atomic instructions. Also, add support for parsing CAS instructions to test the CAS encoding.
...
llvm-svn: 200963
2014-02-07 07:34:49 +00:00
Venkatraman Govindaraju
50f32d949b
[SparcV9] Use correct register class (I64RegClass) to hold the address of _GLOBAL_OFFSET_TABLE_ in sparcv9.
...
llvm-svn: 200368
2014-01-29 03:35:08 +00:00
Venkatraman Govindaraju
cd4d9ac62a
[Sparc] Add support for parsing floating point instructions.
...
llvm-svn: 199033
2014-01-12 04:48:54 +00:00
Venkatraman Govindaraju
0d288d3105
[Sparc] Add support for parsing jmpl instruction and make indirect call and jmp instructions as aliases to jmpl.
...
llvm-svn: 198909
2014-01-10 01:48:17 +00:00
Venkatraman Govindaraju
6ff62cc539
[Sparc] Multiclass for loads/stores. No functionality change intended.
...
llvm-svn: 198893
2014-01-09 21:49:18 +00:00
Venkatraman Govindaraju
b3b7c38983
[Sparc] Add support for parsing branch instructions and conditional moves.
...
llvm-svn: 198738
2014-01-08 06:14:52 +00:00
Venkatraman Govindaraju
0458b599f8
[Sparc] Add support for parsing memory operands in sparc AsmParser.
...
llvm-svn: 198658
2014-01-07 01:49:11 +00:00
Venkatraman Govindaraju
dfcccc7db0
[Sparc] Add initial implementation of disassembler for sparc
...
llvm-svn: 198591
2014-01-06 08:08:58 +00:00
Venkatraman Govindaraju
5f1cce50e6
[Sparc] Add initial implementation of MC Code emitter for sparc.
...
llvm-svn: 198533
2014-01-05 02:13:48 +00:00
Venkatraman Govindaraju
c2dee7dc74
[Sparc] Add the initial implementation of an asm parser for sparc/sparcv9.
...
llvm-svn: 198484
2014-01-04 11:30:13 +00:00
Venkatraman Govindaraju
9a3da52ea2
[Sparc] Handle atomic loads/stores in sparc backend.
...
llvm-svn: 198286
2014-01-01 22:11:54 +00:00
Venkatraman Govindaraju
acf0233a46
[SparcV9]: Use SRL instead of SLL to clear top 32-bits in ctpop:i32. SLL does not clear top 32 bit, only SRL does.
...
llvm-svn: 198280
2014-01-01 19:00:10 +00:00
Venkatraman Govindaraju
3e3a29a2e9
[SparcV9] Use separate instruction patterns for 64 bit arithmetic instructions instead of reusing 32 bit instruction patterns.
...
This is done to avoid spilling the result of the 64-bit instructions to a 4-byte slot.
llvm-svn: 198157
2013-12-29 07:15:09 +00:00
Venkatraman Govindaraju
9c338504e5
[Sparc]: Implement LEA pattern for sparcv9.
...
llvm-svn: 195575
2013-11-24 20:07:35 +00:00
Venkatraman Govindaraju
5ae77f7564
[SparcV9] Handle i64 <-> float conversions in sparcv9 mode.
...
llvm-svn: 193957
2013-11-03 12:28:40 +00:00
Venkatraman Govindaraju
2ea4c2880c
[Sparc] Implement JIT for SPARC.
...
No new testcases. However, this patch makes all supported JIT testcases in
test/ExecutionEngine pass on Sparc.
llvm-svn: 192176
2013-10-08 07:15:22 +00:00
Venkatraman Govindaraju
8223c553cf
[Sparc] Do not hardcode nop in the delay slot of TLS_CALL. Use DelaySlotFiller to fill the delay slot instead.
...
llvm-svn: 192160
2013-10-08 02:50:29 +00:00
Venkatraman Govindaraju
f482d3d338
[Sparc] Do not emit nop after fcmp* instruction with V9.
...
llvm-svn: 192056
2013-10-06 07:06:44 +00:00
Venkatraman Govindaraju
1230342fd2
[Sparc] Use addxcc/subxcc for adde/sube instead of addx/subx.
...
addx/subx does not modify conditional codes whereas addxcc/subxx does.
llvm-svn: 192053
2013-10-06 02:11:10 +00:00
Venkatraman Govindaraju
94629eb861
[Sparc] Use correct instruction pattern for CMPri.
...
llvm-svn: 191180
2013-09-22 18:54:54 +00:00
Venkatraman Govindaraju
51270837aa
[Sparc] Make SPARC instructions' encoding well defined such that TableGen can automatically generate code emitter.
...
llvm-svn: 191168
2013-09-22 09:54:42 +00:00
Venkatraman Govindaraju
709d154d69
[Sparc] Clean up MOVcc instructions so that TableGen can encode them correctly. No functionality change intended.
...
llvm-svn: 191167
2013-09-22 09:18:26 +00:00