diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 83e740d18cb0f3c244ad186bdb9653037edb55f2..3ae63049b92bb4329f79128f30b4663f8d7c5a05 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,7 @@
+2009-11-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+	* src/compatibility-c++0x.cc (_Fnv_hash<4>, _Fnv_hash<8>): Add.
+
 2009-11-19  Benjamin Kosnik  <bkoz@redhat.com>
 
 	* src/pool_allocator.cc: Adjust catch blocks.
diff --git a/libstdc++-v3/src/compatibility-c++0x.cc b/libstdc++-v3/src/compatibility-c++0x.cc
index 0e92135d403b254104b6286112b983e0d3d4b9ea..df28ecae35855bdad917b09e176072debed09dac 100644
--- a/libstdc++-v3/src/compatibility-c++0x.cc
+++ b/libstdc++-v3/src/compatibility-c++0x.cc
@@ -57,6 +57,39 @@ namespace std
       }
     };
 
+  template<>
+    struct _Fnv_hash<4>
+    {
+      static size_t
+      hash(const char* __first, size_t __length)
+      {
+	size_t __result = static_cast<size_t>(2166136261UL);
+	for (; __length > 0; --__length)
+	  {
+	    __result ^= static_cast<size_t>(*__first++);
+	    __result *= static_cast<size_t>(16777619UL);
+	  }
+	return __result;
+      }
+    };
+  
+  template<>
+    struct _Fnv_hash<8>
+    {
+      static size_t
+      hash(const char* __first, size_t __length)
+      {
+	size_t __result =
+	  static_cast<size_t>(14695981039346656037ULL);
+	for (; __length > 0; --__length)
+	  {
+	    __result ^= static_cast<size_t>(*__first++);
+	    __result *= static_cast<size_t>(1099511628211ULL);
+	  }
+	return __result;
+      }
+    };
+
 #include "hash.cc"
 
   template<>