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 <vector>
113e699d41SVirgile Bello #include "RegisterContextPOSIX_mips64.h"
123e699d41SVirgile Bello #include "RegisterContextFreeBSD_mips64.h"
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
183e699d41SVirgile Bello typedef struct _GPR
193e699d41SVirgile Bello {
203e699d41SVirgile Bello     uint64_t zero;
213e699d41SVirgile Bello     uint64_t r1;
223e699d41SVirgile Bello     uint64_t r2;
233e699d41SVirgile Bello     uint64_t r3;
243e699d41SVirgile Bello     uint64_t r4;
253e699d41SVirgile Bello     uint64_t r5;
263e699d41SVirgile Bello     uint64_t r6;
273e699d41SVirgile Bello     uint64_t r7;
283e699d41SVirgile Bello     uint64_t r8;
293e699d41SVirgile Bello     uint64_t r9;
303e699d41SVirgile Bello     uint64_t r10;
313e699d41SVirgile Bello     uint64_t r11;
323e699d41SVirgile Bello     uint64_t r12;
333e699d41SVirgile Bello     uint64_t r13;
343e699d41SVirgile Bello     uint64_t r14;
353e699d41SVirgile Bello     uint64_t r15;
363e699d41SVirgile Bello     uint64_t r16;
373e699d41SVirgile Bello     uint64_t r17;
383e699d41SVirgile Bello     uint64_t r18;
393e699d41SVirgile Bello     uint64_t r19;
403e699d41SVirgile Bello     uint64_t r20;
413e699d41SVirgile Bello     uint64_t r21;
423e699d41SVirgile Bello     uint64_t r22;
433e699d41SVirgile Bello     uint64_t r23;
443e699d41SVirgile Bello     uint64_t r24;
453e699d41SVirgile Bello     uint64_t r25;
463e699d41SVirgile Bello     uint64_t r26;
473e699d41SVirgile Bello     uint64_t r27;
483e699d41SVirgile Bello     uint64_t gp;
493e699d41SVirgile Bello     uint64_t sp;
503e699d41SVirgile Bello     uint64_t r30;
513e699d41SVirgile Bello     uint64_t ra;
523e699d41SVirgile Bello     uint64_t sr;
533e699d41SVirgile Bello     uint64_t mullo;
543e699d41SVirgile Bello     uint64_t mulhi;
553e699d41SVirgile Bello     uint64_t badvaddr;
563e699d41SVirgile Bello     uint64_t cause;
573e699d41SVirgile Bello     uint64_t pc;
583e699d41SVirgile Bello     uint64_t ic;
593e699d41SVirgile Bello     uint64_t dummy;
603e699d41SVirgile Bello } GPR;
613e699d41SVirgile Bello 
623e699d41SVirgile Bello //---------------------------------------------------------------------------
633e699d41SVirgile Bello // Include RegisterInfos_mips64 to declare our g_register_infos_mips64 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 
693e699d41SVirgile Bello RegisterContextFreeBSD_mips64::RegisterContextFreeBSD_mips64(const ArchSpec &target_arch) :
703e699d41SVirgile Bello     RegisterInfoInterface(target_arch)
713e699d41SVirgile Bello {
723e699d41SVirgile Bello }
733e699d41SVirgile Bello 
743e699d41SVirgile Bello size_t
75*af245d11STodd Fiala RegisterContextFreeBSD_mips64::GetGPRSize() const
763e699d41SVirgile Bello {
773e699d41SVirgile Bello     return sizeof(GPR);
783e699d41SVirgile Bello }
793e699d41SVirgile Bello 
803e699d41SVirgile Bello const RegisterInfo *
81*af245d11STodd Fiala RegisterContextFreeBSD_mips64::GetRegisterInfo() const
823e699d41SVirgile Bello {
833e699d41SVirgile Bello     assert (m_target_arch.GetCore() == ArchSpec::eCore_mips64);
843e699d41SVirgile Bello     return g_register_infos_mips64;
853e699d41SVirgile Bello }
863e699d41SVirgile Bello 
87*af245d11STodd Fiala uint32_t
88*af245d11STodd Fiala RegisterContextFreeBSD_mips64::GetRegisterCount () const
89*af245d11STodd Fiala {
90*af245d11STodd Fiala     return static_cast<uint32_t> (sizeof (g_register_infos_mips64) / sizeof (g_register_infos_mips64 [0]));
91*af245d11STodd Fiala }
92*af245d11STodd Fiala 
93*af245d11STodd Fiala 
94