summaryrefslogtreecommitdiff
path: root/src/arch/arm/insts/static_inst.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/insts/static_inst.hh')
-rw-r--r--src/arch/arm/insts/static_inst.hh22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/arch/arm/insts/static_inst.hh b/src/arch/arm/insts/static_inst.hh
index 5a1993b86..e98f85a3b 100644
--- a/src/arch/arm/insts/static_inst.hh
+++ b/src/arch/arm/insts/static_inst.hh
@@ -251,6 +251,28 @@ class ArmStaticInst : public StaticInst
}
}
+ template<class T, class E>
+ static inline T
+ cSwap(T val, bool big)
+ {
+ const unsigned count = sizeof(T) / sizeof(E);
+ union {
+ T tVal;
+ E eVals[count];
+ } conv;
+ conv.tVal = htog(val);
+ if (big) {
+ for (unsigned i = 0; i < count; i++) {
+ conv.eVals[i] = gtobe(conv.eVals[i]);
+ }
+ } else {
+ for (unsigned i = 0; i < count; i++) {
+ conv.eVals[i] = gtole(conv.eVals[i]);
+ }
+ }
+ return gtoh(conv.tVal);
+ }
+
// Perform an interworking branch.
template<class XC>
static inline void