[cfe-commits] r42943 - in /cfe/trunk: Basic/TargetInfo.cpp Driver/Targets.cpp include/clang/Basic/TargetInfo.h

Anders Carlsson andersca at mac.com
Fri Oct 12 17:45:48 PDT 2007


Author: andersca
Date: Fri Oct 12 19:45:48 2007
New Revision: 42943

URL: http://llvm.org/viewvc/llvm-project?rev=42943&view=rev
Log:
Add __builtin_va_list definitions for x86_64 and ppc64.

Modified:
    cfe/trunk/Basic/TargetInfo.cpp
    cfe/trunk/Driver/Targets.cpp
    cfe/trunk/include/clang/Basic/TargetInfo.h

Modified: cfe/trunk/Basic/TargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Basic/TargetInfo.cpp?rev=42943&r1=42942&r2=42943&view=diff

==============================================================================
--- cfe/trunk/Basic/TargetInfo.cpp (original)
+++ cfe/trunk/Basic/TargetInfo.cpp Fri Oct 12 19:45:48 2007
@@ -260,4 +260,9 @@
   }
 }
 
+/// getVAListDeclaration - Return the declaration to use for
+/// __builtin_va_list, which is target-specific.
+const char *TargetInfo::getVAListDeclaration() const {
+  return PrimaryTarget->getVAListDeclaration();
+}
 

Modified: cfe/trunk/Driver/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/Targets.cpp?rev=42943&r1=42942&r2=42943&view=diff

==============================================================================
--- cfe/trunk/Driver/Targets.cpp (original)
+++ cfe/trunk/Driver/Targets.cpp Fri Oct 12 19:45:48 2007
@@ -279,6 +279,32 @@
   Define(Defs, "__LDBL_MIN__", "3.36210314311209350626e-4932L");
 }
 
+static const char* getI386VAListDeclaration() {
+  return "typedef char* __builtin_va_list;";
+}
+
+static const char* getX86_64VAListDeclaration() {
+  return 
+    "typedef struct __va_list_tag {"
+    "  unsigned gp_offset;"
+    "  unsigned fp_offset;"
+    "  void* overflow_arg_area;"
+    "  void* reg_save_area;"
+    "} __builtin_va_list[1];";
+}
+
+static const char* getPPCVAListDeclaration() {
+  return 
+    "typedef struct __va_list_tag {"
+    "  unsigned char gpr;"
+    "  unsigned char fpr;"
+    "  unsigned short reserved;"
+    "  void* overflow_arg_area;"
+    "  void* reg_save_area;"
+    "} __builtin_va_list[1];";
+}
+
+
 /// PPC builtin info.
 namespace PPC {
   enum {
@@ -336,6 +362,9 @@
                                  unsigned &NumRecords) const {
     PPC::getBuiltins(Records, NumRecords);
   }
+  virtual const char *getVAListDeclaration() const {
+    return getPPCVAListDeclaration();
+  }  
 };
 } // end anonymous namespace.
 
@@ -350,6 +379,9 @@
                                  unsigned &NumRecords) const {
     PPC::getBuiltins(Records, NumRecords);
   }
+  virtual const char *getVAListDeclaration() const {
+    return getPPCVAListDeclaration();
+  }  
 };
 } // end anonymous namespace.
 
@@ -364,6 +396,10 @@
                                  unsigned &NumRecords) const {
     X86::getBuiltins(Records, NumRecords);
   }
+  
+  virtual const char *getVAListDeclaration() const {
+    return getI386VAListDeclaration();
+  }
 };
 } // end anonymous namespace.
 
@@ -378,6 +414,9 @@
                                  unsigned &NumRecords) const {
     X86::getBuiltins(Records, NumRecords);
   }
+  virtual const char *getVAListDeclaration() const {
+    return getX86_64VAListDeclaration();
+  }  
 };
 } // end anonymous namespace.
 
@@ -398,6 +437,9 @@
                                  unsigned &NumRecords) const {
     X86::getBuiltins(Records, NumRecords);
   }
+  virtual const char *getVAListDeclaration() const {
+    return getI386VAListDeclaration();
+  }  
 };
 } // end anonymous namespace.
 

Modified: cfe/trunk/include/clang/Basic/TargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=42943&r1=42942&r2=42943&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/TargetInfo.h (original)
+++ cfe/trunk/include/clang/Basic/TargetInfo.h Fri Oct 12 19:45:48 2007
@@ -185,10 +185,8 @@
 
   /// getVAListDeclaration - Return the declaration to use for
   /// __builtin_va_list, which is target-specific.
-  const char *getVAListDeclaration() const {
-    // FIXME: dispatch to target impl.
-    return "typedef char* __builtin_va_list;";
-  }
+  const char *getVAListDeclaration() const;
+
   ///===---- Some helper methods ------------------------------------------===//
 
   unsigned getCharWidth(SourceLocation Loc) {
@@ -244,6 +242,10 @@
   /// "#define X Y\n".
   virtual void getTargetDefines(std::vector<char> &Defines) const = 0;
 
+  /// getVAListDeclaration - Return the declaration to use for
+  /// __builtin_va_list, which is target-specific.
+  virtual const char *getVAListDeclaration() const = 0;
+  
   /// getWCharWidth - Return the size of wchar_t in bits.
   ///
   void getWCharInfo(unsigned &Size, unsigned &Align) const {





More information about the cfe-commits mailing list