13e699d41SVirgile Bello //===-- RegisterContextFreeBSD_mips64.cpp ----------------------*- C++ -*-===//
23e699d41SVirgile Bello //
33e699d41SVirgile Bello //                     The LLVM Compiler Infrastructure
43e699d41SVirgile Bello //
53e699d41SVirgile Bello // This file is distributed under the University of Illinois Open Source
63e699d41SVirgile Bello // License. See LICENSE.TXT for details.
73e699d41SVirgile Bello //
83e699d41SVirgile Bello //===---------------------------------------------------------------------===//
93e699d41SVirgile Bello 
103e699d41SVirgile Bello #include "RegisterContextFreeBSD_mips64.h"
11*b9c1b51eSKate Stone #include "RegisterContextPOSIX_mips64.h"
12*b9c1b51eSKate Stone #include <vector>
133e699d41SVirgile Bello 
143e699d41SVirgile Bello using namespace lldb_private;
153e699d41SVirgile Bello using namespace lldb;
163e699d41SVirgile Bello 
173e699d41SVirgile Bello // http://svnweb.freebsd.org/base/head/sys/mips/include/regnum.h
18*b9c1b51eSKate Stone typedef struct _GPR {
193e699d41SVirgile Bello   uint64_t zero;
203e699d41SVirgile Bello   uint64_t r1;
213e699d41SVirgile Bello   uint64_t r2;
223e699d41SVirgile Bello   uint64_t r3;
233e699d41SVirgile Bello   uint64_t r4;
243e699d41SVirgile Bello   uint64_t r5;
253e699d41SVirgile Bello   uint64_t r6;
263e699d41SVirgile Bello   uint64_t r7;
273e699d41SVirgile Bello   uint64_t r8;
283e699d41SVirgile Bello   uint64_t r9;
293e699d41SVirgile Bello   uint64_t r10;
303e699d41SVirgile Bello   uint64_t r11;
313e699d41SVirgile Bello   uint64_t r12;
323e699d41SVirgile Bello   uint64_t r13;
333e699d41SVirgile Bello   uint64_t r14;
343e699d41SVirgile Bello   uint64_t r15;
353e699d41SVirgile Bello   uint64_t r16;
363e699d41SVirgile Bello   uint64_t r17;
373e699d41SVirgile Bello   uint64_t r18;
383e699d41SVirgile Bello   uint64_t r19;
393e699d41SVirgile Bello   uint64_t r20;
403e699d41SVirgile Bello   uint64_t r21;
413e699d41SVirgile Bello   uint64_t r22;
423e699d41SVirgile Bello   uint64_t r23;
433e699d41SVirgile Bello   uint64_t r24;
443e699d41SVirgile Bello   uint64_t r25;
453e699d41SVirgile Bello   uint64_t r26;
463e699d41SVirgile Bello   uint64_t r27;
473e699d41SVirgile Bello   uint64_t gp;
483e699d41SVirgile Bello   uint64_t sp;
493e699d41SVirgile Bello   uint64_t r30;
503e699d41SVirgile Bello   uint64_t ra;
513e699d41SVirgile Bello   uint64_t sr;
523e699d41SVirgile Bello   uint64_t mullo;
533e699d41SVirgile Bello   uint64_t mulhi;
543e699d41SVirgile Bello   uint64_t badvaddr;
553e699d41SVirgile Bello   uint64_t cause;
563e699d41SVirgile Bello   uint64_t pc;
573e699d41SVirgile Bello   uint64_t ic;
583e699d41SVirgile Bello   uint64_t dummy;
59789da667SSagar Thakur } GPR_freebsd_mips;
603e699d41SVirgile Bello 
613e699d41SVirgile Bello //---------------------------------------------------------------------------
62*b9c1b51eSKate Stone // Include RegisterInfos_mips64 to declare our g_register_infos_mips64
63*b9c1b51eSKate Stone // structure.
643e699d41SVirgile Bello //---------------------------------------------------------------------------
653e699d41SVirgile Bello #define DECLARE_REGISTER_INFOS_MIPS64_STRUCT
663e699d41SVirgile Bello #include "RegisterInfos_mips64.h"
673e699d41SVirgile Bello #undef DECLARE_REGISTER_INFOS_MIPS64_STRUCT
683e699d41SVirgile Bello 
69*b9c1b51eSKate Stone RegisterContextFreeBSD_mips64::RegisterContextFreeBSD_mips64(
70*b9c1b51eSKate Stone     const ArchSpec &target_arch)
71*b9c1b51eSKate Stone     : RegisterInfoInterface(target_arch) {}
723e699d41SVirgile Bello 
73*b9c1b51eSKate Stone size_t RegisterContextFreeBSD_mips64::GetGPRSize() const {
74789da667SSagar Thakur   return sizeof(GPR_freebsd_mips);
753e699d41SVirgile Bello }
763e699d41SVirgile Bello 
77*b9c1b51eSKate Stone const RegisterInfo *RegisterContextFreeBSD_mips64::GetRegisterInfo() const {
783e699d41SVirgile Bello   assert(m_target_arch.GetCore() == ArchSpec::eCore_mips64);
793e699d41SVirgile Bello   return g_register_infos_mips64;
803e699d41SVirgile Bello }
813e699d41SVirgile Bello 
82*b9c1b51eSKate Stone uint32_t RegisterContextFreeBSD_mips64::GetRegisterCount() const {
83*b9c1b51eSKate Stone   return static_cast<uint32_t>(sizeof(g_register_infos_mips64) /
84*b9c1b51eSKate Stone                                sizeof(g_register_infos_mips64[0]));
85af245d11STodd Fiala }
86