xref: /llvm-project/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_loongarch64.h (revision 5ea1c873647c02c80556594b9738de6768d98bf1)
1 //===-- RegisterInfoPOSIX_loongarch64.h -------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERINFOPOSIX_LOONGARCH64_H
10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERINFOPOSIX_LOONGARCH64_H
11 
12 #include "RegisterInfoAndSetInterface.h"
13 #include "lldb/Target/RegisterContext.h"
14 #include "lldb/lldb-private.h"
15 #include <map>
16 
17 class RegisterInfoPOSIX_loongarch64
18     : public lldb_private::RegisterInfoAndSetInterface {
19 public:
20   static const lldb_private::RegisterInfo *
21   GetRegisterInfoPtr(const lldb_private::ArchSpec &target_arch);
22   static uint32_t
23   GetRegisterInfoCount(const lldb_private::ArchSpec &target_arch);
24 
25 public:
26   enum RegSetKind {
27     GPRegSet,
28     FPRegSet,
29     LSXRegSet,
30     LASXRegSet,
31   };
32 
33   struct GPR {
34     uint64_t gpr[32];
35 
36     uint64_t orig_a0;
37     uint64_t csr_era;
38     uint64_t csr_badv;
39     uint64_t reserved[10];
40   };
41 
42   struct FPR {
43     uint64_t fpr[32];
44     uint64_t fcc;
45     uint32_t fcsr;
46   };
47 
48   /* 32 registers, 128 bits width per register. */
49   struct LSX {
50     uint64_t vr[32 * 2];
51   };
52 
53   /* 32 registers, 256 bits width per register. */
54   struct LASX {
55     uint64_t xr[32 * 4];
56   };
57 
58   RegisterInfoPOSIX_loongarch64(const lldb_private::ArchSpec &target_arch,
59                                 lldb_private::Flags flags);
60 
61   size_t GetGPRSize() const override;
62 
63   size_t GetFPRSize() const override;
64 
65   const lldb_private::RegisterInfo *GetRegisterInfo() const override;
66 
67   uint32_t GetRegisterCount() const override;
68 
69   const lldb_private::RegisterSet *
70   GetRegisterSet(size_t reg_set) const override;
71 
72   size_t GetRegisterSetCount() const override;
73 
74   size_t GetRegisterSetFromRegisterIndex(uint32_t reg_index) const override;
75 
76 private:
77   const lldb_private::RegisterInfo *m_register_info_p;
78   uint32_t m_register_info_count;
79 };
80 
81 #endif
82