mirror of
https://github.com/capstone-engine/capstone.git
synced 2024-11-23 13:39:46 +00:00
Updates files from LLVM for PPC64 (#1510)
* Updates files from LLVM for PPC64 * Only fix tbegin, tabort and such
This commit is contained in:
parent
c3b4ce1901
commit
839c5e2c19
@ -21,55 +21,53 @@ def HTM_get_imm : SDNodeXForm<imm, [{
|
||||
}]>;
|
||||
|
||||
let hasSideEffects = 1, usesCustomInserter = 1 in {
|
||||
def TCHECK_RET : Pseudo<(outs crrc:$out), (ins), "#TCHECK_RET", []>;
|
||||
def TCHECK_RET : Pseudo<(outs gprc:$out), (ins), "#TCHECK_RET", []>;
|
||||
def TBEGIN_RET : PPCCustomInserterPseudo<(outs gprc:$out), (ins u1imm:$R), "#TBEGIN_RET", []>;
|
||||
}
|
||||
|
||||
|
||||
let Predicates = [HasHTM] in {
|
||||
|
||||
let Defs = [CR0] in {
|
||||
def TBEGIN : XForm_htm0 <31, 654,
|
||||
(outs crrc0:$ret), (ins u1imm:$R), "tbegin. $R", IIC_SprMTSPR, []>;
|
||||
(outs), (ins u1imm:$R), "tbegin. $R", IIC_SprMTSPR, []>;
|
||||
|
||||
def TEND : XForm_htm1 <31, 686,
|
||||
(outs crrc0:$ret), (ins u1imm:$A), "tend. $A", IIC_SprMTSPR, []>;
|
||||
(outs), (ins u1imm:$A), "tend. $A", IIC_SprMTSPR, []>;
|
||||
|
||||
def TABORT : XForm_base_r3xo <31, 910,
|
||||
(outs crrc0:$ret), (ins gprc:$A), "tabort. $A", IIC_SprMTSPR,
|
||||
(outs), (ins gprc:$A), "tabort. $A", IIC_SprMTSPR,
|
||||
[]>, isDOT {
|
||||
let RST = 0;
|
||||
let B = 0;
|
||||
}
|
||||
|
||||
def TABORTWC : XForm_base_r3xo <31, 782,
|
||||
(outs crrc0:$ret), (ins u5imm:$RTS, gprc:$A, gprc:$B),
|
||||
(outs), (ins u5imm:$RTS, gprc:$A, gprc:$B),
|
||||
"tabortwc. $RTS, $A, $B", IIC_SprMTSPR, []>,
|
||||
isDOT;
|
||||
|
||||
def TABORTWCI : XForm_base_r3xo <31, 846,
|
||||
(outs crrc0:$ret), (ins u5imm:$RTS, gprc:$A, u5imm:$B),
|
||||
(outs), (ins u5imm:$RTS, gprc:$A, u5imm:$B),
|
||||
"tabortwci. $RTS, $A, $B", IIC_SprMTSPR, []>,
|
||||
isDOT;
|
||||
|
||||
def TABORTDC : XForm_base_r3xo <31, 814,
|
||||
(outs crrc0:$ret), (ins u5imm:$RTS, gprc:$A, gprc:$B),
|
||||
(outs), (ins u5imm:$RTS, gprc:$A, gprc:$B),
|
||||
"tabortdc. $RTS, $A, $B", IIC_SprMTSPR, []>,
|
||||
isDOT;
|
||||
|
||||
def TABORTDCI : XForm_base_r3xo <31, 878,
|
||||
(outs crrc0:$ret), (ins u5imm:$RTS, gprc:$A, u5imm:$B),
|
||||
(outs), (ins u5imm:$RTS, gprc:$A, u5imm:$B),
|
||||
"tabortdci. $RTS, $A, $B", IIC_SprMTSPR, []>,
|
||||
isDOT;
|
||||
|
||||
def TSR : XForm_htm2 <31, 750,
|
||||
(outs crrc0:$ret), (ins u1imm:$L), "tsr. $L", IIC_SprMTSPR, []>,
|
||||
(outs), (ins u1imm:$L), "tsr. $L", IIC_SprMTSPR, []>,
|
||||
isDOT;
|
||||
|
||||
def TCHECK : XForm_htm3 <31, 718,
|
||||
(outs), (ins crrc:$BF), "tcheck $BF", IIC_SprMTSPR, []>;
|
||||
|
||||
|
||||
def TRECLAIM : XForm_base_r3xo <31, 942,
|
||||
(outs crrc:$ret), (ins gprc:$A), "treclaim. $A",
|
||||
(outs), (ins gprc:$A), "treclaim. $A",
|
||||
IIC_SprMTSPR, []>,
|
||||
isDOT {
|
||||
let RST = 0;
|
||||
@ -77,13 +75,17 @@ def TRECLAIM : XForm_base_r3xo <31, 942,
|
||||
}
|
||||
|
||||
def TRECHKPT : XForm_base_r3xo <31, 1006,
|
||||
(outs crrc:$ret), (ins), "trechkpt.", IIC_SprMTSPR, []>,
|
||||
(outs), (ins), "trechkpt.", IIC_SprMTSPR, []>,
|
||||
isDOT {
|
||||
let RST = 0;
|
||||
let A = 0;
|
||||
let B = 0;
|
||||
}
|
||||
|
||||
}//Defs = [CR0]
|
||||
|
||||
def TCHECK : XForm_htm3 <31, 718,
|
||||
(outs crrc:$BF), (ins), "tcheck $BF", IIC_SprMTSPR, []>;
|
||||
// Builtins
|
||||
|
||||
// All HTM instructions, with the exception of tcheck, set CR0 with the
|
||||
@ -94,15 +96,11 @@ def TRECHKPT : XForm_base_r3xo <31, 1006,
|
||||
// tbegin builtin API which defines a return value of 1 as success.
|
||||
|
||||
def : Pat<(int_ppc_tbegin i32:$R),
|
||||
(XORI
|
||||
(EXTRACT_SUBREG (
|
||||
TBEGIN (HTM_get_imm imm:$R)), sub_eq),
|
||||
1)>;
|
||||
(XORI (TBEGIN_RET(HTM_get_imm imm:$R)), 1)>;
|
||||
|
||||
def : Pat<(int_ppc_tend i32:$R),
|
||||
(TEND (HTM_get_imm imm:$R))>;
|
||||
|
||||
|
||||
def : Pat<(int_ppc_tabort i32:$R),
|
||||
(TABORT $R)>;
|
||||
|
||||
|
@ -540,10 +540,6 @@ def PPCRegCRRCAsmOperand : AsmOperandClass {
|
||||
def crrc : RegisterOperand<CRRC> {
|
||||
let ParserMatchClass = PPCRegCRRCAsmOperand;
|
||||
}
|
||||
def crrc0 : RegisterOperand<CRRC0> {
|
||||
let ParserMatchClass = PPCRegCRRCAsmOperand;
|
||||
}
|
||||
|
||||
def PPCRegSPERCAsmOperand : AsmOperandClass {
|
||||
let Name = "RegSPERC"; let PredicateMethod = "isRegNumber";
|
||||
}
|
||||
|
@ -369,8 +369,6 @@ def CRBITRC : RegisterClass<"PPC", [i1], 32,
|
||||
def CRRC : RegisterClass<"PPC", [i32], 32, (add CR0, CR1, CR5, CR6,
|
||||
CR7, CR2, CR3, CR4)>;
|
||||
|
||||
def CRRC0 : RegisterClass<"PPC", [i32], 32, (add CR0)>;
|
||||
|
||||
// The CTR registers are not allocatable because they're used by the
|
||||
// decrement-and-branch instructions, and thus need to stay live across
|
||||
// multiple basic blocks.
|
||||
|
Loading…
Reference in New Issue
Block a user