arm, base: Generalize and move the BitUnion hash struct.
authorGabe Black <gabeblack@google.com>
Mon, 8 Jan 2018 03:44:55 +0000 (19:44 -0800)
committerGabe Black <gabeblack@google.com>
Sat, 20 Jan 2018 07:30:26 +0000 (07:30 +0000)
The ARM types.hh file defined an STL style hash structure to operate
on the ExtMachInst, but it referred to the underlying storage type
using internal typedefs in the BitUnion types. To avoid having to do
that, this change adds a hash structure to bitunion.hh which will work
on any BitUnion, and gets rid of the ARM ExtMachInst version.

Change-Id: I7c1c84d61b59061fec98abaaeab6becd06537dee
Reviewed-on: https://gem5-review.googlesource.com/7204
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/arch/arm/types.hh
src/base/bitunion.hh

index 0611232c426978ff95d664e3c48e9af0daaec3fb..d4e6ec0dbe25c57954ac82223dd8bc6c78f8355b 100644 (file)
@@ -737,18 +737,4 @@ namespace ArmISA
 
 } // namespace ArmISA
 
-namespace std {
-
-template<>
-struct hash<ArmISA::ExtMachInst> :
-        public hash<ArmISA::ExtMachInst::__StorageType> {
-
-    size_t operator()(const ArmISA::ExtMachInst &emi) const {
-        return hash<ArmISA::ExtMachInst::__StorageType>::operator()(emi);
-    }
-
-};
-
-}
-
 #endif
index 718a06838a753e2969a0ab84840edd3a1fa67545..10fa00508452c11c645d9b42b43659b471489ecf 100644 (file)
@@ -388,4 +388,20 @@ namespace BitfieldBackend
 template <typename T>
 using BitUnionBaseType = typename BitfieldBackend::BitUnionBaseType<T>::Type;
 
+namespace std
+{
+    template <typename T>
+    struct hash;
+
+    template <typename T>
+    struct hash<BitUnionType<T> > : public hash<BitUnionBaseType<T> >
+    {
+        size_t
+        operator() (const BitUnionType<T> &val) const
+        {
+            return hash<BitUnionBaseType<T> >::operator()(val);
+        }
+    };
+}
+
 #endif // __BASE_BITUNION_HH__