From b7c7c41749a795f818db184445399100baa24eec Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 4 Jan 2015 19:49:48 -0500 Subject: [PATCH] Debugger: Add basic handling of SIMD to RegistersView. - If an SIMD register is detected, retrieve its value and format it as an array of 16-bit hex values. This will be extended to allow other format choices in a future commit. --- .../gui/team_window/RegistersView.cpp | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp b/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp index 9dafae441d..24c6ddcd1f 100644 --- a/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp @@ -133,12 +133,34 @@ public: return false; if (!fCpuState->GetRegisterValue(reg, value)) value.SetTo("?", B_VARIANT_DONT_COPY_DATA); + else if (reg->Format() == REGISTER_FORMAT_SIMD) + _FormatSIMDValue(reg, value); return true; default: return false; } } +private: + void _FormatSIMDValue(const Register* reg, BVariant& _value) + { + // for now, format SIMD registers as groups of 16-bit integer values. + // TODO: support multiple formats. + BString temp("{"); + uint16* data = (uint16*)_value.ToPointer(); + uint32 count = reg->BitSize() / (sizeof(uint16) * 8); + for (uint32 i = 0; i < count; i++) { + BString intFormat; + intFormat.SetToFormat("%#" B_PRIx16, data[i]); + temp += intFormat; + if (i < count - 1) + temp += ", "; + } + temp += "}"; + + _value.SetTo(temp); + } + private: Architecture* fArchitecture; CpuState* fCpuState;