forked from OSchip/llvm-project
[PowerPC] Add extended subtract mnemonics
This adds support for the extended subtract mnemonics to the asm parser: subi subis subic subic. sub sub. subc subc. llvm-svn: 184832
This commit is contained in:
parent
aaaf28971d
commit
4069e24bd3
|
@ -432,6 +432,46 @@ ProcessInstruction(MCInst &Inst,
|
|||
Inst = TmpInst;
|
||||
break;
|
||||
}
|
||||
case PPC::SUBI: {
|
||||
MCInst TmpInst;
|
||||
int64_t N = Inst.getOperand(2).getImm();
|
||||
TmpInst.setOpcode(PPC::ADDI);
|
||||
TmpInst.addOperand(Inst.getOperand(0));
|
||||
TmpInst.addOperand(Inst.getOperand(1));
|
||||
TmpInst.addOperand(MCOperand::CreateImm(-N));
|
||||
Inst = TmpInst;
|
||||
break;
|
||||
}
|
||||
case PPC::SUBIS: {
|
||||
MCInst TmpInst;
|
||||
int64_t N = Inst.getOperand(2).getImm();
|
||||
TmpInst.setOpcode(PPC::ADDIS);
|
||||
TmpInst.addOperand(Inst.getOperand(0));
|
||||
TmpInst.addOperand(Inst.getOperand(1));
|
||||
TmpInst.addOperand(MCOperand::CreateImm(-N));
|
||||
Inst = TmpInst;
|
||||
break;
|
||||
}
|
||||
case PPC::SUBIC: {
|
||||
MCInst TmpInst;
|
||||
int64_t N = Inst.getOperand(2).getImm();
|
||||
TmpInst.setOpcode(PPC::ADDIC);
|
||||
TmpInst.addOperand(Inst.getOperand(0));
|
||||
TmpInst.addOperand(Inst.getOperand(1));
|
||||
TmpInst.addOperand(MCOperand::CreateImm(-N));
|
||||
Inst = TmpInst;
|
||||
break;
|
||||
}
|
||||
case PPC::SUBICo: {
|
||||
MCInst TmpInst;
|
||||
int64_t N = Inst.getOperand(2).getImm();
|
||||
TmpInst.setOpcode(PPC::ADDICo);
|
||||
TmpInst.addOperand(Inst.getOperand(0));
|
||||
TmpInst.addOperand(Inst.getOperand(1));
|
||||
TmpInst.addOperand(MCOperand::CreateImm(-N));
|
||||
Inst = TmpInst;
|
||||
break;
|
||||
}
|
||||
case PPC::SLWI: {
|
||||
MCInst TmpInst;
|
||||
int64_t N = Inst.getOperand(2).getImm();
|
||||
|
|
|
@ -2276,6 +2276,20 @@ def : InstAlias<"not. $rA, $rB", (NOR8o g8rc:$rA, g8rc:$rB, g8rc:$rB)>;
|
|||
|
||||
def LAx : PPCAsmPseudo<"la $rA, $addr", (ins gprc:$rA, memri:$addr)>;
|
||||
|
||||
def SUBI : PPCAsmPseudo<"subi $rA, $rB, $imm",
|
||||
(ins gprc:$rA, gprc:$rB, s16imm:$imm)>;
|
||||
def SUBIS : PPCAsmPseudo<"subis $rA, $rB, $imm",
|
||||
(ins gprc:$rA, gprc:$rB, s16imm:$imm)>;
|
||||
def SUBIC : PPCAsmPseudo<"subic $rA, $rB, $imm",
|
||||
(ins gprc:$rA, gprc:$rB, s16imm:$imm)>;
|
||||
def SUBICo : PPCAsmPseudo<"subic. $rA, $rB, $imm",
|
||||
(ins gprc:$rA, gprc:$rB, s16imm:$imm)>;
|
||||
|
||||
def : InstAlias<"sub $rA, $rB, $rC", (SUBF8 g8rc:$rA, g8rc:$rC, g8rc:$rB)>;
|
||||
def : InstAlias<"sub. $rA, $rB, $rC", (SUBF8o g8rc:$rA, g8rc:$rC, g8rc:$rB)>;
|
||||
def : InstAlias<"subc $rA, $rB, $rC", (SUBFC8 g8rc:$rA, g8rc:$rC, g8rc:$rB)>;
|
||||
def : InstAlias<"subc. $rA, $rB, $rC", (SUBFC8o g8rc:$rA, g8rc:$rC, g8rc:$rB)>;
|
||||
|
||||
def SLWI : PPCAsmPseudo<"slwi $rA, $rS, $n",
|
||||
(ins gprc:$rA, gprc:$rS, u5imm:$n)>;
|
||||
def SRWI : PPCAsmPseudo<"srwi $rA, $rS, $n",
|
||||
|
|
|
@ -1788,7 +1788,25 @@
|
|||
|
||||
# FIXME: Condition register logical mnemonics
|
||||
|
||||
# FIXME: Subtract mnemonics
|
||||
# Subtract mnemonics
|
||||
|
||||
# CHECK: addi 2, 3, -128 # encoding: [0x38,0x43,0xff,0x80]
|
||||
subi 2, 3, 128
|
||||
# CHECK: addis 2, 3, -128 # encoding: [0x3c,0x43,0xff,0x80]
|
||||
subis 2, 3, 128
|
||||
# CHECK: addic 2, 3, -128 # encoding: [0x30,0x43,0xff,0x80]
|
||||
subic 2, 3, 128
|
||||
# CHECK: addic. 2, 3, -128 # encoding: [0x34,0x43,0xff,0x80]
|
||||
subic. 2, 3, 128
|
||||
|
||||
# CHECK: subf 2, 4, 3 # encoding: [0x7c,0x44,0x18,0x50]
|
||||
sub 2, 3, 4
|
||||
# CHECK: subf. 2, 4, 3 # encoding: [0x7c,0x44,0x18,0x51]
|
||||
sub. 2, 3, 4
|
||||
# CHECK: subfc 2, 4, 3 # encoding: [0x7c,0x44,0x18,0x10]
|
||||
subc 2, 3, 4
|
||||
# CHECK: subfc. 2, 4, 3 # encoding: [0x7c,0x44,0x18,0x11]
|
||||
subc. 2, 3, 4
|
||||
|
||||
# Compare mnemonics
|
||||
|
||||
|
|
Loading…
Reference in New Issue