stackwalker: added translation function for abstract
[dyninst.git] / common / h / dyn_regs.h
1 /*
2  * See the dyninst/COPYRIGHT file for copyright information.
3  *
4  * We provide the Paradyn Tools (below described as "Paradyn")
5  * on an AS IS basis, and do not warrant its validity or performance.
6  * We reserve the right to update, modify, or discontinue this
7  * software at any time.  We shall have no obligation to supply such
8  * updates or modifications or any other form of support to you.
9  *
10  * By your use of Paradyn, you understand and agree that we (or any
11  * other person or entity with proprietary rights in Paradyn) are
12  * under no obligation to provide either maintenance services,
13  * update services, notices of latent defects, or correction of
14  * defects for Paradyn.
15  *
16  * This library is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU Lesser General Public
18  * License as published by the Free Software Foundation; either
19  * version 2.1 of the License, or (at your option) any later version.
20  *
21  * This library is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * Lesser General Public License for more details.
25  *
26  * You should have received a copy of the GNU Lesser General Public
27  * License along with this library; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29  */
30
31
32 #if !defined(DYN_REGS_H_)
33 #define DYN_REGS_H_
34
35 #include "util.h"
36 #include "boost/shared_ptr.hpp"
37
38 #include <assert.h>
39 #include <map>
40 #include <string>
41
42 namespace Dyninst
43 {
44     struct x86OperandParser;
45     struct ppcOperandParser;
46     struct aarch64OperandParser;
47
48     typedef unsigned long MachRegisterVal;
49
50     //0xff000000 is used to encode architecture
51     typedef enum
52     {
53         Arch_none   = 0x00000000,
54         Arch_x86    = 0x14000000,
55         Arch_x86_64 = 0x18000000,
56         Arch_ppc32  = 0x24000000,
57         Arch_ppc64  = 0x28000000,
58                 Arch_aarch32 = 0x44000000, //for later use
59                 Arch_aarch64 = 0x48000000
60     } Architecture;
61
62
63     COMMON_EXPORT bool isSegmentRegister(int regClass);
64     COMMON_EXPORT unsigned getArchAddressWidth(Dyninst::Architecture arch);
65     class COMMON_EXPORT MachRegister {
66         friend struct ::Dyninst::x86OperandParser;
67         friend struct ::Dyninst::ppcOperandParser;
68         friend struct ::Dyninst::aarch64OperandParser;
69     private:
70         signed int reg;
71
72         typedef std::map<signed int, std::string> NameMap;
73         static boost::shared_ptr<MachRegister::NameMap> names();
74         void init_names();
75     public:
76
77         MachRegister();
78         explicit MachRegister(signed int r);
79         explicit MachRegister(signed int r, const char *n);
80         explicit MachRegister(signed int r, std::string n);
81
82         MachRegister getBaseRegister() const;
83         Architecture getArchitecture() const;
84         bool isValid() const;
85         MachRegisterVal getSubRegValue(const MachRegister& subreg, MachRegisterVal &orig) const;
86
87         std::string name() const;
88         unsigned int size() const;
89         bool operator<(const MachRegister &a) const;
90         bool operator==(const MachRegister &a) const;
91         operator signed int() const;
92         signed int val() const;
93         unsigned int regClass() const;
94
95         static MachRegister getPC(Dyninst::Architecture arch);
96         static MachRegister getReturnAddress(Dyninst::Architecture arch);
97         static MachRegister getFramePointer(Dyninst::Architecture arch);
98         static MachRegister getStackPointer(Dyninst::Architecture arch);
99         static MachRegister getSyscallNumberReg(Dyninst::Architecture arch);
100         static MachRegister getSyscallNumberOReg(Dyninst::Architecture arch);
101         static MachRegister getSyscallReturnValueReg(Dyninst::Architecture arch);
102         bool isPC() const;
103         bool isFramePointer() const;
104         bool isStackPointer() const;
105         bool isSyscallNumberReg() const;
106         bool isSyscallReturnValueReg() const;
107
108         void getROSERegister(int &c, int &n, int &p);
109
110         static MachRegister DwarfEncToReg(int encoding, Dyninst::Architecture arch);
111         static MachRegister getArchRegFromAbstractReg(MachRegister abstract, Dyninst::Architecture arch);
112         int getDwarfEnc() const;
113
114         static MachRegister getArchReg(unsigned int regNum, Dyninst::Architecture arch);
115    };
116
117    /**
118     * DEF_REGISTER will define its first parameter as the name of the object
119     * it's declaring, and 'i<name>' as the integer value representing that object.
120     * As an example, the name of a register may be
121     *  x86::EAX
122     * with that register having a value of
123     *  x86::iEAX
124     *
125     * The value is mostly useful in the 'case' part switch statements.
126     **/
127 #if defined(DYN_DEFINE_REGS)
128    //DYN_DEFINE_REGS Should only be defined in libcommon.
129    //We want one definition, which will be in libcommon, and declarations
130    //for everyone else.
131    //
132    //I wanted these to be const MachRegister objects, but that changes the
133    //linker scope.  Instead they're non-const.  Every accessor function is
134    //const anyways, so we'll just close our eyes and pretend they're declared
135    //const.
136 #define DEF_REGISTER(name, value, Arch) \
137   const signed int i##name = (value); \
138   COMMON_EXPORT MachRegister name(i##name, Arch "::" #name)
139 #else
140 #define DEF_REGISTER(name, value, Arch) \
141   const signed int i##name = (value); \
142   COMMON_EXPORT extern MachRegister name
143
144 #endif
145
146    /**
147     * For interpreting constants:
148     *  Lowest 16 bits (0x000000ff) is base register ID
149     *  Next 16 bits (0x0000ff00) is the aliasing and subrange ID-
150     *    used on x86/x86_64 to distinguish between things like EAX and AH
151     *  Next 16 bits (0x00ff0000) are the register category, GPR/FPR/MMX/...
152     *  Top 16 bits (0xff000000) are the architecture.
153     *
154     *  These values/layout are not guaranteed to remain the same as part of the
155     *  public interface, and may change.
156     **/
157
158    //Abstract registers used for stackwalking
159    DEF_REGISTER(InvalidReg, 0 | Arch_none, "abstract");
160    DEF_REGISTER(FrameBase,  1 | Arch_none, "abstract");
161    DEF_REGISTER(ReturnAddr, 2 | Arch_none, "abstract");
162    DEF_REGISTER(StackTop,   3 | Arch_none, "abstract");
163    // DWARF-ism; the CFA is the value of the stack pointer in the previous frame
164    DEF_REGISTER(CFA,        4 | Arch_none, "abstract");
165
166    namespace x86
167    {
168       const signed int L_REG = 0x00000100; //8-bit, first byte
169       const signed int H_REG = 0x00000200; //8-bit, second byte
170       const signed int W_REG = 0x00000300; //16-bit, first word
171       const signed int FULL  = 0x00000000; //32 bits
172       const signed int QUAD  = 0x00004000; //64 bits
173       const signed int OCT   = 0x00002000; //128 bits
174       const signed int FPDBL = 0x00001000; // 80 bits
175       const signed int BIT   = 0x00008000; // 1 bit
176       const signed int GPR   = 0x00010000;
177       const signed int SEG   = 0x00020000;
178       const signed int FLAG  = 0x00030000;
179       const signed int MISC  = 0x00040000;
180       const signed int XMM   = 0x00050000;
181       const signed int MMX   = 0x00060000;
182       const signed int CTL   = 0x00070000;
183       const signed int DBG   = 0x00080000;
184       const signed int TST   = 0x00090000;
185       const signed int BASEA  = 0x0;
186       const signed int BASEC  = 0x1;
187       const signed int BASED  = 0x2;
188       const signed int BASEB  = 0x3;
189       const signed int BASESP = 0x4;
190       const signed int BASEBP = 0x5;
191       const signed int BASESI = 0x6;
192       const signed int BASEDI = 0x7;
193       const signed int FLAGS = 0x0;
194
195       const signed int CF = 0x0;
196       const signed int FLAG1 = 0x1;
197       const signed int PF = 0x2;
198       const signed int FLAG3 = 0x3;
199       const signed int AF = 0x4;
200       const signed int FLAG5 = 0x5;
201       const signed int ZF = 0x6;
202       const signed int SF = 0x7;
203       const signed int TF = 0x8;
204       const signed int IF = 0x9;
205       const signed int DF = 0xa;
206       const signed int OF = 0xb;
207       const signed int FLAGC = 0xc;
208       const signed int FLAGD = 0xd;
209       const signed int NT = 0xe;
210       const signed int FLAGF = 0xf;
211       const signed int RF = 0x10;
212
213       DEF_REGISTER(eax,   BASEA   | FULL  | GPR  | Arch_x86, "x86");
214       DEF_REGISTER(ecx,   BASEC   | FULL  | GPR  | Arch_x86, "x86");
215       DEF_REGISTER(edx,   BASED   | FULL  | GPR  | Arch_x86, "x86");
216       DEF_REGISTER(ebx,   BASEB   | FULL  | GPR  | Arch_x86, "x86");
217       DEF_REGISTER(esp,   BASESP  | FULL  | GPR  | Arch_x86, "x86");
218       DEF_REGISTER(ebp,   BASEBP  | FULL  | GPR  | Arch_x86, "x86");
219       DEF_REGISTER(esi,   BASESI  | FULL  | GPR  | Arch_x86, "x86");
220       DEF_REGISTER(edi,   BASEDI  | FULL  | GPR  | Arch_x86, "x86");
221       DEF_REGISTER(ah,    BASEA   | H_REG | GPR  | Arch_x86, "x86");
222       DEF_REGISTER(al,    BASEA   | L_REG | GPR  | Arch_x86, "x86");
223       DEF_REGISTER(ax,    BASEA   | W_REG | GPR  | Arch_x86, "x86");
224       DEF_REGISTER(ch,    BASEC   | H_REG | GPR  | Arch_x86, "x86");
225       DEF_REGISTER(cl,    BASEC   | L_REG | GPR  | Arch_x86, "x86");
226       DEF_REGISTER(cx,    BASEC   | W_REG | GPR  | Arch_x86, "x86");
227       DEF_REGISTER(dh,    BASED   | H_REG | GPR  | Arch_x86, "x86");
228       DEF_REGISTER(dl,    BASED   | L_REG | GPR  | Arch_x86, "x86");
229       DEF_REGISTER(dx,    BASED   | W_REG | GPR  | Arch_x86, "x86");
230       DEF_REGISTER(bh,    BASEB   | H_REG | GPR  | Arch_x86, "x86");
231       DEF_REGISTER(bl,    BASEB   | L_REG | GPR  | Arch_x86, "x86");
232       DEF_REGISTER(bx,    BASEB   | W_REG | GPR  | Arch_x86, "x86");
233       DEF_REGISTER(sp,    BASESP  | W_REG | GPR  | Arch_x86, "x86");
234       DEF_REGISTER(bp,    BASEBP  | W_REG | GPR  | Arch_x86, "x86");
235       DEF_REGISTER(si,    BASESI  | W_REG | GPR  | Arch_x86, "x86");
236       DEF_REGISTER(di,    BASEDI  | W_REG | GPR  | Arch_x86, "x86");
237       DEF_REGISTER(eip,   0x10    | FULL         | Arch_x86, "x86");
238       DEF_REGISTER(flags, FLAGS   | FULL  | FLAG | Arch_x86, "x86");
239       DEF_REGISTER(cf,    CF      | BIT   | FLAG | Arch_x86, "x86");
240       DEF_REGISTER(flag1, FLAG1   | BIT   | FLAG | Arch_x86, "x86");
241       DEF_REGISTER(pf,    PF      | BIT   | FLAG | Arch_x86, "x86");
242       DEF_REGISTER(flag3, FLAG3   | BIT   | FLAG | Arch_x86, "x86");
243       DEF_REGISTER(af,    AF      | BIT   | FLAG | Arch_x86, "x86");
244       DEF_REGISTER(flag5, FLAG5   | BIT   | FLAG | Arch_x86, "x86");
245       DEF_REGISTER(zf,    ZF      | BIT   | FLAG | Arch_x86, "x86");
246       DEF_REGISTER(sf,    SF      | BIT   | FLAG | Arch_x86, "x86");
247       DEF_REGISTER(tf,    TF      | BIT   | FLAG | Arch_x86, "x86");
248       DEF_REGISTER(if_,   IF      | BIT   | FLAG | Arch_x86, "x86");
249       DEF_REGISTER(df,    DF      | BIT   | FLAG | Arch_x86, "x86");
250       DEF_REGISTER(of,    OF      | BIT   | FLAG | Arch_x86, "x86");
251       DEF_REGISTER(flagc, FLAGC   | BIT   | FLAG | Arch_x86, "x86");
252       DEF_REGISTER(flagd, FLAGD   | BIT   | FLAG | Arch_x86, "x86");
253       DEF_REGISTER(nt_,   NT      | BIT   | FLAG | Arch_x86, "x86");
254       DEF_REGISTER(flagf, FLAGF   | BIT   | FLAG | Arch_x86, "x86");
255       DEF_REGISTER(rf,    RF      | BIT   | FLAG | Arch_x86, "x86");
256       DEF_REGISTER(ds,    0x0     | W_REG | SEG  | Arch_x86, "x86");
257       DEF_REGISTER(es,    0x1     | W_REG | SEG  | Arch_x86, "x86");
258       DEF_REGISTER(fs,    0x2     | W_REG | SEG  | Arch_x86, "x86");
259       DEF_REGISTER(gs,    0x3     | W_REG | SEG  | Arch_x86, "x86");
260       DEF_REGISTER(cs,    0x4     | W_REG | SEG  | Arch_x86, "x86");
261       DEF_REGISTER(ss,    0x5     | W_REG | SEG  | Arch_x86, "x86");
262       DEF_REGISTER(oeax,  0x0     | FULL  | MISC | Arch_x86, "x86");
263       DEF_REGISTER(fsbase, 0x1    | FULL  | MISC | Arch_x86, "x86");
264       DEF_REGISTER(gsbase, 0x2    | FULL  | MISC | Arch_x86, "x86");
265       DEF_REGISTER(xmm0,  0x0     | OCT   | XMM  | Arch_x86, "x86");
266       DEF_REGISTER(xmm1,  0x1     | OCT   | XMM  | Arch_x86, "x86");
267       DEF_REGISTER(xmm2,  0x2     | OCT   | XMM  | Arch_x86, "x86");
268       DEF_REGISTER(xmm3,  0x3     | OCT   | XMM  | Arch_x86, "x86");
269       DEF_REGISTER(xmm4,  0x4     | OCT   | XMM  | Arch_x86, "x86");
270       DEF_REGISTER(xmm5,  0x5     | OCT   | XMM  | Arch_x86, "x86");
271       DEF_REGISTER(xmm6,  0x6     | OCT   | XMM  | Arch_x86, "x86");
272       DEF_REGISTER(xmm7,  0x7     | OCT   | XMM  | Arch_x86, "x86");
273       DEF_REGISTER(mm0,   0x0     | FPDBL | MMX  | Arch_x86, "x86");
274       DEF_REGISTER(mm1,   0x1     | FPDBL | MMX  | Arch_x86, "x86");
275       DEF_REGISTER(mm2,   0x2     | FPDBL | MMX  | Arch_x86, "x86");
276       DEF_REGISTER(mm3,   0x3     | FPDBL | MMX  | Arch_x86, "x86");
277       DEF_REGISTER(mm4,   0x4     | FPDBL | MMX  | Arch_x86, "x86");
278       DEF_REGISTER(mm5,   0x5     | FPDBL | MMX  | Arch_x86, "x86");
279       DEF_REGISTER(mm6,   0x6     | FPDBL | MMX  | Arch_x86, "x86");
280       DEF_REGISTER(mm7,   0x7     | FPDBL | MMX  | Arch_x86, "x86");
281       DEF_REGISTER(cr0,   0x0     | FULL  | CTL  | Arch_x86, "x86");
282       DEF_REGISTER(cr1,   0x1     | FULL  | CTL  | Arch_x86, "x86");
283       DEF_REGISTER(cr2,   0x2     | FULL  | CTL  | Arch_x86, "x86");
284       DEF_REGISTER(cr3,   0x3     | FULL  | CTL  | Arch_x86, "x86");
285       DEF_REGISTER(cr4,   0x4     | FULL  | CTL  | Arch_x86, "x86");
286       DEF_REGISTER(cr5,   0x5     | FULL  | CTL  | Arch_x86, "x86");
287       DEF_REGISTER(cr6,   0x6     | FULL  | CTL  | Arch_x86, "x86");
288       DEF_REGISTER(cr7,   0x7     | FULL  | CTL  | Arch_x86, "x86");
289       DEF_REGISTER(dr0,   0x0     | FULL  | DBG  | Arch_x86, "x86");
290       DEF_REGISTER(dr1,   0x1     | FULL  | DBG  | Arch_x86, "x86");
291       DEF_REGISTER(dr2,   0x2     | FULL  | DBG  | Arch_x86, "x86");
292       DEF_REGISTER(dr3,   0x3     | FULL  | DBG  | Arch_x86, "x86");
293       DEF_REGISTER(dr4,   0x4     | FULL  | DBG  | Arch_x86, "x86");
294       DEF_REGISTER(dr5,   0x5     | FULL  | DBG  | Arch_x86, "x86");
295       DEF_REGISTER(dr6,   0x6     | FULL  | DBG  | Arch_x86, "x86");
296       DEF_REGISTER(dr7,   0x7     | FULL  | DBG  | Arch_x86, "x86");
297       DEF_REGISTER(tr0,   0x0     | FULL  | TST  | Arch_x86, "x86");
298       DEF_REGISTER(tr1,   0x1     | FULL  | TST  | Arch_x86, "x86");
299       DEF_REGISTER(tr2,   0x2     | FULL  | TST  | Arch_x86, "x86");
300       DEF_REGISTER(tr3,   0x3     | FULL  | TST  | Arch_x86, "x86");
301       DEF_REGISTER(tr4,   0x4     | FULL  | TST  | Arch_x86, "x86");
302       DEF_REGISTER(tr5,   0x5     | FULL  | TST  | Arch_x86, "x86");
303       DEF_REGISTER(tr6,   0x6     | FULL  | TST  | Arch_x86, "x86");
304       DEF_REGISTER(tr7,   0x7     | FULL  | TST  | Arch_x86, "x86");
305       DEF_REGISTER(st0,   0x0     | FPDBL | MMX  | Arch_x86, "x86");
306       DEF_REGISTER(st1,   0x1     | FPDBL | MMX  | Arch_x86, "x86");
307       DEF_REGISTER(st2,   0x2     | FPDBL | MMX  | Arch_x86, "x86");
308       DEF_REGISTER(st3,   0x3     | FPDBL | MMX  | Arch_x86, "x86");
309       DEF_REGISTER(st4,   0x4     | FPDBL | MMX  | Arch_x86, "x86");
310       DEF_REGISTER(st5,   0x5     | FPDBL | MMX  | Arch_x86, "x86");
311       DEF_REGISTER(st6,   0x6     | FPDBL | MMX  | Arch_x86, "x86");
312       DEF_REGISTER(st7,   0x7     | FPDBL | MMX  | Arch_x86, "x86");
313    }
314    namespace x86_64
315    {
316       const signed int L_REG = 0x00000100;  //8-bit, first byte
317       const signed int H_REG = 0x00000200;  //8-bit, second byte
318       const signed int W_REG = 0x00000300; //16 bit, first work
319       const signed int D_REG = 0x00000f00; //32 bit, first double word
320       const signed int FULL  = 0x00000000; //64 bit
321       const signed int FPDBL = 0x00001000; // 80 bits
322       const signed int OCT   = 0x00002000; //128 bits
323       const signed int BIT   = 0x00008000; // 1 bit
324       const signed int GPR   = 0x00010000;
325       const signed int SEG   = 0x00020000;
326       const signed int FLAG  = 0x00030000;
327       const signed int MISC  = 0x00040000;
328       const signed int XMM   = 0x00050000;
329       const signed int MMX   = 0x00060000;
330       const signed int CTL   = 0x00070000;
331       const signed int DBG   = 0x00080000;
332       const signed int TST   = 0x00090000;
333       const signed int FLAGS = 0x00000000;
334       const signed int BASEA  = 0x0;
335       const signed int BASEC  = 0x1;
336       const signed int BASED  = 0x2;
337       const signed int BASEB  = 0x3;
338       const signed int BASESP = 0x4;
339       const signed int BASEBP = 0x5;
340       const signed int BASESI = 0x6;
341       const signed int BASEDI = 0x7;
342       const signed int BASE8  = 0x8;
343       const signed int BASE9  = 0x9;
344       const signed int BASE10 = 0xa;
345       const signed int BASE11 = 0xb;
346       const signed int BASE12 = 0xc;
347       const signed int BASE13 = 0xd;
348       const signed int BASE14 = 0xe;
349       const signed int BASE15 = 0xf;
350
351       const signed int CF = x86::CF;
352       const signed int PF = x86::PF;
353       const signed int AF = x86::AF;
354       const signed int ZF = x86::ZF;
355       const signed int SF = x86::SF;
356       const signed int TF = x86::TF;
357       const signed int IF = x86::IF;
358       const signed int DF = x86::DF;
359       const signed int OF = x86::OF;
360       const signed int NT = x86::NT;
361       const signed int RF = x86::RF;
362
363       DEF_REGISTER(rax,    BASEA  | FULL  | GPR  | Arch_x86_64, "x86_64");
364       DEF_REGISTER(rcx,    BASEC  | FULL  | GPR  | Arch_x86_64, "x86_64");
365       DEF_REGISTER(rdx,    BASED  | FULL  | GPR  | Arch_x86_64, "x86_64");
366       DEF_REGISTER(rbx,    BASEB  | FULL  | GPR  | Arch_x86_64, "x86_64");
367       DEF_REGISTER(rsp,    BASESP | FULL  | GPR  | Arch_x86_64, "x86_64");
368       DEF_REGISTER(rbp,    BASEBP | FULL  | GPR  | Arch_x86_64, "x86_64");
369       DEF_REGISTER(rsi,    BASESI | FULL  | GPR  | Arch_x86_64, "x86_64");
370       DEF_REGISTER(rdi,    BASEDI | FULL  | GPR  | Arch_x86_64, "x86_64");
371       DEF_REGISTER(r8,     BASE8  | FULL  | GPR  | Arch_x86_64, "x86_64");
372       DEF_REGISTER(r9,     BASE9  | FULL  | GPR  | Arch_x86_64, "x86_64");
373       DEF_REGISTER(r10,    BASE10 | FULL  | GPR  | Arch_x86_64, "x86_64");
374       DEF_REGISTER(r11,    BASE11 | FULL  | GPR  | Arch_x86_64, "x86_64");
375       DEF_REGISTER(r12,    BASE12 | FULL  | GPR  | Arch_x86_64, "x86_64");
376       DEF_REGISTER(r13,    BASE13 | FULL  | GPR  | Arch_x86_64, "x86_64");
377       DEF_REGISTER(r14,    BASE14 | FULL  | GPR  | Arch_x86_64, "x86_64");
378       DEF_REGISTER(r15,    BASE15 | FULL  | GPR  | Arch_x86_64, "x86_64");
379       DEF_REGISTER(ah,     BASEA  | H_REG | GPR  | Arch_x86_64, "x86_64");
380       DEF_REGISTER(al,     BASEA  | L_REG | GPR  | Arch_x86_64, "x86_64");
381       DEF_REGISTER(ax,     BASEA  | W_REG | GPR  | Arch_x86_64, "x86_64");
382       DEF_REGISTER(eax,    BASEA  | D_REG | GPR  | Arch_x86_64, "x86_64");
383       DEF_REGISTER(ch,     BASEC  | H_REG | GPR  | Arch_x86_64, "x86_64");
384       DEF_REGISTER(cl,     BASEC  | L_REG | GPR  | Arch_x86_64, "x86_64");
385       DEF_REGISTER(cx,     BASEC  | W_REG | GPR  | Arch_x86_64, "x86_64");
386       DEF_REGISTER(ecx,    BASEC  | D_REG | GPR  | Arch_x86_64, "x86_64");
387       DEF_REGISTER(dh,     BASED  | H_REG | GPR  | Arch_x86_64, "x86_64");
388       DEF_REGISTER(dl,     BASED  | L_REG | GPR  | Arch_x86_64, "x86_64");
389       DEF_REGISTER(dx,     BASED  | W_REG | GPR  | Arch_x86_64, "x86_64");
390       DEF_REGISTER(edx,    BASED  | D_REG | GPR  | Arch_x86_64, "x86_64");
391       DEF_REGISTER(bh,     BASEB  | H_REG | GPR  | Arch_x86_64, "x86_64");
392       DEF_REGISTER(bl,     BASEB  | L_REG | GPR  | Arch_x86_64, "x86_64");
393       DEF_REGISTER(bx,     BASEB  | W_REG | GPR  | Arch_x86_64, "x86_64");
394       DEF_REGISTER(ebx,    BASEB  | D_REG | GPR  | Arch_x86_64, "x86_64");
395       DEF_REGISTER(spl,    BASESP | L_REG | GPR  | Arch_x86_64, "x86_64");
396       DEF_REGISTER(sp,     BASESP | W_REG | GPR  | Arch_x86_64, "x86_64");
397       DEF_REGISTER(esp,    BASESP | D_REG | GPR  | Arch_x86_64, "x86_64");
398       DEF_REGISTER(bpl,    BASEBP | L_REG | GPR  | Arch_x86_64, "x86_64");
399       DEF_REGISTER(bp,     BASEBP | W_REG | GPR  | Arch_x86_64, "x86_64");
400       DEF_REGISTER(ebp,    BASEBP | D_REG | GPR  | Arch_x86_64, "x86_64");
401       DEF_REGISTER(dil,    BASEDI | L_REG | GPR  | Arch_x86_64, "x86_64");
402       DEF_REGISTER(di,     BASEDI | W_REG | GPR  | Arch_x86_64, "x86_64");
403       DEF_REGISTER(edi,    BASEDI | D_REG | GPR  | Arch_x86_64, "x86_64");
404       DEF_REGISTER(sil,    BASESI | L_REG | GPR  | Arch_x86_64, "x86_64");
405       DEF_REGISTER(si,     BASESI | W_REG | GPR  | Arch_x86_64, "x86_64");
406       DEF_REGISTER(esi,    BASESI | D_REG | GPR  | Arch_x86_64, "x86_64");
407       DEF_REGISTER(r8b,    BASE8  | L_REG | GPR  | Arch_x86_64, "x86_64");
408       DEF_REGISTER(r8w,    BASE8  | W_REG | GPR  | Arch_x86_64, "x86_64");
409       DEF_REGISTER(r8d,    BASE8  | D_REG | GPR  | Arch_x86_64, "x86_64");
410       DEF_REGISTER(r9b,    BASE9  | L_REG | GPR  | Arch_x86_64, "x86_64");
411       DEF_REGISTER(r9w,    BASE9  | W_REG | GPR  | Arch_x86_64, "x86_64");
412       DEF_REGISTER(r9d,    BASE9  | D_REG | GPR  | Arch_x86_64, "x86_64");
413       DEF_REGISTER(r10b,   BASE10 | L_REG | GPR  | Arch_x86_64, "x86_64");
414       DEF_REGISTER(r10w,   BASE10 | W_REG | GPR  | Arch_x86_64, "x86_64");
415       DEF_REGISTER(r10d,   BASE10 | D_REG | GPR  | Arch_x86_64, "x86_64");
416       DEF_REGISTER(r11b,   BASE11 | L_REG | GPR  | Arch_x86_64, "x86_64");
417       DEF_REGISTER(r11w,   BASE11 | W_REG | GPR  | Arch_x86_64, "x86_64");
418       DEF_REGISTER(r11d,   BASE11 | D_REG | GPR  | Arch_x86_64, "x86_64");
419       DEF_REGISTER(r12b,   BASE12 | L_REG | GPR  | Arch_x86_64, "x86_64");
420       DEF_REGISTER(r12w,   BASE12 | W_REG | GPR  | Arch_x86_64, "x86_64");
421       DEF_REGISTER(r12d,   BASE12 | D_REG | GPR  | Arch_x86_64, "x86_64");
422       DEF_REGISTER(r13b,   BASE13 | L_REG | GPR  | Arch_x86_64, "x86_64");
423       DEF_REGISTER(r13w,   BASE13 | W_REG | GPR  | Arch_x86_64, "x86_64");
424       DEF_REGISTER(r13d,   BASE13 | D_REG | GPR  | Arch_x86_64, "x86_64");
425       DEF_REGISTER(r14b,   BASE14 | L_REG | GPR  | Arch_x86_64, "x86_64");
426       DEF_REGISTER(r14w,   BASE14 | W_REG | GPR  | Arch_x86_64, "x86_64");
427       DEF_REGISTER(r14d,   BASE14 | D_REG | GPR  | Arch_x86_64, "x86_64");
428       DEF_REGISTER(r15b,   BASE15 | L_REG | GPR  | Arch_x86_64, "x86_64");
429       DEF_REGISTER(r15w,   BASE15 | W_REG | GPR  | Arch_x86_64, "x86_64");
430       DEF_REGISTER(r15d,   BASE15 | D_REG | GPR  | Arch_x86_64, "x86_64");
431       DEF_REGISTER(rip,    0x10   | FULL         | Arch_x86_64, "x86_64");
432       DEF_REGISTER(eip,    0x10   | D_REG        | Arch_x86_64, "x86_64");
433       DEF_REGISTER(flags,  FLAGS  | FULL  | FLAG | Arch_x86_64, "x86_64");
434       DEF_REGISTER(cf,     CF     | BIT   | FLAG | Arch_x86_64, "x86_64");
435       DEF_REGISTER(pf,     PF     | BIT   | FLAG | Arch_x86_64, "x86_64");
436       DEF_REGISTER(af,     AF     | BIT   | FLAG | Arch_x86_64, "x86_64");
437       DEF_REGISTER(zf,     ZF     | BIT   | FLAG | Arch_x86_64, "x86_64");
438       DEF_REGISTER(sf,     SF     | BIT   | FLAG | Arch_x86_64, "x86_64");
439       DEF_REGISTER(tf,     TF     | BIT   | FLAG | Arch_x86_64, "x86_64");
440       DEF_REGISTER(if_,    IF     | BIT   | FLAG | Arch_x86_64, "x86_64");
441       DEF_REGISTER(df,     DF     | BIT   | FLAG | Arch_x86_64, "x86_64");
442       DEF_REGISTER(of,     OF     | BIT   | FLAG | Arch_x86_64, "x86_64");
443       DEF_REGISTER(nt_,    NT     | BIT   | FLAG | Arch_x86_64, "x86_64");
444       DEF_REGISTER(rf,     RF     | BIT   | FLAG | Arch_x86_64, "x86_64");
445       DEF_REGISTER(ds,     0x0    | FULL  | SEG  | Arch_x86_64, "x86_64");
446       DEF_REGISTER(es,     0x1    | FULL  | SEG  | Arch_x86_64, "x86_64");
447       DEF_REGISTER(fs,     0x2    | FULL  | SEG  | Arch_x86_64, "x86_64");
448       DEF_REGISTER(gs,     0x3    | FULL  | SEG  | Arch_x86_64, "x86_64");
449       DEF_REGISTER(cs,     0x4    | FULL  | SEG  | Arch_x86_64, "x86_64");
450       DEF_REGISTER(ss,     0x5    | FULL  | SEG  | Arch_x86_64, "x86_64");
451       DEF_REGISTER(orax,   0x0    | FULL  | MISC | Arch_x86_64, "x86_64");
452       DEF_REGISTER(fsbase, 0x1    | FULL  | MISC | Arch_x86_64, "x86_64");
453       DEF_REGISTER(gsbase, 0x2    | FULL  | MISC | Arch_x86_64, "x86_64");
454       DEF_REGISTER(xmm0,  0x0     | OCT   | XMM  | Arch_x86_64, "x86_64");
455       DEF_REGISTER(xmm1,  0x1     | OCT   | XMM  | Arch_x86_64, "x86_64");
456       DEF_REGISTER(xmm2,  0x2     | OCT   | XMM  | Arch_x86_64, "x86_64");
457       DEF_REGISTER(xmm3,  0x3     | OCT   | XMM  | Arch_x86_64, "x86_64");
458       DEF_REGISTER(xmm4,  0x4     | OCT   | XMM  | Arch_x86_64, "x86_64");
459       DEF_REGISTER(xmm5,  0x5     | OCT   | XMM  | Arch_x86_64, "x86_64");
460       DEF_REGISTER(xmm6,  0x6     | OCT   | XMM  | Arch_x86_64, "x86_64");
461       DEF_REGISTER(xmm7,  0x7     | OCT   | XMM  | Arch_x86_64, "x86_64");
462       DEF_REGISTER(xmm8,  0x8     | OCT   | XMM  | Arch_x86_64, "x86_64");
463       DEF_REGISTER(xmm9,  0x9     | OCT   | XMM  | Arch_x86_64, "x86_64");
464       DEF_REGISTER(xmm10, 0xA     | OCT   | XMM  | Arch_x86_64, "x86_64");
465       DEF_REGISTER(xmm11, 0xB     | OCT   | XMM  | Arch_x86_64, "x86_64");
466       DEF_REGISTER(xmm12, 0xC     | OCT   | XMM  | Arch_x86_64, "x86_64");
467       DEF_REGISTER(xmm13, 0xD     | OCT   | XMM  | Arch_x86_64, "x86_64");
468       DEF_REGISTER(xmm14, 0xE     | OCT   | XMM  | Arch_x86_64, "x86_64");
469       DEF_REGISTER(xmm15, 0xF     | OCT   | XMM  | Arch_x86_64, "x86_64");
470       DEF_REGISTER(mm0,   0x0     | FPDBL | MMX  | Arch_x86_64, "x86_64");
471       DEF_REGISTER(mm1,   0x1     | FPDBL | MMX  | Arch_x86_64, "x86_64");
472       DEF_REGISTER(mm2,   0x2     | FPDBL | MMX  | Arch_x86_64, "x86_64");
473       DEF_REGISTER(mm3,   0x3     | FPDBL | MMX  | Arch_x86_64, "x86_64");
474       DEF_REGISTER(mm4,   0x4     | FPDBL | MMX  | Arch_x86_64, "x86_64");
475       DEF_REGISTER(mm5,   0x5     | FPDBL | MMX  | Arch_x86_64, "x86_64");
476       DEF_REGISTER(mm6,   0x6     | FPDBL | MMX  | Arch_x86_64, "x86_64");
477       DEF_REGISTER(mm7,   0x7     | FPDBL | MMX  | Arch_x86_64, "x86_64");
478       DEF_REGISTER(cr0,   0x0     | FULL  | CTL  | Arch_x86_64, "x86_64");
479       DEF_REGISTER(cr1,   0x1     | FULL  | CTL  | Arch_x86_64, "x86_64");
480       DEF_REGISTER(cr2,   0x2     | FULL  | CTL  | Arch_x86_64, "x86_64");
481       DEF_REGISTER(cr3,   0x3     | FULL  | CTL  | Arch_x86_64, "x86_64");
482       DEF_REGISTER(cr4,   0x4     | FULL  | CTL  | Arch_x86_64, "x86_64");
483       DEF_REGISTER(cr5,   0x5     | FULL  | CTL  | Arch_x86_64, "x86_64");
484       DEF_REGISTER(cr6,   0x6     | FULL  | CTL  | Arch_x86_64, "x86_64");
485       DEF_REGISTER(cr7,   0x7     | FULL  | CTL  | Arch_x86_64, "x86_64");
486       DEF_REGISTER(dr0,   0x0     | FULL  | DBG  | Arch_x86_64, "x86_64");
487       DEF_REGISTER(dr1,   0x1     | FULL  | DBG  | Arch_x86_64, "x86_64");
488       DEF_REGISTER(dr2,   0x2     | FULL  | DBG  | Arch_x86_64, "x86_64");
489       DEF_REGISTER(dr3,   0x3     | FULL  | DBG  | Arch_x86_64, "x86_64");
490       DEF_REGISTER(dr4,   0x4     | FULL  | DBG  | Arch_x86_64, "x86_64");
491       DEF_REGISTER(dr5,   0x5     | FULL  | DBG  | Arch_x86_64, "x86_64");
492       DEF_REGISTER(dr6,   0x6     | FULL  | DBG  | Arch_x86_64, "x86_64");
493       DEF_REGISTER(dr7,   0x7     | FULL  | DBG  | Arch_x86_64, "x86_64");
494       DEF_REGISTER(tr0,   0x0     | FULL  | TST  | Arch_x86_64, "x86_64");
495       DEF_REGISTER(tr1,   0x1     | FULL  | TST  | Arch_x86_64, "x86_64");
496       DEF_REGISTER(tr2,   0x2     | FULL  | TST  | Arch_x86_64, "x86_64");
497       DEF_REGISTER(tr3,   0x3     | FULL  | TST  | Arch_x86_64, "x86_64");
498       DEF_REGISTER(tr4,   0x4     | FULL  | TST  | Arch_x86_64, "x86_64");
499       DEF_REGISTER(tr5,   0x5     | FULL  | TST  | Arch_x86_64, "x86_64");
500       DEF_REGISTER(tr6,   0x6     | FULL  | TST  | Arch_x86_64, "x86_64");
501       DEF_REGISTER(tr7,   0x7     | FULL  | TST  | Arch_x86_64, "x86_64");
502       DEF_REGISTER(st0,   0x0     | FPDBL | MMX  | Arch_x86_64, "x86_64");
503       DEF_REGISTER(st1,   0x1     | FPDBL | MMX  | Arch_x86_64, "x86_64");
504       DEF_REGISTER(st2,   0x2     | FPDBL | MMX  | Arch_x86_64, "x86_64");
505       DEF_REGISTER(st3,   0x3     | FPDBL | MMX  | Arch_x86_64, "x86_64");
506       DEF_REGISTER(st4,   0x4     | FPDBL | MMX  | Arch_x86_64, "x86_64");
507       DEF_REGISTER(st5,   0x5     | FPDBL | MMX  | Arch_x86_64, "x86_64");
508       DEF_REGISTER(st6,   0x6     | FPDBL | MMX  | Arch_x86_64, "x86_64");
509       DEF_REGISTER(st7,   0x7     | FPDBL | MMX  | Arch_x86_64, "x86_64");
510    }
511    namespace ppc32 {
512       const signed int GPR   = 0x00010000;
513       const signed int FPR   = 0x00020000;
514       const signed int FSR   = 0x00040000;
515       const signed int SPR   = 0x00080000;
516
517       DEF_REGISTER(r0,       0 | GPR | Arch_ppc32, "ppc32");
518       DEF_REGISTER(r1,       1 | GPR | Arch_ppc32, "ppc32");
519       DEF_REGISTER(r2,       2 | GPR | Arch_ppc32, "ppc32");
520       DEF_REGISTER(r3,       3 | GPR | Arch_ppc32, "ppc32");
521       DEF_REGISTER(r4,       4 | GPR | Arch_ppc32, "ppc32");
522       DEF_REGISTER(r5,       5 | GPR | Arch_ppc32, "ppc32");
523       DEF_REGISTER(r6,       6 | GPR | Arch_ppc32, "ppc32");
524       DEF_REGISTER(r7,       7 | GPR | Arch_ppc32, "ppc32");
525       DEF_REGISTER(r8,       8 | GPR | Arch_ppc32, "ppc32");
526       DEF_REGISTER(r9,       9 | GPR | Arch_ppc32, "ppc32");
527       DEF_REGISTER(r10,     10 | GPR | Arch_ppc32, "ppc32");
528       DEF_REGISTER(r11,     11 | GPR | Arch_ppc32, "ppc32");
529       DEF_REGISTER(r12,     12 | GPR | Arch_ppc32, "ppc32");
530       DEF_REGISTER(r13,     13 | GPR | Arch_ppc32, "ppc32");
531       DEF_REGISTER(r14,     14 | GPR | Arch_ppc32, "ppc32");
532       DEF_REGISTER(r15,     15 | GPR | Arch_ppc32, "ppc32");
533       DEF_REGISTER(r16,     16 | GPR | Arch_ppc32, "ppc32");
534       DEF_REGISTER(r17,     17 | GPR | Arch_ppc32, "ppc32");
535       DEF_REGISTER(r18,     18 | GPR | Arch_ppc32, "ppc32");
536       DEF_REGISTER(r19,     19 | GPR | Arch_ppc32, "ppc32");
537       DEF_REGISTER(r20,     20 | GPR | Arch_ppc32, "ppc32");
538       DEF_REGISTER(r21,     21 | GPR | Arch_ppc32, "ppc32");
539       DEF_REGISTER(r22,     22 | GPR | Arch_ppc32, "ppc32");
540       DEF_REGISTER(r23,     23 | GPR | Arch_ppc32, "ppc32");
541       DEF_REGISTER(r24,     24 | GPR | Arch_ppc32, "ppc32");
542       DEF_REGISTER(r25,     25 | GPR | Arch_ppc32, "ppc32");
543       DEF_REGISTER(r26,     26 | GPR | Arch_ppc32, "ppc32");
544       DEF_REGISTER(r27,     27 | GPR | Arch_ppc32, "ppc32");
545       DEF_REGISTER(r28,     28 | GPR | Arch_ppc32, "ppc32");
546       DEF_REGISTER(r29,     29 | GPR | Arch_ppc32, "ppc32");
547       DEF_REGISTER(r30,     30 | GPR | Arch_ppc32, "ppc32");
548       DEF_REGISTER(r31,     31 | GPR | Arch_ppc32, "ppc32");
549       DEF_REGISTER(fpr0,     0 | FPR | Arch_ppc32, "ppc32");
550       DEF_REGISTER(fpr1,     1 | FPR | Arch_ppc32, "ppc32");
551       DEF_REGISTER(fpr2,     2 | FPR | Arch_ppc32, "ppc32");
552       DEF_REGISTER(fpr3,     3 | FPR | Arch_ppc32, "ppc32");
553       DEF_REGISTER(fpr4,     4 | FPR | Arch_ppc32, "ppc32");
554       DEF_REGISTER(fpr5,     5 | FPR | Arch_ppc32, "ppc32");
555       DEF_REGISTER(fpr6,     6 | FPR | Arch_ppc32, "ppc32");
556       DEF_REGISTER(fpr7,     7 | FPR | Arch_ppc32, "ppc32");
557       DEF_REGISTER(fpr8,     8 | FPR | Arch_ppc32, "ppc32");
558       DEF_REGISTER(fpr9,     9 | FPR | Arch_ppc32, "ppc32");
559       DEF_REGISTER(fpr10,   10 | FPR | Arch_ppc32, "ppc32");
560       DEF_REGISTER(fpr11,   11 | FPR | Arch_ppc32, "ppc32");
561       DEF_REGISTER(fpr12,   12 | FPR | Arch_ppc32, "ppc32");
562       DEF_REGISTER(fpr13,   13 | FPR | Arch_ppc32, "ppc32");
563       DEF_REGISTER(fpr14,   14 | FPR | Arch_ppc32, "ppc32");
564       DEF_REGISTER(fpr15,   15 | FPR | Arch_ppc32, "ppc32");
565       DEF_REGISTER(fpr16,   16 | FPR | Arch_ppc32, "ppc32");
566       DEF_REGISTER(fpr17,   17 | FPR | Arch_ppc32, "ppc32");
567       DEF_REGISTER(fpr18,   18 | FPR | Arch_ppc32, "ppc32");
568       DEF_REGISTER(fpr19,   19 | FPR | Arch_ppc32, "ppc32");
569       DEF_REGISTER(fpr20,   20 | FPR | Arch_ppc32, "ppc32");
570       DEF_REGISTER(fpr21,   21 | FPR | Arch_ppc32, "ppc32");
571       DEF_REGISTER(fpr22,   22 | FPR | Arch_ppc32, "ppc32");
572       DEF_REGISTER(fpr23,   23 | FPR | Arch_ppc32, "ppc32");
573       DEF_REGISTER(fpr24,   24 | FPR | Arch_ppc32, "ppc32");
574       DEF_REGISTER(fpr25,   25 | FPR | Arch_ppc32, "ppc32");
575       DEF_REGISTER(fpr26,   26 | FPR | Arch_ppc32, "ppc32");
576       DEF_REGISTER(fpr27,   27 | FPR | Arch_ppc32, "ppc32");
577       DEF_REGISTER(fpr28,   28 | FPR | Arch_ppc32, "ppc32");
578       DEF_REGISTER(fpr29,   29 | FPR | Arch_ppc32, "ppc32");
579       DEF_REGISTER(fpr30,   30 | FPR | Arch_ppc32, "ppc32");
580       DEF_REGISTER(fpr31,   31 | FPR | Arch_ppc32, "ppc32");
581       DEF_REGISTER(fsr0,     0 | FSR | Arch_ppc32, "ppc32");
582       DEF_REGISTER(fsr1,     1 | FSR | Arch_ppc32, "ppc32");
583       DEF_REGISTER(fsr2,     2 | FSR | Arch_ppc32, "ppc32");
584       DEF_REGISTER(fsr3,     3 | FSR | Arch_ppc32, "ppc32");
585       DEF_REGISTER(fsr4,     4 | FSR | Arch_ppc32, "ppc32");
586       DEF_REGISTER(fsr5,     5 | FSR | Arch_ppc32, "ppc32");
587       DEF_REGISTER(fsr6,     6 | FSR | Arch_ppc32, "ppc32");
588       DEF_REGISTER(fsr7,     7 | FSR | Arch_ppc32, "ppc32");
589       DEF_REGISTER(fsr8,     8 | FSR | Arch_ppc32, "ppc32");
590       DEF_REGISTER(fsr9,     9 | FSR | Arch_ppc32, "ppc32");
591       DEF_REGISTER(fsr10,   10 | FSR | Arch_ppc32, "ppc32");
592       DEF_REGISTER(fsr11,   11 | FSR | Arch_ppc32, "ppc32");
593       DEF_REGISTER(fsr12,   12 | FSR | Arch_ppc32, "ppc32");
594       DEF_REGISTER(fsr13,   13 | FSR | Arch_ppc32, "ppc32");
595       DEF_REGISTER(fsr14,   14 | FSR | Arch_ppc32, "ppc32");
596       DEF_REGISTER(fsr15,   15 | FSR | Arch_ppc32, "ppc32");
597       DEF_REGISTER(fsr16,   16 | FSR | Arch_ppc32, "ppc32");
598       DEF_REGISTER(fsr17,   17 | FSR | Arch_ppc32, "ppc32");
599       DEF_REGISTER(fsr18,   18 | FSR | Arch_ppc32, "ppc32");
600       DEF_REGISTER(fsr19,   19 | FSR | Arch_ppc32, "ppc32");
601       DEF_REGISTER(fsr20,   20 | FSR | Arch_ppc32, "ppc32");
602       DEF_REGISTER(fsr21,   21 | FSR | Arch_ppc32, "ppc32");
603       DEF_REGISTER(fsr22,   22 | FSR | Arch_ppc32, "ppc32");
604       DEF_REGISTER(fsr23,   23 | FSR | Arch_ppc32, "ppc32");
605       DEF_REGISTER(fsr24,   24 | FSR | Arch_ppc32, "ppc32");
606       DEF_REGISTER(fsr25,   25 | FSR | Arch_ppc32, "ppc32");
607       DEF_REGISTER(fsr26,   26 | FSR | Arch_ppc32, "ppc32");
608       DEF_REGISTER(fsr27,   27 | FSR | Arch_ppc32, "ppc32");
609       DEF_REGISTER(fsr28,   28 | FSR | Arch_ppc32, "ppc32");
610       DEF_REGISTER(fsr29,   29 | FSR | Arch_ppc32, "ppc32");
611       DEF_REGISTER(fsr30,   30 | FSR | Arch_ppc32, "ppc32");
612       DEF_REGISTER(fsr31,   31 | FSR | Arch_ppc32, "ppc32");
613       DEF_REGISTER(mq,       0 | SPR | Arch_ppc32, "ppc32");
614       DEF_REGISTER(xer,      1 | SPR | Arch_ppc32, "ppc32");
615       DEF_REGISTER(lr,       8 | SPR | Arch_ppc32, "ppc32");
616       DEF_REGISTER(ctr,      9 | SPR | Arch_ppc32, "ppc32");
617       DEF_REGISTER(dsisr,   18 | SPR | Arch_ppc32, "ppc32");
618       DEF_REGISTER(dar,     19 | SPR | Arch_ppc32, "ppc32");
619       DEF_REGISTER(dec,     22 | SPR | Arch_ppc32, "ppc32");
620       DEF_REGISTER(sdr1,    25 | SPR | Arch_ppc32, "ppc32");
621       DEF_REGISTER(srr0,    26 | SPR | Arch_ppc32, "ppc32");
622       DEF_REGISTER(srr1,    27 | SPR | Arch_ppc32, "ppc32");
623       DEF_REGISTER(sprg0,  272 | SPR | Arch_ppc32, "ppc32");
624       DEF_REGISTER(sprg1,  273 | SPR | Arch_ppc32, "ppc32");
625       DEF_REGISTER(sprg2,  274 | SPR | Arch_ppc32, "ppc32");
626       DEF_REGISTER(sprg3,  275 | SPR | Arch_ppc32, "ppc32");
627       DEF_REGISTER(sprg4,  276 | SPR | Arch_ppc32, "ppc32");
628       DEF_REGISTER(sprg5,  277 | SPR | Arch_ppc32, "ppc32");
629       DEF_REGISTER(sprg6,  278 | SPR | Arch_ppc32, "ppc32");
630       DEF_REGISTER(sprg7,  279 | SPR | Arch_ppc32, "ppc32");
631
632       DEF_REGISTER(sprg3_ro,  259 | SPR | Arch_ppc32, "ppc32");
633       DEF_REGISTER(sprg4_ro,  260 | SPR | Arch_ppc32, "ppc32");
634       DEF_REGISTER(sprg5_ro,  261 | SPR | Arch_ppc32, "ppc32");
635       DEF_REGISTER(sprg6_ro,  262 | SPR | Arch_ppc32, "ppc32");
636       DEF_REGISTER(sprg7_ro,  263 | SPR | Arch_ppc32, "ppc32");
637
638
639       DEF_REGISTER(ear,    282 | SPR | Arch_ppc32, "ppc32");
640       DEF_REGISTER(tbl_wo,    284 | SPR | Arch_ppc32, "ppc32");
641       DEF_REGISTER(tbl_ro,    268 | SPR | Arch_ppc32, "ppc32");
642       DEF_REGISTER(tbu_wo,    285 | SPR | Arch_ppc32, "ppc32");
643       DEF_REGISTER(tbu_ro,    269 | SPR | Arch_ppc32, "ppc32");
644       DEF_REGISTER(pvr,    287 | SPR | Arch_ppc32, "ppc32");
645       DEF_REGISTER(ibat0u, 528 | SPR | Arch_ppc32, "ppc32");
646       DEF_REGISTER(ibat0l, 529 | SPR | Arch_ppc32, "ppc32");
647       DEF_REGISTER(ibat1u, 530 | SPR | Arch_ppc32, "ppc32");
648       DEF_REGISTER(ibat1l, 531 | SPR | Arch_ppc32, "ppc32");
649       DEF_REGISTER(ibat2u, 532 | SPR | Arch_ppc32, "ppc32");
650       DEF_REGISTER(ibat2l, 533 | SPR | Arch_ppc32, "ppc32");
651       DEF_REGISTER(ibat3u, 534 | SPR | Arch_ppc32, "ppc32");
652       DEF_REGISTER(ibat3l, 535 | SPR | Arch_ppc32, "ppc32");
653       DEF_REGISTER(dbat0u, 536 | SPR | Arch_ppc32, "ppc32");
654       DEF_REGISTER(dbat0l, 537 | SPR | Arch_ppc32, "ppc32");
655       DEF_REGISTER(dbat1u, 538 | SPR | Arch_ppc32, "ppc32");
656       DEF_REGISTER(dbat1l, 539 | SPR | Arch_ppc32, "ppc32");
657       DEF_REGISTER(dbat2u, 540 | SPR | Arch_ppc32, "ppc32");
658       DEF_REGISTER(dbat2l, 541 | SPR | Arch_ppc32, "ppc32");
659       DEF_REGISTER(dbat3u, 542 | SPR | Arch_ppc32, "ppc32");
660       DEF_REGISTER(dbat3l, 543 | SPR | Arch_ppc32, "ppc32");
661       DEF_REGISTER(pc,     600 | SPR | Arch_ppc32, "ppc32");
662       DEF_REGISTER(fpscw,  601 | SPR | Arch_ppc32, "ppc32");
663       DEF_REGISTER(fpscw0, 602 | SPR | Arch_ppc32, "ppc32");
664       DEF_REGISTER(fpscw1, 603 | SPR | Arch_ppc32, "ppc32");
665       DEF_REGISTER(fpscw2, 604 | SPR | Arch_ppc32, "ppc32");
666       DEF_REGISTER(fpscw3, 605 | SPR | Arch_ppc32, "ppc32");
667       DEF_REGISTER(fpscw4, 606 | SPR | Arch_ppc32, "ppc32");
668       DEF_REGISTER(fpscw5, 607 | SPR | Arch_ppc32, "ppc32");
669       DEF_REGISTER(fpscw6, 608 | SPR | Arch_ppc32, "ppc32");
670       DEF_REGISTER(fpscw7, 609 | SPR | Arch_ppc32, "ppc32");
671       DEF_REGISTER(msr,    610 | SPR | Arch_ppc32, "ppc32");
672       DEF_REGISTER(ivpr,   611 | SPR | Arch_ppc32, "ppc32");
673       DEF_REGISTER(ivor8,  612 | SPR | Arch_ppc32, "ppc32");
674       DEF_REGISTER(seg0,   613 | SPR | Arch_ppc32, "ppc32");
675       DEF_REGISTER(seg1,   614 | SPR | Arch_ppc32, "ppc32");
676       DEF_REGISTER(seg2,   615 | SPR | Arch_ppc32, "ppc32");
677       DEF_REGISTER(seg3,   616 | SPR | Arch_ppc32, "ppc32");
678       DEF_REGISTER(seg4,   617 | SPR | Arch_ppc32, "ppc32");
679       DEF_REGISTER(seg5,   618 | SPR | Arch_ppc32, "ppc32");
680       DEF_REGISTER(seg6,   619 | SPR | Arch_ppc32, "ppc32");
681       DEF_REGISTER(seg7,   620 | SPR | Arch_ppc32, "ppc32");
682       DEF_REGISTER(cr0,    621 | SPR | Arch_ppc32, "ppc32");
683       DEF_REGISTER(cr1,    622 | SPR | Arch_ppc32, "ppc32");
684       DEF_REGISTER(cr2,    623 | SPR | Arch_ppc32, "ppc32");
685       DEF_REGISTER(cr3,    624 | SPR | Arch_ppc32, "ppc32");
686       DEF_REGISTER(cr4,    625 | SPR | Arch_ppc32, "ppc32");
687       DEF_REGISTER(cr5,    626 | SPR | Arch_ppc32, "ppc32");
688       DEF_REGISTER(cr6,    627 | SPR | Arch_ppc32, "ppc32");
689       DEF_REGISTER(cr7,    628 | SPR | Arch_ppc32, "ppc32");
690       DEF_REGISTER(cr,     629 | SPR | Arch_ppc32, "ppc32");
691       DEF_REGISTER(or3,    630 | SPR | Arch_ppc32, "ppc32");
692       DEF_REGISTER(trap,   631 | SPR | Arch_ppc32, "ppc32");
693    }
694    namespace ppc64 {
695       const signed int GPR   = 0x00010000;
696       const signed int FPR   = 0x00020000;
697       const signed int FSR   = 0x00040000;
698       const signed int SPR   = 0x00080000;
699
700       DEF_REGISTER(r0,       0 | GPR | Arch_ppc64, "ppc64");
701       DEF_REGISTER(r1,       1 | GPR | Arch_ppc64, "ppc64");
702       DEF_REGISTER(r2,       2 | GPR | Arch_ppc64, "ppc64");
703       DEF_REGISTER(r3,       3 | GPR | Arch_ppc64, "ppc64");
704       DEF_REGISTER(r4,       4 | GPR | Arch_ppc64, "ppc64");
705       DEF_REGISTER(r5,       5 | GPR | Arch_ppc64, "ppc64");
706       DEF_REGISTER(r6,       6 | GPR | Arch_ppc64, "ppc64");
707       DEF_REGISTER(r7,       7 | GPR | Arch_ppc64, "ppc64");
708       DEF_REGISTER(r8,       8 | GPR | Arch_ppc64, "ppc64");
709       DEF_REGISTER(r9,       9 | GPR | Arch_ppc64, "ppc64");
710       DEF_REGISTER(r10,     10 | GPR | Arch_ppc64, "ppc64");
711       DEF_REGISTER(r11,     11 | GPR | Arch_ppc64, "ppc64");
712       DEF_REGISTER(r12,     12 | GPR | Arch_ppc64, "ppc64");
713       DEF_REGISTER(r13,     13 | GPR | Arch_ppc64, "ppc64");
714       DEF_REGISTER(r14,     14 | GPR | Arch_ppc64, "ppc64");
715       DEF_REGISTER(r15,     15 | GPR | Arch_ppc64, "ppc64");
716       DEF_REGISTER(r16,     16 | GPR | Arch_ppc64, "ppc64");
717       DEF_REGISTER(r17,     17 | GPR | Arch_ppc64, "ppc64");
718       DEF_REGISTER(r18,     18 | GPR | Arch_ppc64, "ppc64");
719       DEF_REGISTER(r19,     19 | GPR | Arch_ppc64, "ppc64");
720       DEF_REGISTER(r20,     20 | GPR | Arch_ppc64, "ppc64");
721       DEF_REGISTER(r21,     21 | GPR | Arch_ppc64, "ppc64");
722       DEF_REGISTER(r22,     22 | GPR | Arch_ppc64, "ppc64");
723       DEF_REGISTER(r23,     23 | GPR | Arch_ppc64, "ppc64");
724       DEF_REGISTER(r24,     24 | GPR | Arch_ppc64, "ppc64");
725       DEF_REGISTER(r25,     25 | GPR | Arch_ppc64, "ppc64");
726       DEF_REGISTER(r26,     26 | GPR | Arch_ppc64, "ppc64");
727       DEF_REGISTER(r27,     27 | GPR | Arch_ppc64, "ppc64");
728       DEF_REGISTER(r28,     28 | GPR | Arch_ppc64, "ppc64");
729       DEF_REGISTER(r29,     29 | GPR | Arch_ppc64, "ppc64");
730       DEF_REGISTER(r30,     30 | GPR | Arch_ppc64, "ppc64");
731       DEF_REGISTER(r31,     31 | GPR | Arch_ppc64, "ppc64");
732       DEF_REGISTER(fpr0,     0 | FPR | Arch_ppc64, "ppc64");
733       DEF_REGISTER(fpr1,     1 | FPR | Arch_ppc64, "ppc64");
734       DEF_REGISTER(fpr2,     2 | FPR | Arch_ppc64, "ppc64");
735       DEF_REGISTER(fpr3,     3 | FPR | Arch_ppc64, "ppc64");
736       DEF_REGISTER(fpr4,     4 | FPR | Arch_ppc64, "ppc64");
737       DEF_REGISTER(fpr5,     5 | FPR | Arch_ppc64, "ppc64");
738       DEF_REGISTER(fpr6,     6 | FPR | Arch_ppc64, "ppc64");
739       DEF_REGISTER(fpr7,     7 | FPR | Arch_ppc64, "ppc64");
740       DEF_REGISTER(fpr8,     8 | FPR | Arch_ppc64, "ppc64");
741       DEF_REGISTER(fpr9,     9 | FPR | Arch_ppc64, "ppc64");
742       DEF_REGISTER(fpr10,   10 | FPR | Arch_ppc64, "ppc64");
743       DEF_REGISTER(fpr11,   11 | FPR | Arch_ppc64, "ppc64");
744       DEF_REGISTER(fpr12,   12 | FPR | Arch_ppc64, "ppc64");
745       DEF_REGISTER(fpr13,   13 | FPR | Arch_ppc64, "ppc64");
746       DEF_REGISTER(fpr14,   14 | FPR | Arch_ppc64, "ppc64");
747       DEF_REGISTER(fpr15,   15 | FPR | Arch_ppc64, "ppc64");
748       DEF_REGISTER(fpr16,   16 | FPR | Arch_ppc64, "ppc64");
749       DEF_REGISTER(fpr17,   17 | FPR | Arch_ppc64, "ppc64");
750       DEF_REGISTER(fpr18,   18 | FPR | Arch_ppc64, "ppc64");
751       DEF_REGISTER(fpr19,   19 | FPR | Arch_ppc64, "ppc64");
752       DEF_REGISTER(fpr20,   20 | FPR | Arch_ppc64, "ppc64");
753       DEF_REGISTER(fpr21,   21 | FPR | Arch_ppc64, "ppc64");
754       DEF_REGISTER(fpr22,   22 | FPR | Arch_ppc64, "ppc64");
755       DEF_REGISTER(fpr23,   23 | FPR | Arch_ppc64, "ppc64");
756       DEF_REGISTER(fpr24,   24 | FPR | Arch_ppc64, "ppc64");
757       DEF_REGISTER(fpr25,   25 | FPR | Arch_ppc64, "ppc64");
758       DEF_REGISTER(fpr26,   26 | FPR | Arch_ppc64, "ppc64");
759       DEF_REGISTER(fpr27,   27 | FPR | Arch_ppc64, "ppc64");
760       DEF_REGISTER(fpr28,   28 | FPR | Arch_ppc64, "ppc64");
761       DEF_REGISTER(fpr29,   29 | FPR | Arch_ppc64, "ppc64");
762       DEF_REGISTER(fpr30,   30 | FPR | Arch_ppc64, "ppc64");
763       DEF_REGISTER(fpr31,   31 | FPR | Arch_ppc64, "ppc64");
764       DEF_REGISTER(fsr0,     0 | FSR | Arch_ppc64, "ppc64");
765       DEF_REGISTER(fsr1,     1 | FSR | Arch_ppc64, "ppc64");
766       DEF_REGISTER(fsr2,     2 | FSR | Arch_ppc64, "ppc64");
767       DEF_REGISTER(fsr3,     3 | FSR | Arch_ppc64, "ppc64");
768       DEF_REGISTER(fsr4,     4 | FSR | Arch_ppc64, "ppc64");
769       DEF_REGISTER(fsr5,     5 | FSR | Arch_ppc64, "ppc64");
770       DEF_REGISTER(fsr6,     6 | FSR | Arch_ppc64, "ppc64");
771       DEF_REGISTER(fsr7,     7 | FSR | Arch_ppc64, "ppc64");
772       DEF_REGISTER(fsr8,     8 | FSR | Arch_ppc64, "ppc64");
773       DEF_REGISTER(fsr9,     9 | FSR | Arch_ppc64, "ppc64");
774       DEF_REGISTER(fsr10,   10 | FSR | Arch_ppc64, "ppc64");
775       DEF_REGISTER(fsr11,   11 | FSR | Arch_ppc64, "ppc64");
776       DEF_REGISTER(fsr12,   12 | FSR | Arch_ppc64, "ppc64");
777       DEF_REGISTER(fsr13,   13 | FSR | Arch_ppc64, "ppc64");
778       DEF_REGISTER(fsr14,   14 | FSR | Arch_ppc64, "ppc64");
779       DEF_REGISTER(fsr15,   15 | FSR | Arch_ppc64, "ppc64");
780       DEF_REGISTER(fsr16,   16 | FSR | Arch_ppc64, "ppc64");
781       DEF_REGISTER(fsr17,   17 | FSR | Arch_ppc64, "ppc64");
782       DEF_REGISTER(fsr18,   18 | FSR | Arch_ppc64, "ppc64");
783       DEF_REGISTER(fsr19,   19 | FSR | Arch_ppc64, "ppc64");
784       DEF_REGISTER(fsr20,   20 | FSR | Arch_ppc64, "ppc64");
785       DEF_REGISTER(fsr21,   21 | FSR | Arch_ppc64, "ppc64");
786       DEF_REGISTER(fsr22,   22 | FSR | Arch_ppc64, "ppc64");
787       DEF_REGISTER(fsr23,   23 | FSR | Arch_ppc64, "ppc64");
788       DEF_REGISTER(fsr24,   24 | FSR | Arch_ppc64, "ppc64");
789       DEF_REGISTER(fsr25,   25 | FSR | Arch_ppc64, "ppc64");
790       DEF_REGISTER(fsr26,   26 | FSR | Arch_ppc64, "ppc64");
791       DEF_REGISTER(fsr27,   27 | FSR | Arch_ppc64, "ppc64");
792       DEF_REGISTER(fsr28,   28 | FSR | Arch_ppc64, "ppc64");
793       DEF_REGISTER(fsr29,   29 | FSR | Arch_ppc64, "ppc64");
794       DEF_REGISTER(fsr30,   30 | FSR | Arch_ppc64, "ppc64");
795       DEF_REGISTER(fsr31,   31 | FSR | Arch_ppc64, "ppc64");
796       DEF_REGISTER(mq,       0 | SPR | Arch_ppc64, "ppc64");
797       DEF_REGISTER(xer,      1 | SPR | Arch_ppc64, "ppc64");
798       DEF_REGISTER(lr,       8 | SPR | Arch_ppc64, "ppc64");
799       DEF_REGISTER(ctr,      9 | SPR | Arch_ppc64, "ppc64");
800       DEF_REGISTER(dsisr,   18 | SPR | Arch_ppc64, "ppc64");
801       DEF_REGISTER(dar,     19 | SPR | Arch_ppc64, "ppc64");
802       DEF_REGISTER(dec,     22 | SPR | Arch_ppc64, "ppc64");
803       DEF_REGISTER(sdr1,    25 | SPR | Arch_ppc64, "ppc64");
804       DEF_REGISTER(srr0,    26 | SPR | Arch_ppc64, "ppc64");
805       DEF_REGISTER(srr1,    27 | SPR | Arch_ppc64, "ppc64");
806       DEF_REGISTER(sprg0,  272 | SPR | Arch_ppc64, "ppc64");
807       DEF_REGISTER(sprg1,  273 | SPR | Arch_ppc64, "ppc64");
808       DEF_REGISTER(sprg2,  274 | SPR | Arch_ppc64, "ppc64");
809       DEF_REGISTER(sprg3,  275 | SPR | Arch_ppc64, "ppc64");
810       DEF_REGISTER(sprg4,  276 | SPR | Arch_ppc64, "ppc64");
811       DEF_REGISTER(sprg5,  277 | SPR | Arch_ppc64, "ppc64");
812       DEF_REGISTER(sprg6,  278 | SPR | Arch_ppc64, "ppc64");
813       DEF_REGISTER(sprg7,  279 | SPR | Arch_ppc64, "ppc64");
814
815       DEF_REGISTER(sprg3_ro,  259 | SPR | Arch_ppc64, "ppc64");
816       DEF_REGISTER(sprg4_ro,  260 | SPR | Arch_ppc64, "ppc64");
817       DEF_REGISTER(sprg5_ro,  261 | SPR | Arch_ppc64, "ppc64");
818       DEF_REGISTER(sprg6_ro,  262 | SPR | Arch_ppc64, "ppc64");
819       DEF_REGISTER(sprg7_ro,  263 | SPR | Arch_ppc64, "ppc64");
820       DEF_REGISTER(ear,    282 | SPR | Arch_ppc64, "ppc64");
821       DEF_REGISTER(tbl_wo,    284 | SPR | Arch_ppc64, "ppc64");
822       DEF_REGISTER(tbl_ro,    268 | SPR | Arch_ppc64, "ppc64");
823       DEF_REGISTER(tbu_wo,    285 | SPR | Arch_ppc64, "ppc64");
824       DEF_REGISTER(tbu_ro,    269 | SPR | Arch_ppc64, "ppc64");
825       DEF_REGISTER(pvr,    287 | SPR | Arch_ppc64, "ppc64");
826       DEF_REGISTER(ibat0u, 528 | SPR | Arch_ppc64, "ppc64");
827       DEF_REGISTER(ibat0l, 529 | SPR | Arch_ppc64, "ppc64");
828       DEF_REGISTER(ibat1u, 530 | SPR | Arch_ppc64, "ppc64");
829       DEF_REGISTER(ibat1l, 531 | SPR | Arch_ppc64, "ppc64");
830       DEF_REGISTER(ibat2u, 532 | SPR | Arch_ppc64, "ppc64");
831       DEF_REGISTER(ibat2l, 533 | SPR | Arch_ppc64, "ppc64");
832       DEF_REGISTER(ibat3u, 534 | SPR | Arch_ppc64, "ppc64");
833       DEF_REGISTER(ibat3l, 535 | SPR | Arch_ppc64, "ppc64");
834       DEF_REGISTER(dbat0u, 536 | SPR | Arch_ppc64, "ppc64");
835       DEF_REGISTER(dbat0l, 537 | SPR | Arch_ppc64, "ppc64");
836       DEF_REGISTER(dbat1u, 538 | SPR | Arch_ppc64, "ppc64");
837       DEF_REGISTER(dbat1l, 539 | SPR | Arch_ppc64, "ppc64");
838       DEF_REGISTER(dbat2u, 540 | SPR | Arch_ppc64, "ppc64");
839       DEF_REGISTER(dbat2l, 541 | SPR | Arch_ppc64, "ppc64");
840       DEF_REGISTER(dbat3u, 542 | SPR | Arch_ppc64, "ppc64");
841       DEF_REGISTER(dbat3l, 543 | SPR | Arch_ppc64, "ppc64");
842       DEF_REGISTER(pc,     600 | SPR | Arch_ppc64, "ppc64");
843       DEF_REGISTER(fpscw,  601 | SPR | Arch_ppc64, "ppc64");
844       DEF_REGISTER(fpscw0, 602 | SPR | Arch_ppc64, "ppc64");
845       DEF_REGISTER(fpscw1, 603 | SPR | Arch_ppc64, "ppc64");
846       DEF_REGISTER(fpscw2, 604 | SPR | Arch_ppc64, "ppc64");
847       DEF_REGISTER(fpscw3, 605 | SPR | Arch_ppc64, "ppc64");
848       DEF_REGISTER(fpscw4, 606 | SPR | Arch_ppc64, "ppc64");
849       DEF_REGISTER(fpscw5, 607 | SPR | Arch_ppc64, "ppc64");
850       DEF_REGISTER(fpscw6, 608 | SPR | Arch_ppc64, "ppc64");
851       DEF_REGISTER(fpscw7, 609 | SPR | Arch_ppc64, "ppc64");
852       DEF_REGISTER(msr,    610 | SPR | Arch_ppc64, "ppc64");
853       DEF_REGISTER(ivpr,   611 | SPR | Arch_ppc64, "ppc64");
854       DEF_REGISTER(ivor8,  612 | SPR | Arch_ppc64, "ppc64");
855       DEF_REGISTER(seg0,   613 | SPR | Arch_ppc64, "ppc64");
856       DEF_REGISTER(seg1,   614 | SPR | Arch_ppc64, "ppc64");
857       DEF_REGISTER(seg2,   615 | SPR | Arch_ppc64, "ppc64");
858       DEF_REGISTER(seg3,   616 | SPR | Arch_ppc64, "ppc64");
859       DEF_REGISTER(seg4,   617 | SPR | Arch_ppc64, "ppc64");
860       DEF_REGISTER(seg5,   618 | SPR | Arch_ppc64, "ppc64");
861       DEF_REGISTER(seg6,   619 | SPR | Arch_ppc64, "ppc64");
862       DEF_REGISTER(seg7,   620 | SPR | Arch_ppc64, "ppc64");
863       DEF_REGISTER(cr0,    621 | SPR | Arch_ppc64, "ppc64");
864       DEF_REGISTER(cr1,    622 | SPR | Arch_ppc64, "ppc64");
865       DEF_REGISTER(cr2,    623 | SPR | Arch_ppc64, "ppc64");
866       DEF_REGISTER(cr3,    624 | SPR | Arch_ppc64, "ppc64");
867       DEF_REGISTER(cr4,    625 | SPR | Arch_ppc64, "ppc64");
868       DEF_REGISTER(cr5,    626 | SPR | Arch_ppc64, "ppc64");
869       DEF_REGISTER(cr6,    627 | SPR | Arch_ppc64, "ppc64");
870       DEF_REGISTER(cr7,    628 | SPR | Arch_ppc64, "ppc64");
871       DEF_REGISTER(cr,     629 | SPR | Arch_ppc64, "ppc64");
872       DEF_REGISTER(or3,    630 | SPR | Arch_ppc64, "ppc64");
873       DEF_REGISTER(trap,   631 | SPR | Arch_ppc64, "ppc64");
874    }
875
876         namespace aarch64{
877       //0xff000000  0x00ff0000      0x0000ff00      0x000000ff
878       //arch        reg cat:GPR     alias&subrange  reg ID
879       const signed int GPR   = 0x00010000;
880       const signed int FPR   = 0x00020000;
881       const signed int FSR   = 0x00040000;
882       const signed int SPR   = 0x00080000;
883
884       const signed int B_REG = 0x00000100;      //8bit  byte reg
885       const signed int H_REG = 0x00000200;      //16bit half-word reg
886       const signed int W_REG = 0x00000f00;      //32bit word reg
887       const signed int FULL  = 0x00000000;      //64bit double-word reg
888       const signed int Q_REG = 0x00000f00;      //128bit quad-word reg
889
890       //31 GPRs, double word long registers
891       //          (name   regID| alias | cat | arch           arch    )
892       DEF_REGISTER(x0,       0 | FULL  |GPR | Arch_aarch64, "aarch64");
893       DEF_REGISTER(x1,       1 | FULL  |GPR | Arch_aarch64, "aarch64");
894       DEF_REGISTER(x2,       2 | FULL  |GPR | Arch_aarch64, "aarch64");
895       DEF_REGISTER(x3,       3 | FULL  |GPR | Arch_aarch64, "aarch64");
896       DEF_REGISTER(x4,       4 | FULL  |GPR | Arch_aarch64, "aarch64");
897       DEF_REGISTER(x5,       5 | FULL  |GPR | Arch_aarch64, "aarch64");
898       DEF_REGISTER(x6,       6 | FULL  |GPR | Arch_aarch64, "aarch64");
899       DEF_REGISTER(x7,       7 | FULL  |GPR | Arch_aarch64, "aarch64");
900       DEF_REGISTER(x8,       8 | FULL  |GPR | Arch_aarch64, "aarch64");
901       DEF_REGISTER(x9,       9 | FULL  |GPR | Arch_aarch64, "aarch64");
902       DEF_REGISTER(x10,     10 | FULL  |GPR | Arch_aarch64, "aarch64");
903       DEF_REGISTER(x11,     11 | FULL  |GPR | Arch_aarch64, "aarch64");
904       DEF_REGISTER(x12,     12 | FULL  |GPR | Arch_aarch64, "aarch64");
905       DEF_REGISTER(x13,     13 | FULL  |GPR | Arch_aarch64, "aarch64");
906       DEF_REGISTER(x14,     14 | FULL  |GPR | Arch_aarch64, "aarch64");
907       DEF_REGISTER(x15,     15 | FULL  |GPR | Arch_aarch64, "aarch64");
908       DEF_REGISTER(x16,     16 | FULL  |GPR | Arch_aarch64, "aarch64");
909       DEF_REGISTER(x17,     17 | FULL  |GPR | Arch_aarch64, "aarch64");
910       DEF_REGISTER(x18,     18 | FULL  |GPR | Arch_aarch64, "aarch64");
911       DEF_REGISTER(x19,     19 | FULL  |GPR | Arch_aarch64, "aarch64");
912       DEF_REGISTER(x20,     20 | FULL  |GPR | Arch_aarch64, "aarch64");
913       DEF_REGISTER(x21,     21 | FULL  |GPR | Arch_aarch64, "aarch64");
914       DEF_REGISTER(x22,     22 | FULL  |GPR | Arch_aarch64, "aarch64");
915       DEF_REGISTER(x23,     23 | FULL  |GPR | Arch_aarch64, "aarch64");
916       DEF_REGISTER(x24,     24 | FULL  |GPR | Arch_aarch64, "aarch64");
917       DEF_REGISTER(x25,     25 | FULL  |GPR | Arch_aarch64, "aarch64");
918       DEF_REGISTER(x26,     26 | FULL  |GPR | Arch_aarch64, "aarch64");
919       DEF_REGISTER(x27,     27 | FULL  |GPR | Arch_aarch64, "aarch64");
920       DEF_REGISTER(x28,     28 | FULL  |GPR | Arch_aarch64, "aarch64");
921       DEF_REGISTER(x29,     29 | FULL  |GPR | Arch_aarch64, "aarch64");
922       DEF_REGISTER(x30,     30 | FULL  |GPR | Arch_aarch64, "aarch64");
923
924       //32 FPRs-----------q-d-s-h-b
925       //128 bit
926       DEF_REGISTER(q0,       0 | Q_REG |FPR | Arch_aarch64, "aarch64");
927       DEF_REGISTER(q1,       1 | Q_REG |FPR | Arch_aarch64, "aarch64");
928       DEF_REGISTER(q2,       2 | Q_REG |FPR | Arch_aarch64, "aarch64");
929       DEF_REGISTER(q3,       3 | Q_REG |FPR | Arch_aarch64, "aarch64");
930       DEF_REGISTER(q4,       4 | Q_REG |FPR | Arch_aarch64, "aarch64");
931       DEF_REGISTER(q5,       5 | Q_REG |FPR | Arch_aarch64, "aarch64");
932       DEF_REGISTER(q6,       6 | Q_REG |FPR | Arch_aarch64, "aarch64");
933       DEF_REGISTER(q7,       7 | Q_REG |FPR | Arch_aarch64, "aarch64");
934       DEF_REGISTER(q8,       8 | Q_REG |FPR | Arch_aarch64, "aarch64");
935       DEF_REGISTER(q9,       9 | Q_REG |FPR | Arch_aarch64, "aarch64");
936       DEF_REGISTER(q10,     10 | Q_REG |FPR | Arch_aarch64, "aarch64");
937       DEF_REGISTER(q11,     11 | Q_REG |FPR | Arch_aarch64, "aarch64");
938       DEF_REGISTER(q12,     12 | Q_REG |FPR | Arch_aarch64, "aarch64");
939       DEF_REGISTER(q13,     13 | Q_REG |FPR | Arch_aarch64, "aarch64");
940       DEF_REGISTER(q14,     14 | Q_REG |FPR | Arch_aarch64, "aarch64");
941       DEF_REGISTER(q15,     15 | Q_REG |FPR | Arch_aarch64, "aarch64");
942       DEF_REGISTER(q16,     16 | Q_REG |FPR | Arch_aarch64, "aarch64");
943       DEF_REGISTER(q17,     17 | Q_REG |FPR | Arch_aarch64, "aarch64");
944       DEF_REGISTER(q18,     18 | Q_REG |FPR | Arch_aarch64, "aarch64");
945       DEF_REGISTER(q19,     19 | Q_REG |FPR | Arch_aarch64, "aarch64");
946       DEF_REGISTER(q20,     20 | Q_REG |FPR | Arch_aarch64, "aarch64");
947       DEF_REGISTER(q21,     21 | Q_REG |FPR | Arch_aarch64, "aarch64");
948       DEF_REGISTER(q22,     22 | Q_REG |FPR | Arch_aarch64, "aarch64");
949       DEF_REGISTER(q23,     23 | Q_REG |FPR | Arch_aarch64, "aarch64");
950       DEF_REGISTER(q24,     24 | Q_REG |FPR | Arch_aarch64, "aarch64");
951       DEF_REGISTER(q25,     25 | Q_REG |FPR | Arch_aarch64, "aarch64");
952       DEF_REGISTER(q26,     26 | Q_REG |FPR | Arch_aarch64, "aarch64");
953       DEF_REGISTER(q27,     27 | Q_REG |FPR | Arch_aarch64, "aarch64");
954       DEF_REGISTER(q28,     28 | Q_REG |FPR | Arch_aarch64, "aarch64");
955       DEF_REGISTER(q29,     29 | Q_REG |FPR | Arch_aarch64, "aarch64");
956       DEF_REGISTER(q30,     30 | Q_REG |FPR | Arch_aarch64, "aarch64");
957       DEF_REGISTER(q31,     31 | Q_REG |FPR | Arch_aarch64, "aarch64");
958
959       //GPRs aliases:
960       //by convention
961       //x29 is used as frame pointer
962           //x30 is the linking register
963       //x31 can be sp or zero register depending on the context
964
965       //special registers
966           //PC is not writable in aarch64
967       DEF_REGISTER(sp,       0 | FULL  |SPR | Arch_aarch64, "aarch64");
968       DEF_REGISTER(pc,       1 | FULL  |SPR | Arch_aarch64, "aarch64");
969       DEF_REGISTER(pstate,   2 | FULL  |SPR | Arch_aarch64, "aarch64");
970       //the base value is not sure
971       DEF_REGISTER(fpcr,     0 | W_REG |SPR | Arch_aarch64, "aarch64");
972       DEF_REGISTER(fpsr,     1 | W_REG |SPR | Arch_aarch64, "aarch64");
973
974         }       //end of aarch64 namespace
975 }
976
977 #endif