%term Call=CallOPCODE
%term Shl=ShlOPCODE
%term Shr=ShrOPCODE
-%term VaArg=VarArgOPCODE
- /* 32...46 are unused */
+%term VANext=VANextOPCODE
+%term VAArg=VAArgOPCODE
+ /* 33...46 are unused */
/*
* The foll. values should match the constants in InstrForest.h
*/
reg: Shl(reg,reg) = 62 (20); /* 1 for issue restrictions */
reg: Shr(reg,reg) = 63 (20); /* 1 for issue restrictions */
reg: Phi(reg,reg) = 64 (0);
-reg: VaArg(reg) = 65 (40); /* load from stack then incr */
+reg: VANext(reg) = 65 (40); /* incr stack slot pointer */
+reg: VAArg(reg) = 66 (40); /* get a vararg */
/*
* Finally, leaf nodes of expression trees.
{
switch (iid) {
case LLVMIntrinsic::va_start: {
+ // FIXME: this needs to be updated!
+ abort();
+
// Get the address of the first vararg value on stack and copy it to
// the argument of va_start(va_list* ap).
bool ignore;
return true; // no-op on Sparc
case LLVMIntrinsic::va_copy:
+ // FIXME: this needs to be updated!
+ abort();
+
// Simple copy of current va_list (arg2) to new va_list (arg1)
mvec.push_back(BuildMI(V9::ORr, 3).
addMReg(target.getRegInfo().getZeroRegNum()).
case 64: // reg: Phi(reg,reg)
break; // don't forward the value
- case 65: // reg: VaArg(reg): the va_arg instruction
+ case 65: // reg: VANext(reg): the va_next instruction
+ case 66: // reg: VAArg (reg): the va_arg instruction
{
+ abort(); // FIXME: This is incorrect!
+#if 0
// Use value initialized by va_start as pointer to args on the stack.
// Load argument via current pointer value, then increment pointer.
int argSize = target.getFrameInfo().getSizeOfEachArgOnStack();
mvec.push_back(BuildMI(V9::ADDi, 3).addReg(vaArgI->getOperand(0)).
addSImm(argSize).addRegDef(vaArgI->getOperand(0)));
break;
+#endif
}
case 71: // reg: VReg