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