summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2011-10-11 20:17:35 +0000
committerJim Grosbach <grosbach@apple.com>2011-10-11 20:17:35 +0000
commit12b288998945bab7b98c0901aa78e72dca2090e6 (patch)
tree9958ba2520940198bd3554f3b79e8fc943ea4d0a /llvm/lib
parent037fc9311ad6c7254be49c2e061b30d552266870 (diff)
downloadbcm5719-llvm-12b288998945bab7b98c0901aa78e72dca2090e6.tar.gz
bcm5719-llvm-12b288998945bab7b98c0901aa78e72dca2090e6.zip
ARM addressing mode cleanup for LDC/STC.
We parse at least some forms of the instructions now. Encoding is pretty screwed up, still, though. llvm-svn: 141704
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/ARM/ARMInstrInfo.td36
1 files changed, 20 insertions, 16 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td
index 82f972b5f26..a89a5898eba 100644
--- a/llvm/lib/Target/ARM/ARMInstrInfo.td
+++ b/llvm/lib/Target/ARM/ARMInstrInfo.td
@@ -4253,8 +4253,8 @@ class ACI<dag oops, dag iops, string opc, string asm,
multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
def _OFFSET : ACI<(outs),
- !con((ins nohash_imm:$cop, nohash_imm:$CRd, addrmode2:$addr), ops),
- !strconcat(opc, cond), "\tp$cop, cr$CRd, $addr"> {
+ !con((ins p_imm:$cop, c_imm:$CRd, addrmode5:$addr), ops),
+ !strconcat(opc, cond), "\t$cop, $CRd, $addr"> {
let Inst{31-28} = op31_28;
let Inst{24} = 1; // P = 1
let Inst{21} = 0; // W = 0
@@ -4264,8 +4264,8 @@ multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
}
def _PRE : ACI<(outs),
- !con((ins nohash_imm:$cop, nohash_imm:$CRd, addrmode2:$addr), ops),
- !strconcat(opc, cond), "\tp$cop, cr$CRd, $addr!", IndexModePre> {
+ !con((ins p_imm:$cop, c_imm:$CRd, addrmode5:$addr), ops),
+ !strconcat(opc, cond), "\t$cop, $CRd, $addr!", IndexModePre> {
let Inst{31-28} = op31_28;
let Inst{24} = 1; // P = 1
let Inst{21} = 1; // W = 1
@@ -4275,8 +4275,10 @@ multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
}
def _POST : ACI<(outs),
- !con((ins nohash_imm:$cop, nohash_imm:$CRd, addrmode2:$addr), ops),
- !strconcat(opc, cond), "\tp$cop, cr$CRd, $addr", IndexModePost> {
+ !con((ins p_imm:$cop, c_imm:$CRd, addr_offset_none:$addr,
+ postidx_imm8s4:$offset), ops),
+ !strconcat(opc, cond), "\t$cop, $CRd, $addr, $offset",
+ IndexModePost> {
let Inst{31-28} = op31_28;
let Inst{24} = 0; // P = 0
let Inst{21} = 1; // W = 1
@@ -4286,9 +4288,10 @@ multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
}
def _OPTION : ACI<(outs),
- !con((ins nohash_imm:$cop,nohash_imm:$CRd,GPR:$base, nohash_imm:$option),
+ !con((ins p_imm:$cop, c_imm:$CRd, addr_offset_none:$base,
+ nohash_imm:$option),
ops),
- !strconcat(opc, cond), "\tp$cop, cr$CRd, [$base], \\{$option\\}"> {
+ !strconcat(opc, cond), "\t$cop, $CRd, $base, \\{$option\\}"> {
let Inst{31-28} = op31_28;
let Inst{24} = 0; // P = 0
let Inst{23} = 1; // U = 1
@@ -4299,8 +4302,8 @@ multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
}
def L_OFFSET : ACI<(outs),
- !con((ins nohash_imm:$cop, nohash_imm:$CRd, addrmode2:$addr), ops),
- !strconcat(!strconcat(opc, "l"), cond), "\tp$cop, cr$CRd, $addr"> {
+ !con((ins p_imm:$cop, c_imm:$CRd, addrmode5:$addr), ops),
+ !strconcat(!strconcat(opc, "l"), cond), "\t$cop, $CRd, $addr"> {
let Inst{31-28} = op31_28;
let Inst{24} = 1; // P = 1
let Inst{21} = 0; // W = 0
@@ -4310,8 +4313,8 @@ multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
}
def L_PRE : ACI<(outs),
- !con((ins nohash_imm:$cop, nohash_imm:$CRd, addrmode2:$addr), ops),
- !strconcat(!strconcat(opc, "l"), cond), "\tp$cop, cr$CRd, $addr!",
+ !con((ins p_imm:$cop, c_imm:$CRd, addrmode5:$addr), ops),
+ !strconcat(!strconcat(opc, "l"), cond), "\t$cop, $CRd, $addr!",
IndexModePre> {
let Inst{31-28} = op31_28;
let Inst{24} = 1; // P = 1
@@ -4322,9 +4325,9 @@ multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
}
def L_POST : ACI<(outs),
- !con((ins nohash_imm:$cop, nohash_imm:$CRd, addr_offset_none:$addr,
+ !con((ins p_imm:$cop, c_imm:$CRd, addr_offset_none:$addr,
postidx_imm8s4:$offset), ops),
- !strconcat(!strconcat(opc, "l"), cond), "\tp$cop, cr$CRd, $addr, $offset",
+ !strconcat(!strconcat(opc, "l"), cond), "\t$cop, $CRd, $addr, $offset",
IndexModePost> {
let Inst{31-28} = op31_28;
let Inst{24} = 0; // P = 0
@@ -4335,10 +4338,11 @@ multiclass LdStCop<bits<4> op31_28, bit load, dag ops, string opc, string cond>{
}
def L_OPTION : ACI<(outs),
- !con((ins nohash_imm:$cop, nohash_imm:$CRd,GPR:$base,nohash_imm:$option),
+ !con((ins p_imm:$cop, c_imm:$CRd, addr_offset_none:$base,
+ nohash_imm:$option),
ops),
!strconcat(!strconcat(opc, "l"), cond),
- "\tp$cop, cr$CRd, [$base], \\{$option\\}"> {
+ "\t$cop, $CRd, $base, \\{$option\\}"> {
let Inst{31-28} = op31_28;
let Inst{24} = 0; // P = 0
let Inst{23} = 1; // U = 1
OpenPOWER on IntegriCloud