Update the sparc backend to at least compile correctly with the new varargs stuff...
authorChris Lattner <sabre@nondot.org>
Sat, 18 Oct 2003 05:55:58 +0000 (05:55 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 18 Oct 2003 05:55:58 +0000 (05:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9223 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/SparcV9.burg.in
lib/Target/SparcV9/SparcV9InstrSelection.cpp

index ccb39480cc6795dbca4a6b074f1147b15c077a00..dcef1112e556d5d56e76d74728452569d2717a60 100644 (file)
@@ -87,8 +87,9 @@ Xdefine PANIC         printf
 %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
      */
@@ -258,7 +259,8 @@ reg:        Call                    =   61 (20);    /* just ignore the operands! */
 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.
index 153bfc354c4a2025898a3bfc69f8c9459b7fd438..9633b3128d4abc892536dc314675d68a3bc8a104 100644 (file)
@@ -1408,6 +1408,9 @@ bool CodeGenIntrinsic(LLVMIntrinsic::ID iid, CallInst &callInstr,
 {
   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;
@@ -1426,6 +1429,9 @@ bool CodeGenIntrinsic(LLVMIntrinsic::ID iid, CallInst &callInstr,
     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()).
@@ -2829,8 +2835,11 @@ GetInstructionsByRule(InstructionNode* subtreeRoot,
       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();
@@ -2842,6 +2851,7 @@ GetInstructionsByRule(InstructionNode* subtreeRoot,
         mvec.push_back(BuildMI(V9::ADDi, 3).addReg(vaArgI->getOperand(0)).
                        addSImm(argSize).addRegDef(vaArgI->getOperand(0)));
         break;
+#endif
       }
       
       case 71: // reg:     VReg