Add some new instructions

llvm-svn: 22036
This commit is contained in:
Chris Lattner 2005-05-14 23:35:21 +00:00
parent e0e8f7a3b4
commit 37e226fa9b
2 changed files with 17 additions and 2 deletions

View File

@ -191,6 +191,13 @@ let isCall = 1 in
def CALL32m : I<0xFF, MRM2m, (ops i32mem:$dst), "call {*}$dst">;
}
// calltarget instead of i32imm?
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in
def TAILJMPd : IBr<0xE9, (ops i32imm:$dst), "jmp $dst">;
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in
def TAILJMPr : I<0xFF, MRM4r, (ops R32:$dst), "jmp {*}$dst">;
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in
def TAILJMPm : I<0xFF, MRM4m, (ops i32mem:$dst), "jmp {*}$dst">;
//===----------------------------------------------------------------------===//
// Miscellaneous Instructions...

View File

@ -507,8 +507,16 @@ void X86RegisterInfo::emitEpilogue(MachineFunction &MF,
const MachineFrameInfo *MFI = MF.getFrameInfo();
MachineBasicBlock::iterator MBBI = prior(MBB.end());
MachineInstr *MI;
assert((MBBI->getOpcode() == X86::RET || MBBI->getOpcode() == X86::RETI) &&
"Can only insert epilog into returning blocks");
switch (MBBI->getOpcode()) {
case X86::RET:
case X86::RETI:
case X86::TAILJMPd:
case X86::TAILJMPr:
case X86::TAILJMPm: break; // These are ok
default:
assert(0 && "Can only insert epilog into returning blocks");
}
if (hasFP(MF)) {
// Get the offset of the stack slot for the EBP register... which is