summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-01-07 19:44:55 -0800
committerGabe Black <gabeblack@google.com>2018-01-20 07:30:26 +0000
commit6a98856affaaec393dfc6c8f67750c27858cc94c (patch)
tree48c53cd3b122a0d816c82026ad1d29b63d09ff78
parent039d914068f539f6463413351e7769518efb1e9e (diff)
downloadgem5-6a98856affaaec393dfc6c8f67750c27858cc94c.tar.xz
arm, base: Generalize and move the BitUnion hash struct.
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>
-rw-r--r--src/arch/arm/types.hh14
-rw-r--r--src/base/bitunion.hh16
2 files changed, 16 insertions, 14 deletions
diff --git a/src/arch/arm/types.hh b/src/arch/arm/types.hh
index 0611232c4..d4e6ec0db 100644
--- a/src/arch/arm/types.hh
+++ b/src/arch/arm/types.hh
@@ -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
diff --git a/src/base/bitunion.hh b/src/base/bitunion.hh
index 718a06838..10fa00508 100644
--- a/src/base/bitunion.hh
+++ b/src/base/bitunion.hh
@@ -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__