forked from OSchip/llvm-project
parent
3c9f5f45f6
commit
16af2d5aa8
|
@ -55,6 +55,7 @@ namespace {
|
||||||
// fixed X86 code for each instruction.
|
// fixed X86 code for each instruction.
|
||||||
//
|
//
|
||||||
void visitReturnInst(ReturnInst &RI);
|
void visitReturnInst(ReturnInst &RI);
|
||||||
|
void visitBranchInst(BranchInst &BI);
|
||||||
void visitAdd(BinaryOperator &B);
|
void visitAdd(BinaryOperator &B);
|
||||||
void visitShiftInst(ShiftInst &I);
|
void visitShiftInst(ShiftInst &I);
|
||||||
|
|
||||||
|
@ -162,6 +163,14 @@ void ISel::visitReturnInst(ReturnInst &I) {
|
||||||
BuildMI(BB, X86::RET, 0);
|
BuildMI(BB, X86::RET, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISel::visitBranchInst(BranchInst &BI) {
|
||||||
|
if (BI.isConditional()) // Only handles unconditional branches so far...
|
||||||
|
visitInstruction(BI);
|
||||||
|
|
||||||
|
BuildMI(BB, X86::JMP, 1).addPCDisp(BI.getSuccessor(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Shift instructions: 'shl', 'sar', 'shr' - Some special cases here
|
/// Shift instructions: 'shl', 'sar', 'shr' - Some special cases here
|
||||||
/// for constant immediate shift values, and for constant immediate
|
/// for constant immediate shift values, and for constant immediate
|
||||||
/// shift values equal to 1. Even the general case is sort of special,
|
/// shift values equal to 1. Even the general case is sort of special,
|
||||||
|
|
|
@ -33,8 +33,9 @@ I(PHI , "phi", 0, 0)
|
||||||
// The second instruction must always be the noop instruction: (FIXME, not yet)
|
// The second instruction must always be the noop instruction: (FIXME, not yet)
|
||||||
I(NOOP , "nop", 0, X86II::Void) // nop 90
|
I(NOOP , "nop", 0, X86II::Void) // nop 90
|
||||||
|
|
||||||
// Miscellaneous instructions
|
// Flow control instructions
|
||||||
I(RET , "ret", M_RET_FLAG, X86II::Void) // ret CB
|
I(RET , "ret", M_RET_FLAG, X86II::Void) // ret CB
|
||||||
|
I(JMP , "jmp", M_BRANCH_FLAG, X86II::Void) // jmp foo EB|E9 cb|w
|
||||||
|
|
||||||
// Move instructions
|
// Move instructions
|
||||||
I(MOVrr8 , "movb", 0, 0) // R8 = R8 88/r
|
I(MOVrr8 , "movb", 0, 0) // R8 = R8 88/r
|
||||||
|
|
Loading…
Reference in New Issue