diff --git a/include/clang/AST/Attr.h b/include/clang/AST/Attr.h
index cd98ef1..f908105 100644
--- a/include/clang/AST/Attr.h
+++ b/include/clang/AST/Attr.h
@@ -52,6 +52,7 @@
     Overloadable, // Clang-specific
     Packed,
     Pure,
+    Regparm,
     Section,
     StdCall,
     TransparentUnion,
@@ -545,6 +546,15 @@
   static bool classof(const NoinlineAttr *A) { return true; }
 };
 
+class RegparmAttr : public Attr {
+public:
+  RegparmAttr() : Attr(Regparm) {}
+    
+  // Implement isa/cast/dyncast/etc.
+    
+  static bool classof(const Attr *A) { return A->getKind() == Regparm; }
+  static bool classof(const RegparmAttr *A) { return true; }
+};
 }  // end namespace clang
 
 #endif
diff --git a/include/clang/Parse/AttributeList.h b/include/clang/Parse/AttributeList.h
index 2f71e4d..2113965 100644
--- a/include/clang/Parse/AttributeList.h
+++ b/include/clang/Parse/AttributeList.h
@@ -73,6 +73,7 @@
     AT_overloadable,      // Clang-specific
     AT_packed,
     AT_pure,
+    AT_regparm,
     AT_section,
     AT_sentinel,
     AT_stdcall,
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 8a88051..0759abd 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -286,6 +286,9 @@
 
   if (D->getAttr<StdCallAttr>())
     F->setCallingConv(llvm::CallingConv::X86_StdCall);
+
+  if (D->getAttr<RegparmAttr>())
+    ErrorUnsupported(D, "regparm attribute");
 }
 
 /// SetFunctionAttributesForDefinition - Set function attributes
@@ -308,6 +311,9 @@
   
   if (D->getAttr<NoinlineAttr>())
     F->addFnAttr(llvm::Attribute::NoInline);
+  
+  if (D->getAttr<RegparmAttr>())
+    ErrorUnsupported(D, "regparm attribute");
 }
 
 void CodeGenModule::SetMethodAttributes(const ObjCMethodDecl *MD,
diff --git a/lib/Parse/AttributeList.cpp b/lib/Parse/AttributeList.cpp
index 9cee6ab..cd192c9 100644
--- a/lib/Parse/AttributeList.cpp
+++ b/lib/Parse/AttributeList.cpp
@@ -80,6 +80,7 @@
     if (!memcmp(Str, "nonnull", 7)) return AT_nonnull;
     if (!memcmp(Str, "nothrow", 7)) return AT_nothrow;
     if (!memcmp(Str, "objc_gc", 7)) return AT_objc_gc;
+    if (!memcmp(Str, "regparm", 7)) return AT_regparm;
     if (!memcmp(Str, "section", 7)) return AT_section;
     if (!memcmp(Str, "stdcall", 7)) return AT_stdcall;
     break;
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp
index 53c86eb..c8d98cf 100644
--- a/lib/Sema/SemaDeclAttr.cpp
+++ b/lib/Sema/SemaDeclAttr.cpp
@@ -1444,6 +1444,22 @@
   d->addAttr(::new (S.Context) NoinlineAttr());
 }
 
+static void HandleRegparmAttr(Decl *d, const AttributeList &Attr, Sema &S) {
+  // check the attribute arguments.
+  if (Attr.getNumArgs() != 1) {
+    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0;
+    return;
+  }
+  
+  if (!isFunctionOrMethod(d)) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
+    << "regparm" << 0 /*function*/;
+    return;
+  }
+  
+  d->addAttr(::new (S.Context) RegparmAttr());
+}
+
 //===----------------------------------------------------------------------===//
 // Top Level Sema Entry Points
 //===----------------------------------------------------------------------===//
@@ -1504,6 +1520,10 @@
   case AttributeList::AT_cleanup:     HandleCleanupAttr   (D, Attr, S); break;
   case AttributeList::AT_nodebug:     HandleNodebugAttr   (D, Attr, S); break;
   case AttributeList::AT_noinline:    HandleNoinlineAttr  (D, Attr, S); break;
+  case AttributeList::AT_regparm:
+    HandleRegparmAttr  (D, Attr, S);
+    S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
+    break;
   case AttributeList::IgnoredAttribute: 
     // Just ignore
     break;
