Hi Duncan, Some nit picks.
1. Please don't use "Chain" for stand for function static chain. It confuses backend guys like me. :-) "Chain" stands for control flow dependency in the backend. 2. Purely a stylistic thing: +SDOperand X86TargetLowering::LowerTRAMPOLINE(SDOperand Op, + SelectionDAG &DAG) { + SDOperand Root = Op.getOperand(0); + SDOperand Trmp = Op.getOperand(1); // trampoline + SDOperand FPtr = Op.getOperand(2); // nested function + SDOperand SChn = Op.getOperand(3); // static chain + + SrcValueSDNode *TrmpSV = cast<SrcValueSDNode>(Op.getOperand(4)); + + if (Subtarget->is64Bit()) { + return SDOperand(); // not yet supported + } else { If you move the check is64Bit() to the beginning of function, there is no need to nest the part that actually do the work in the "else" clause. 3. In X86TargetLowering::LowerTRAMPOLINE(): + case CallingConv::X86_StdCall: { + Move = 0xb9; // Pass chain in ECX I assume this is the ModR/M byte? Can you refactor ModRMByte() from X86CodeEmitter.cpp (probably also getX86RegNum) and use that to calculate this instead? Also, isn't the static chain register described in X86CallingConv.td? Magic number is confusing. :-) Looks great otherwise. Thanks! Evan On Jul 26, 2007, at 7:56 AM, Duncan Sands wrote: > These patches add support for taking pointers to nested > functions (a gcc extension). This is done by building > and executing a small code stub on the stack, known as > a trampoline. The LLVM part adds two new intrinsics, > llvm.init.trampoline and llvm.adjust.trampoline. The > adjust intrinsic is implemented for all architectures > that are supported in gcc, while the init intrinsic is > only implemented for X86. Furthermore, trampolines can > interact badly with stack protection mechanisms which > don't much like execution of code on the stack. GCC > does various tricks to tell the OS that the trampoline > is kosher. I didn't implement any of those tricks yet, > because it works without them on my machine :) > > Enjoy! > > Duncan. > <tramp.diff> > <tramp-gcc.diff> > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits