1 //===-- RegisterInfos_mips.h -----------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===---------------------------------------------------------------------===//
9 
10 // C Includes
11 #include <stddef.h>
12 
13 // C++ Includes
14 // Other libraries and framework includes
15 #include "llvm/Support/Compiler.h"
16 
17 // Project includes
18 
19 #ifdef DECLARE_REGISTER_INFOS_MIPS_STRUCT
20 
21 // Computes the offset of the given GPR in the user data area.
22 #define GPR_OFFSET(regname) \
23     (LLVM_EXTENSION offsetof(UserArea, gpr) + \
24      LLVM_EXTENSION offsetof(GPR_linux_mips, regname))
25 
26 // Computes the offset of the given FPR in the extended data area.
27 #define FPR_OFFSET(regname)  \
28      (LLVM_EXTENSION offsetof(UserArea, fpr) + \
29       LLVM_EXTENSION offsetof(FPR_linux_mips, regname))
30 
31 // Computes the offset of the given MSA in the extended data area.
32 #define MSA_OFFSET(regname)  \
33      (LLVM_EXTENSION offsetof(UserArea, msa) + \
34       LLVM_EXTENSION offsetof(MSA_linux_mips, regname))
35 
36 // Note that the size and offset will be updated by platform-specific classes.
37 #define DEFINE_GPR(reg, alt, kind1, kind2, kind3, kind4)            \
38     { #reg, alt, sizeof(((GPR_linux_mips*)NULL)->reg) / 2, GPR_OFFSET(reg), eEncodingUint,  \
39       eFormatHex, { kind1, kind2, kind3, kind4, gpr_##reg##_mips }, NULL, NULL }
40 
41 #define DEFINE_FPR(reg, alt, kind1, kind2, kind3, kind4)           \
42     { #reg, alt, sizeof(((FPR_linux_mips*)NULL)->reg), FPR_OFFSET(reg), eEncodingUint,   \
43       eFormatHex, { kind1, kind2, kind3, kind4, fpr_##reg##_mips }, NULL, NULL }
44 
45 #define DEFINE_MSA(reg, alt, kind1, kind2, kind3, kind4)    \
46     { #reg, alt, sizeof(((MSA_linux_mips*)0)->reg), MSA_OFFSET(reg), eEncodingVector,   \
47       eFormatVectorOfUInt8, { kind1, kind2, kind3, kind4, msa_##reg##_mips }, NULL, NULL }
48 
49 #define DEFINE_MSA_INFO(reg, alt, kind1, kind2, kind3, kind4)    \
50     { #reg, alt, sizeof(((MSA_linux_mips*)0)->reg), MSA_OFFSET(reg), eEncodingUint, \
51       eFormatHex, { kind1, kind2, kind3, kind4, msa_##reg##_mips }, NULL, NULL }
52 
53 // RegisterKind: EH_Frame, DWARF, Generic, Procss Plugin, LLDB
54 
55 static RegisterInfo
56 g_register_infos_mips[] =
57 {
58     DEFINE_GPR (zero,     "zero",     dwarf_zero_mips,      dwarf_zero_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
59     DEFINE_GPR (r1,       "at",       dwarf_r1_mips,        dwarf_r1_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
60     DEFINE_GPR (r2,       nullptr,    dwarf_r2_mips,        dwarf_r2_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
61     DEFINE_GPR (r3,       nullptr,    dwarf_r3_mips,        dwarf_r3_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
62     DEFINE_GPR (r4,       nullptr,    dwarf_r4_mips,        dwarf_r4_mips,    LLDB_REGNUM_GENERIC_ARG1,    LLDB_INVALID_REGNUM),
63     DEFINE_GPR (r5,       nullptr,    dwarf_r5_mips,        dwarf_r5_mips,    LLDB_REGNUM_GENERIC_ARG2,    LLDB_INVALID_REGNUM),
64     DEFINE_GPR (r6,       nullptr,    dwarf_r6_mips,        dwarf_r6_mips,    LLDB_REGNUM_GENERIC_ARG3,    LLDB_INVALID_REGNUM),
65     DEFINE_GPR (r7,       nullptr,    dwarf_r7_mips,        dwarf_r7_mips,    LLDB_REGNUM_GENERIC_ARG4,    LLDB_INVALID_REGNUM),
66     DEFINE_GPR (r8,       nullptr,    dwarf_r8_mips,        dwarf_r8_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
67     DEFINE_GPR (r9,       nullptr,    dwarf_r9_mips,        dwarf_r9_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
68     DEFINE_GPR (r10,      nullptr,    dwarf_r10_mips,       dwarf_r10_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
69     DEFINE_GPR (r11,      nullptr,    dwarf_r11_mips,       dwarf_r11_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
70     DEFINE_GPR (r12,      nullptr,    dwarf_r12_mips,       dwarf_r12_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
71     DEFINE_GPR (r13,      nullptr,    dwarf_r13_mips,       dwarf_r13_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
72     DEFINE_GPR (r14,      nullptr,    dwarf_r14_mips,       dwarf_r14_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
73     DEFINE_GPR (r15,      nullptr,    dwarf_r15_mips,       dwarf_r15_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
74     DEFINE_GPR (r16,      nullptr,    dwarf_r16_mips,       dwarf_r16_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
75     DEFINE_GPR (r17,      nullptr,    dwarf_r17_mips,       dwarf_r17_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
76     DEFINE_GPR (r18,      nullptr,    dwarf_r18_mips,       dwarf_r18_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
77     DEFINE_GPR (r19,      nullptr,    dwarf_r19_mips,       dwarf_r19_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
78     DEFINE_GPR (r20,      nullptr,    dwarf_r20_mips,       dwarf_r20_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
79     DEFINE_GPR (r21,      nullptr,    dwarf_r21_mips,       dwarf_r21_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
80     DEFINE_GPR (r22,      nullptr,    dwarf_r22_mips,       dwarf_r22_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
81     DEFINE_GPR (r23,      nullptr,    dwarf_r23_mips,       dwarf_r23_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
82     DEFINE_GPR (r24,      nullptr,    dwarf_r24_mips,       dwarf_r24_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
83     DEFINE_GPR (r25,      nullptr,    dwarf_r25_mips,       dwarf_r25_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
84     DEFINE_GPR (r26,      nullptr,    dwarf_r26_mips,       dwarf_r26_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
85     DEFINE_GPR (r27,      nullptr,    dwarf_r27_mips,       dwarf_r27_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
86     DEFINE_GPR (gp,       "gp",       dwarf_gp_mips,        dwarf_gp_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
87     DEFINE_GPR (sp,       "sp",       dwarf_sp_mips,        dwarf_sp_mips,    LLDB_REGNUM_GENERIC_SP, LLDB_INVALID_REGNUM),
88     DEFINE_GPR (r30,      "fp",       dwarf_r30_mips,       dwarf_r30_mips,   LLDB_REGNUM_GENERIC_FP, LLDB_INVALID_REGNUM),
89     DEFINE_GPR (ra,       "ra",       dwarf_ra_mips,        dwarf_ra_mips,    LLDB_REGNUM_GENERIC_RA, LLDB_INVALID_REGNUM),
90     DEFINE_GPR (sr,   "status",       dwarf_sr_mips,        dwarf_sr_mips,    LLDB_REGNUM_GENERIC_FLAGS,    LLDB_INVALID_REGNUM),
91     DEFINE_GPR (mullo,    nullptr,    dwarf_lo_mips,        dwarf_lo_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
92     DEFINE_GPR (mulhi,    nullptr,    dwarf_hi_mips,        dwarf_hi_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
93     DEFINE_GPR (badvaddr, nullptr,    dwarf_bad_mips,        dwarf_bad_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
94     DEFINE_GPR (cause,    nullptr,    dwarf_cause_mips,        dwarf_cause_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
95     DEFINE_GPR (pc,       nullptr,    dwarf_pc_mips,        dwarf_pc_mips,    LLDB_REGNUM_GENERIC_PC, LLDB_INVALID_REGNUM),
96     DEFINE_GPR (config5,    nullptr,    dwarf_config5_mips,        dwarf_config5_mips,    LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
97     DEFINE_FPR (f0,    nullptr,    dwarf_f0_mips,       dwarf_f0_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
98     DEFINE_FPR (f1,    nullptr,    dwarf_f1_mips,       dwarf_f1_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
99     DEFINE_FPR (f2,    nullptr,    dwarf_f2_mips,       dwarf_f2_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
100     DEFINE_FPR (f3,    nullptr,    dwarf_f3_mips,       dwarf_f3_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
101     DEFINE_FPR (f4,    nullptr,    dwarf_f4_mips,       dwarf_f4_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
102     DEFINE_FPR (f5,    nullptr,    dwarf_f5_mips,       dwarf_f5_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
103     DEFINE_FPR (f6,    nullptr,    dwarf_f6_mips,       dwarf_f6_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
104     DEFINE_FPR (f7,    nullptr,    dwarf_f7_mips,       dwarf_f7_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
105     DEFINE_FPR (f8,    nullptr,    dwarf_f8_mips,       dwarf_f8_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
106     DEFINE_FPR (f9,    nullptr,    dwarf_f9_mips,       dwarf_f9_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
107     DEFINE_FPR (f10,   nullptr,    dwarf_f10_mips,      dwarf_f10_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
108     DEFINE_FPR (f11,   nullptr,    dwarf_f11_mips,      dwarf_f11_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
109     DEFINE_FPR (f12,   nullptr,    dwarf_f12_mips,      dwarf_f12_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
110     DEFINE_FPR (f13,   nullptr,    dwarf_f13_mips,      dwarf_f13_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
111     DEFINE_FPR (f14,   nullptr,    dwarf_f14_mips,      dwarf_f14_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
112     DEFINE_FPR (f15,   nullptr,    dwarf_f15_mips,      dwarf_f15_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
113     DEFINE_FPR (f16,   nullptr,    dwarf_f16_mips,      dwarf_f16_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
114     DEFINE_FPR (f17,   nullptr,    dwarf_f17_mips,      dwarf_f17_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
115     DEFINE_FPR (f18,   nullptr,    dwarf_f18_mips,      dwarf_f18_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
116     DEFINE_FPR (f19,   nullptr,    dwarf_f19_mips,      dwarf_f19_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
117     DEFINE_FPR (f20,   nullptr,    dwarf_f20_mips,      dwarf_f20_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
118     DEFINE_FPR (f21,   nullptr,    dwarf_f21_mips,      dwarf_f21_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
119     DEFINE_FPR (f22,   nullptr,    dwarf_f22_mips,      dwarf_f22_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
120     DEFINE_FPR (f23,   nullptr,    dwarf_f23_mips,      dwarf_f23_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
121     DEFINE_FPR (f24,   nullptr,    dwarf_f24_mips,      dwarf_f24_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
122     DEFINE_FPR (f25,   nullptr,    dwarf_f25_mips,      dwarf_f25_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
123     DEFINE_FPR (f26,   nullptr,    dwarf_f26_mips,      dwarf_f26_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
124     DEFINE_FPR (f27,   nullptr,    dwarf_f27_mips,      dwarf_f27_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
125     DEFINE_FPR (f28,   nullptr,    dwarf_f28_mips,      dwarf_f28_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
126     DEFINE_FPR (f29,   nullptr,    dwarf_f29_mips,      dwarf_f29_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
127     DEFINE_FPR (f30,   nullptr,    dwarf_f30_mips,      dwarf_f30_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
128     DEFINE_FPR (f31,   nullptr,    dwarf_f31_mips,      dwarf_f31_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
129     DEFINE_FPR (fcsr,  nullptr,    dwarf_fcsr_mips,     dwarf_fcsr_mips, LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
130     DEFINE_FPR (fir,   nullptr,    dwarf_fir_mips,      dwarf_fir_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
131     DEFINE_FPR (config5,   nullptr,    dwarf_config5_mips,      dwarf_config5_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
132     DEFINE_MSA (w0,    nullptr,    dwarf_w0_mips,       dwarf_w0_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
133     DEFINE_MSA (w1,    nullptr,    dwarf_w1_mips,       dwarf_w1_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
134     DEFINE_MSA (w2,    nullptr,    dwarf_w2_mips,       dwarf_w2_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
135     DEFINE_MSA (w3,    nullptr,    dwarf_w3_mips,       dwarf_w3_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
136     DEFINE_MSA (w4,    nullptr,    dwarf_w4_mips,       dwarf_w4_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
137     DEFINE_MSA (w5,    nullptr,    dwarf_w5_mips,       dwarf_w5_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
138     DEFINE_MSA (w6,    nullptr,    dwarf_w6_mips,       dwarf_w6_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
139     DEFINE_MSA (w7,    nullptr,    dwarf_w7_mips,       dwarf_w7_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
140     DEFINE_MSA (w8,    nullptr,    dwarf_w8_mips,       dwarf_w8_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
141     DEFINE_MSA (w9,    nullptr,    dwarf_w9_mips,       dwarf_w9_mips,   LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
142     DEFINE_MSA (w10,   nullptr,    dwarf_w10_mips,      dwarf_w10_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
143     DEFINE_MSA (w11,   nullptr,    dwarf_w11_mips,      dwarf_w11_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
144     DEFINE_MSA (w12,   nullptr,    dwarf_w12_mips,      dwarf_w12_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
145     DEFINE_MSA (w13,   nullptr,    dwarf_w13_mips,      dwarf_w13_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
146     DEFINE_MSA (w14,   nullptr,    dwarf_w14_mips,      dwarf_w14_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
147     DEFINE_MSA (w15,   nullptr,    dwarf_w15_mips,      dwarf_w15_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
148     DEFINE_MSA (w16,   nullptr,    dwarf_w16_mips,      dwarf_w16_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
149     DEFINE_MSA (w17,   nullptr,    dwarf_w17_mips,      dwarf_w17_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
150     DEFINE_MSA (w18,   nullptr,    dwarf_w18_mips,      dwarf_w18_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
151     DEFINE_MSA (w19,   nullptr,    dwarf_w19_mips,      dwarf_w19_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
152     DEFINE_MSA (w20,   nullptr,    dwarf_w10_mips,      dwarf_w20_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
153     DEFINE_MSA (w21,   nullptr,    dwarf_w21_mips,      dwarf_w21_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
154     DEFINE_MSA (w22,   nullptr,    dwarf_w22_mips,      dwarf_w22_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
155     DEFINE_MSA (w23,   nullptr,    dwarf_w23_mips,      dwarf_w23_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
156     DEFINE_MSA (w24,   nullptr,    dwarf_w24_mips,      dwarf_w24_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
157     DEFINE_MSA (w25,   nullptr,    dwarf_w25_mips,      dwarf_w25_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
158     DEFINE_MSA (w26,   nullptr,    dwarf_w26_mips,      dwarf_w26_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
159     DEFINE_MSA (w27,   nullptr,    dwarf_w27_mips,      dwarf_w27_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
160     DEFINE_MSA (w28,   nullptr,    dwarf_w28_mips,      dwarf_w28_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
161     DEFINE_MSA (w29,   nullptr,    dwarf_w29_mips,      dwarf_w29_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
162     DEFINE_MSA (w30,   nullptr,    dwarf_w30_mips,      dwarf_w30_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
163     DEFINE_MSA (w31,   nullptr,    dwarf_w31_mips,      dwarf_w31_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
164     DEFINE_MSA_INFO (mcsr,  nullptr,    dwarf_mcsr_mips,     dwarf_mcsr_mips, LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
165     DEFINE_MSA_INFO (mir,   nullptr,    dwarf_mir_mips,      dwarf_mir_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
166     DEFINE_MSA_INFO (fcsr,  nullptr,    dwarf_fcsr_mips,     dwarf_fcsr_mips, LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
167     DEFINE_MSA_INFO (fir,   nullptr,    dwarf_fir_mips,      dwarf_fir_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM),
168     DEFINE_MSA_INFO (config5, nullptr,    dwarf_config5_mips,      dwarf_config5_mips,  LLDB_INVALID_REGNUM,    LLDB_INVALID_REGNUM)
169 };
170 
171 static_assert((sizeof(g_register_infos_mips) / sizeof(g_register_infos_mips[0])) == k_num_registers_mips,
172     "g_register_infos_mips has wrong number of register infos");
173 
174 #undef GPR_OFFSET
175 #undef FPR_OFFSET
176 #undef MSA_OFFSET
177 #undef DEFINE_GPR
178 #undef DEFINE_FPR
179 #undef DEFINE_MSA
180 #undef DEFINE_MSA_INFO
181 
182 #endif // DECLARE_REGISTER_INFOS_MIPS_STRUCT
183