File indexing completed on 2024-05-12 04:39:44

0001 /*
0002     SPDX-FileCopyrightText: 2013 Vlas Puhov <vlas.puhov@mail.ru>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef REGISTERCONTROLLER_ARM_H
0008 #define REGISTERCONTROLLER_ARM_H
0009 
0010 
0011 #include "registercontroller.h"
0012 
0013 namespace KDevMI {
0014 class MIDebugSession;
0015 
0016 class RegisterController_Arm : public IRegisterController
0017 {
0018     Q_OBJECT
0019 
0020 public:
0021 
0022     explicit RegisterController_Arm(MIDebugSession* debugSession = nullptr, QObject* parent = nullptr);
0023 
0024     QVector<GroupsName> namesOfRegisterGroups() const override;
0025 
0026 public Q_SLOTS:
0027     void updateRegisters(const GroupsName& group = GroupsName()) override;
0028 
0029 protected:
0030     RegistersGroup registersFromGroup(const GroupsName& group) const override;
0031 
0032     QStringList registerNamesForGroup(const GroupsName& group) const override;
0033 
0034     void updateValuesForRegisters(RegistersGroup* registers) const override;
0035 
0036     void setRegisterValueForGroup(const GroupsName& group, const Register& reg) override;
0037 
0038     enum ArmRegisterGroups {General, Flags, VFP_single, VFP_double, VFP_quad, LAST_REGISTER};
0039 
0040     GroupsName enumToGroupName(ArmRegisterGroups group) const;
0041     //None of functions below checks value for validity, if value is invalid updateRegistres() will restore the previous state.
0042 
0043     void setVFPS_Register(const Register& reg);
0044     void setVFPD_Register(const Register& reg);
0045     void setVFPQ_Register(const Register& reg);
0046 
0047     static QVector<QStringList> m_registerNames;
0048 
0049 private:
0050     void initRegisterNames();
0051 
0052     static FlagRegister m_cpsr;
0053 
0054     bool m_registerNamesInitialized = false;
0055 };
0056 
0057 } // end of namespace KDevMI
0058 
0059 #endif // REGISTERCONTROLLER_ARM_H