Description: Fixup pool and add sparc support
Nixed from gentoo

--- webkit-1.2.1.orig/JavaScriptCore/wtf/ListHashSet.h
+++ webkit-1.2.1/JavaScriptCore/wtf/ListHashSet.h
@@ -127,7 +127,7 @@ namespace WTF {
             : m_freeList(pool())
             , m_isDoneWithInitialFreeList(false)
         { 
-            memset(m_pool.pool, 0, sizeof(m_pool.pool));
+            memset(m_pool, 0, sizeof(m_pool));
         }
 
         Node* allocate()
@@ -171,7 +171,7 @@ namespace WTF {
         }
 
     private:
-        Node* pool() { return reinterpret_cast<Node*>(m_pool.pool); }
+        Node* pool() { return reinterpret_cast<Node*>(m_pool); }
         Node* pastPool() { return pool() + m_poolSize; }
 
         bool inPool(Node* node)
@@ -182,10 +182,7 @@ namespace WTF {
         Node* m_freeList;
         bool m_isDoneWithInitialFreeList;
         static const size_t m_poolSize = 256;
-        union {
-            char pool[sizeof(Node) * m_poolSize];
-            double forAlignment;
-        } m_pool;
+        uint32_t m_pool[(sizeof(Node) * m_poolSize + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
     };
 
     template<typename ValueArg> struct ListHashSetNode {
--- webkit-1.2.1.orig/WebCore/platform/text/AtomicString.cpp
+++ webkit-1.2.1/WebCore/platform/text/AtomicString.cpp
@@ -103,9 +103,9 @@ static inline bool equal(StringImpl* str
     if (string->length() != length)
         return false;
 
+#if CPU(ARM) || CPU(SPARC) || CPU(SH4)
     // FIXME: perhaps we should have a more abstract macro that indicates when
     // going 4 bytes at a time is unsafe
-#if CPU(ARM) || CPU(SH4)
     const UChar* stringCharacters = string->characters();
     for (unsigned i = 0; i != length; ++i) {
         if (*stringCharacters++ != *characters++)
--- webkit-1.2.1.orig/WebCore/platform/text/StringHash.h
+++ webkit-1.2.1/WebCore/platform/text/StringHash.h
@@ -54,13 +54,13 @@ namespace WebCore {
 
             // FIXME: perhaps we should have a more abstract macro that indicates when
             // going 4 bytes at a time is unsafe
-#if CPU(ARM) || CPU(SH4)
+#if CPU(ARM) || CPU(SPARC) || CPU(SH4)
             const UChar* aChars = a->characters();
             const UChar* bChars = b->characters();
-            for (unsigned i = 0; i != aLength; ++i) {
+            for (unsigned i = 0; i != aLength; ++i)
                 if (*aChars++ != *bChars++)
                     return false;
-            }
+
             return true;
 #else
             /* Do it 4-bytes-at-a-time on architectures where it's safe */
