Skip to content

Commit

Permalink
[ARM] Handling for coprocessor instructions that are undefined starti…
Browse files Browse the repository at this point in the history
…ng from ARMv8 (Thumb encodings)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194263 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Artyom Skrobov authored and Artyom Skrobov committed Nov 8, 2013
1 parent c5c991b commit 2b01682
Show file tree
Hide file tree
Showing 4 changed files with 1,390 additions and 4,151 deletions.
29 changes: 21 additions & 8 deletions lib/Target/ARM/ARMInstrThumb2.td
Original file line number Diff line number Diff line change
Expand Up @@ -3914,10 +3914,10 @@ defm t2LDC : t2LdStCop<0b1110, 1, 0, "ldc">;
defm t2LDCL : t2LdStCop<0b1110, 1, 1, "ldcl">;
defm t2STC : t2LdStCop<0b1110, 0, 0, "stc">;
defm t2STCL : t2LdStCop<0b1110, 0, 1, "stcl">;
defm t2LDC2 : t2LdStCop<0b1111, 1, 0, "ldc2">;
defm t2LDC2L : t2LdStCop<0b1111, 1, 1, "ldc2l">;
defm t2STC2 : t2LdStCop<0b1111, 0, 0, "stc2">;
defm t2STC2L : t2LdStCop<0b1111, 0, 1, "stc2l">;
defm t2LDC2 : t2LdStCop<0b1111, 1, 0, "ldc2">, Requires<[PreV8]>;
defm t2LDC2L : t2LdStCop<0b1111, 1, 1, "ldc2l">, Requires<[PreV8]>;
defm t2STC2 : t2LdStCop<0b1111, 0, 0, "stc2">, Requires<[PreV8]>;
defm t2STC2L : t2LdStCop<0b1111, 0, 1, "stc2l">, Requires<[PreV8]>;


//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -4063,7 +4063,9 @@ def t2MCR2 : t2MovRCopro<0b1111, "mcr2", 0,
(outs), (ins p_imm:$cop, imm0_7:$opc1, GPR:$Rt, c_imm:$CRn,
c_imm:$CRm, imm0_7:$opc2),
[(int_arm_mcr2 imm:$cop, imm:$opc1, GPR:$Rt, imm:$CRn,
imm:$CRm, imm:$opc2)]>;
imm:$CRm, imm:$opc2)]> {
let Predicates = [IsThumb2, PreV8];
}
def : t2InstAlias<"mcr2${p} $cop, $opc1, $Rt, $CRn, $CRm",
(t2MCR2 p_imm:$cop, imm0_7:$opc1, GPR:$Rt, c_imm:$CRn,
c_imm:$CRm, 0, pred:$p)>;
Expand All @@ -4078,7 +4080,9 @@ def : t2InstAlias<"mrc${p} $cop, $opc1, $Rt, $CRn, $CRm",

def t2MRC2 : t2MovRCopro<0b1111, "mrc2", 1,
(outs GPRwithAPSR:$Rt), (ins p_imm:$cop, imm0_7:$opc1, c_imm:$CRn,
c_imm:$CRm, imm0_7:$opc2), []>;
c_imm:$CRm, imm0_7:$opc2), []> {
let Predicates = [IsThumb2, PreV8];
}
def : t2InstAlias<"mrc2${p} $cop, $opc1, $Rt, $CRn, $CRm",
(t2MRC2 GPRwithAPSR:$Rt, p_imm:$cop, imm0_7:$opc1, c_imm:$CRn,
c_imm:$CRm, 0, pred:$p)>;
Expand All @@ -4096,11 +4100,16 @@ def t2MCRR : t2MovRRCopro<0b1110, "mcrr", 0,
imm:$CRm)]>;
def t2MCRR2 : t2MovRRCopro<0b1111, "mcrr2", 0,
[(int_arm_mcrr2 imm:$cop, imm:$opc1, GPR:$Rt,
GPR:$Rt2, imm:$CRm)]>;
GPR:$Rt2, imm:$CRm)]> {
let Predicates = [IsThumb2, PreV8];
}

/* from coprocessor to ARM core register */
def t2MRRC : t2MovRRCopro<0b1110, "mrrc", 1>;

def t2MRRC2 : t2MovRRCopro<0b1111, "mrrc2", 1>;
def t2MRRC2 : t2MovRRCopro<0b1111, "mrrc2", 1> {
let Predicates = [IsThumb2, PreV8];
}

//===----------------------------------------------------------------------===//
// Other Coprocessor Instructions.
Expand All @@ -4127,6 +4136,8 @@ def t2CDP : T2Cop<0b1110, (outs), (ins p_imm:$cop, imm0_15:$opc1,
let Inst{15-12} = CRd;
let Inst{19-16} = CRn;
let Inst{23-20} = opc1;

let Predicates = [IsThumb2, PreV8];
}

def t2CDP2 : T2Cop<0b1111, (outs), (ins p_imm:$cop, imm0_15:$opc1,
Expand All @@ -4150,6 +4161,8 @@ def t2CDP2 : T2Cop<0b1111, (outs), (ins p_imm:$cop, imm0_15:$opc1,
let Inst{15-12} = CRd;
let Inst{19-16} = CRn;
let Inst{23-20} = opc1;

let Predicates = [IsThumb2, PreV8];
}


Expand Down
Loading

0 comments on commit 2b01682

Please sign in to comment.