[llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp X86InstrInfo.def
Chris Lattner
lattner at cs.uiuc.edu
Fri Dec 13 08:14:01 PST 2002
Changes in directory llvm/lib/Target/X86:
InstSelectSimple.cpp updated: 1.67 -> 1.68
X86InstrInfo.def updated: 1.40 -> 1.41
---
Log message:
Implement indirect function calls
---
Diffs of the changes:
Index: llvm/lib/Target/X86/InstSelectSimple.cpp
diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.67 llvm/lib/Target/X86/InstSelectSimple.cpp:1.68
--- llvm/lib/Target/X86/InstSelectSimple.cpp:1.67 Fri Dec 13 07:07:42 2002
+++ llvm/lib/Target/X86/InstSelectSimple.cpp Fri Dec 13 08:13:27 2002
@@ -577,8 +577,14 @@
break;
}
}
- // Emit a CALL instruction with PC-relative displacement.
- BuildMI (BB, X86::CALLpcrel32, 1).addPCDisp (CI.getCalledValue ());
+
+ if (Function *F = CI.getCalledFunction()) {
+ // Emit a CALL instruction with PC-relative displacement.
+ BuildMI(BB, X86::CALLpcrel32, 1).addPCDisp(F);
+ } else {
+ unsigned Reg = getReg(CI.getCalledValue());
+ BuildMI(BB, X86::CALLr32, 1).addReg(Reg);
+ }
// Adjust the stack by `bytesPushed' amount if non-zero
if (bytesPushed > 0)
Index: llvm/lib/Target/X86/X86InstrInfo.def
diff -u llvm/lib/Target/X86/X86InstrInfo.def:1.40 llvm/lib/Target/X86/X86InstrInfo.def:1.41
--- llvm/lib/Target/X86/X86InstrInfo.def:1.40 Thu Dec 12 23:04:37 2002
+++ llvm/lib/Target/X86/X86InstrInfo.def Fri Dec 13 08:13:27 2002
@@ -66,6 +66,10 @@
I(JE , "je", 0x84, M_BRANCH_FLAG, X86II::RawFrm | X86II::TB | X86II::Void, NoIR,
NoIR) // je foo
I(CALLpcrel32 , "call", 0xE8, M_BRANCH_FLAG, X86II::Void, NoIR, NoIR) // call pc+42
+I(CALLr32 , "call", 0xFF, M_BRANCH_FLAG, X86II::Void | X86II::MRMS2r | X86II::Arg32,
+ NoIR, NoIR) // call [r32]
+I(CALLm32 , "call", 0xFF, M_BRANCH_FLAG, X86II::Void | X86II::MRMS2m | X86II::Arg32,
+ NoIR, NoIR) // call [m32]
// Misc instructions
I(LEAVE , "leave", 0xC9, 0, X86II::RawFrm, O_EBP, O_EBP) // leave
More information about the llvm-commits
mailing list