Add a mapping of AArch64 MachRegister to index for Linux
[dyninst.git] / dataflowAPI / src / RegisterMap.C
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 #include "dataflowAPI/src/RegisterMap.h"
32 #include <boost/assign/list_of.hpp>
33 #include <map>
34 #include <boost/config.hpp>
35
36 using namespace boost::assign;
37
38 // We use the singleton approach, rather than static construction, to ensure the
39 // register maps are created correctly. In at least one case (Ubuntu 12.04) they
40 // weren't.
41
42 namespace Dyninst {
43 namespace DataflowAPI {
44
45 #if !defined(NO_INITIALIZER_LIST_SUPPORT) && (!defined(os_windows) || _MSC_VER >= 1900)
46    // This doesn't fail on VS 2015, but may fail on other versions post 2010.
47    // This fails on VS2010; revisit when we move to VS2012.
48    // Also on gcc 4.3.
49
50 RegisterMap &machRegIndex_x86() {
51    static RegisterMap mrmap;
52    if (mrmap.empty()) {
53       mrmap = {
54          {x86::eax, 0},
55          {x86::ecx, 1},
56          {x86::edx, 2},
57          {x86::ebx, 3},
58          {x86::esp, 4},
59          {x86::ebp, 5},
60          {x86::esi, 6},
61          {x86::edi, 7},
62          {x86::eip, 8},
63          {x86::cf, 9},
64          {x86::flag1, 10},
65          {x86::pf, 11},
66          {x86::flag3, 12},
67          {x86::af, 13},
68          {x86::flag5, 14},
69          {x86::zf, 15},
70          {x86::sf, 16},
71          {x86::tf, 17},
72          {x86::if_, 18},
73          {x86::df, 19},
74          {x86::of, 20},
75          {x86::flagc, 21},
76          {x86::flagd, 22},
77          {x86::nt_, 23},
78          {x86::flagf, 24},
79          {x86::rf, 25},
80          {x86::ds, 26},
81          {x86::es, 27},
82          {x86::fs, 28},
83          {x86::gs, 29},
84          {x86::cs, 30},
85          {x86::ss, 31},
86          {x86::oeax, 32},
87          {x86::fsbase, 33},
88          {x86::gsbase, 34},
89          {x86::k0, 35},
90          {x86::k1, 36},
91          {x86::k2, 37},
92          {x86::k3, 38},
93          {x86::k4, 39},
94          {x86::k5, 40},
95          {x86::k6, 41},
96          {x86::k7, 42},
97          {x86::zmm0, 43},
98          {x86::zmm1, 44},
99          {x86::zmm2, 45},
100          {x86::zmm3, 46},
101          {x86::zmm4, 47},
102          {x86::zmm5, 48},
103          {x86::zmm6, 49},
104          {x86::zmm7, 50},
105          {x86::zmm8, 51},
106          {x86::zmm9, 52},
107          {x86::zmm10, 53},
108          {x86::zmm11, 54},
109          {x86::zmm12, 55},
110          {x86::zmm13, 56},
111          {x86::zmm14, 57},
112          {x86::zmm15, 58},
113          {x86::zmm16, 59},
114          {x86::zmm17, 60},
115          {x86::zmm18, 61},
116          {x86::zmm19, 62},
117          {x86::zmm20, 63},
118          {x86::zmm21, 64},
119          {x86::zmm22, 65},
120          {x86::zmm23, 66},
121          {x86::zmm24, 67},
122          {x86::zmm25, 68},
123          {x86::zmm26, 69},
124          {x86::zmm27, 70},
125          {x86::zmm28, 71},
126          {x86::zmm29, 72},
127          {x86::zmm30, 73},
128          {x86::zmm31, 74},
129          {x86::ymm0, 75},
130          {x86::ymm1, 76},
131          {x86::ymm2, 77},
132          {x86::ymm3, 78},
133          {x86::ymm4, 79},
134          {x86::ymm5, 80},
135          {x86::ymm6, 81},
136          {x86::ymm7, 82},
137          {x86::ymm8, 83},
138          {x86::ymm9, 84},
139          {x86::ymm10, 85},
140          {x86::ymm11, 86},
141          {x86::ymm12, 87},
142          {x86::ymm13, 88},
143          {x86::ymm14, 89},
144          {x86::ymm15, 90},
145          {x86::ymm16, 91},
146          {x86::ymm17, 92},
147          {x86::ymm18, 93},
148          {x86::ymm19, 94},
149          {x86::ymm20, 95},
150          {x86::ymm21, 96},
151          {x86::ymm22, 97},
152          {x86::ymm23, 98},
153          {x86::ymm24, 99},
154          {x86::ymm25, 100},
155          {x86::ymm26, 101},
156          {x86::ymm27, 102},
157          {x86::ymm28, 103},
158          {x86::ymm29, 104},
159          {x86::ymm30, 105},
160          {x86::ymm31, 106},
161          {x86::xmm0, 107},
162          {x86::xmm1, 108},
163          {x86::xmm2, 109},
164          {x86::xmm3, 110},
165          {x86::xmm4, 111},
166          {x86::xmm5, 112},
167          {x86::xmm6, 113},
168          {x86::xmm7, 114},
169          {x86::xmm8, 115},
170          {x86::xmm9, 116},
171          {x86::xmm10, 117},
172          {x86::xmm11, 118},
173          {x86::xmm12, 119},
174          {x86::xmm13, 120},
175          {x86::xmm14, 121},
176          {x86::xmm15, 122},
177          {x86::xmm16, 123},
178          {x86::xmm17, 124},
179          {x86::xmm18, 125},
180          {x86::xmm19, 126},
181          {x86::xmm20, 127},
182          {x86::xmm21, 128},
183          {x86::xmm22, 129},
184          {x86::xmm23, 130},
185          {x86::xmm24, 131},
186          {x86::xmm25, 132},
187          {x86::xmm26, 133},
188          {x86::xmm27, 134},
189          {x86::xmm28, 135},
190          {x86::xmm29, 136},
191          {x86::xmm30, 137},
192          {x86::xmm31, 138},
193          {x86::mm0, 139},  // mm0 to mm7 and st0 to st7 collapse to mm0
194          {x86::cr0, 140},
195          {x86::cr1, 141},
196          {x86::cr2, 142},
197          {x86::cr3, 143},
198          {x86::cr4, 144},
199          {x86::cr5, 145},
200          {x86::cr6, 146},
201          {x86::cr7, 147},
202          {x86::dr0, 148},
203          {x86::dr1, 149},
204          {x86::dr2, 150},
205          {x86::dr3, 151},
206          {x86::dr4, 152},
207          {x86::dr5, 153},
208          {x86::dr6, 154},
209          {x86::dr7, 155},
210          {x86::tr0, 156},
211          {x86::tr1, 157},
212          {x86::tr2, 158},
213          {x86::tr3, 159},
214          {x86::tr4, 160},
215          {x86::tr5, 161},
216          {x86::tr6, 162},
217          {x86::tr7, 163} };
218    }
219    return mrmap;
220 }
221
222 RegisterMap &machRegIndex_x86_64() {
223    static RegisterMap mrmap;
224    if (mrmap.empty()) {
225       mrmap = {
226          {x86_64::rax, 0},
227          {x86_64::rcx, 1},
228          {x86_64::rdx, 2},
229          {x86_64::rbx, 3},
230          {x86_64::rsp, 4},
231          {x86_64::rbp, 5},
232          {x86_64::rsi, 6},
233          {x86_64::rdi, 7},
234          {x86_64::r8, 8},
235          {x86_64::r9, 9},
236          {x86_64::r10, 10},
237          {x86_64::r11, 11},
238          {x86_64::r12, 12},
239          {x86_64::r13, 13},
240          {x86_64::r14, 14},
241          {x86_64::r15, 15},
242          {x86_64::rip, 16},
243          {x86_64::cf, 17},
244          {x86_64::pf, 18},
245          {x86_64::af, 19},
246          {x86_64::zf, 20},
247          {x86_64::sf, 21},
248          {x86_64::tf, 22},
249          {x86_64::if_, 23},
250          {x86_64::df, 24},
251          {x86_64::of, 25},
252          {x86_64::nt_, 26},
253          {x86_64::rf, 27},
254          {x86_64::ds, 28},
255          {x86_64::es, 29},
256          {x86_64::fs, 30},
257          {x86_64::gs, 31},
258          {x86_64::cs, 32},
259          {x86_64::ss, 33},
260          {x86_64::orax, 34},
261          {x86_64::fsbase, 35},
262          {x86_64::gsbase, 36},
263          {x86_64::k0, 37},
264          {x86_64::k1, 38},
265          {x86_64::k2, 39},
266          {x86_64::k3, 40},
267          {x86_64::k4, 41},
268          {x86_64::k5, 42},
269          {x86_64::k6, 43},
270          {x86_64::k7, 44},
271          {x86_64::zmm0, 45},
272          {x86_64::zmm1, 46},
273          {x86_64::zmm2, 47},
274          {x86_64::zmm3, 48},
275          {x86_64::zmm4, 49},
276          {x86_64::zmm5, 50},
277          {x86_64::zmm6, 51},
278          {x86_64::zmm7, 52},
279          {x86_64::zmm8, 53},
280          {x86_64::zmm9, 54},
281          {x86_64::zmm10, 55},
282          {x86_64::zmm11, 56},
283          {x86_64::zmm12, 57},
284          {x86_64::zmm13, 58},
285          {x86_64::zmm14, 59},
286          {x86_64::zmm15, 60},
287          {x86_64::zmm16, 61},
288          {x86_64::zmm17, 62},
289          {x86_64::zmm18, 63},
290          {x86_64::zmm19, 64},
291          {x86_64::zmm20, 65},
292          {x86_64::zmm21, 66},
293          {x86_64::zmm22, 67},
294          {x86_64::zmm23, 68},
295          {x86_64::zmm24, 69},
296          {x86_64::zmm25, 70},
297          {x86_64::zmm26, 71},
298          {x86_64::zmm27, 72},
299          {x86_64::zmm28, 73},
300          {x86_64::zmm29, 74},
301          {x86_64::zmm30, 75},
302          {x86_64::zmm31, 76},
303          {x86_64::ymm0, 77},
304          {x86_64::ymm1, 78},
305          {x86_64::ymm2, 79},
306          {x86_64::ymm3, 80},
307          {x86_64::ymm4, 81},
308          {x86_64::ymm5, 82},
309          {x86_64::ymm6, 83},
310          {x86_64::ymm7, 84},
311          {x86_64::ymm8, 85},
312          {x86_64::ymm9, 86},
313          {x86_64::ymm10, 87},
314          {x86_64::ymm11, 88},
315          {x86_64::ymm12, 89},
316          {x86_64::ymm13, 90},
317          {x86_64::ymm14, 91},
318          {x86_64::ymm15, 92},
319          {x86_64::ymm16, 93},
320          {x86_64::ymm17, 94},
321          {x86_64::ymm18, 95},
322          {x86_64::ymm19, 96},
323          {x86_64::ymm20, 97},
324          {x86_64::ymm21, 98},
325          {x86_64::ymm22, 99},
326          {x86_64::ymm23, 100},
327          {x86_64::ymm24, 101},
328          {x86_64::ymm25, 102},
329          {x86_64::ymm26, 103},
330          {x86_64::ymm27, 104},
331          {x86_64::ymm28, 105},
332          {x86_64::ymm29, 106},
333          {x86_64::ymm30, 107},
334          {x86_64::ymm31, 108},
335          {x86_64::xmm0, 109},
336          {x86_64::xmm1, 110},
337          {x86_64::xmm2, 111},
338          {x86_64::xmm3, 112},
339          {x86_64::xmm4, 113},
340          {x86_64::xmm5, 114},
341          {x86_64::xmm6, 115},
342          {x86_64::xmm7, 116},
343          {x86_64::xmm8, 117},
344          {x86_64::xmm9, 118},
345          {x86_64::xmm10, 119},
346          {x86_64::xmm11, 120},
347          {x86_64::xmm12, 121},
348          {x86_64::xmm13, 122},
349          {x86_64::xmm14, 123},
350          {x86_64::xmm15, 124},
351          {x86_64::xmm16, 125},
352          {x86_64::xmm17, 126},
353          {x86_64::xmm18, 127},
354          {x86_64::xmm19, 128},
355          {x86_64::xmm20, 129},
356          {x86_64::xmm21, 130},
357          {x86_64::xmm22, 131},
358          {x86_64::xmm23, 132},
359          {x86_64::xmm24, 133},
360          {x86_64::xmm25, 134},
361          {x86_64::xmm26, 135},
362          {x86_64::xmm27, 136},
363          {x86_64::xmm28, 137},
364          {x86_64::xmm29, 138},
365          {x86_64::xmm30, 139},
366          {x86_64::xmm31, 140},
367          {x86_64::mm0, 141}, // mm0 to mm7 and st0 to st7 collapse to mm0
368          {x86_64::cr0, 142},
369          {x86_64::cr1, 143},
370          {x86_64::cr2, 144},
371          {x86_64::cr3, 145},
372          {x86_64::cr4, 146},
373          {x86_64::cr5, 147},
374          {x86_64::cr6, 148},
375          {x86_64::cr7, 149},
376          {x86_64::dr0, 150},
377          {x86_64::dr1, 151},
378          {x86_64::dr2, 152},
379          {x86_64::dr3, 153},
380          {x86_64::dr4, 154},
381          {x86_64::dr5, 155},
382          {x86_64::dr6, 156},
383          {x86_64::dr7, 157},
384          {x86_64::tr0, 158},
385          {x86_64::tr1, 159},
386          {x86_64::tr2, 160},
387          {x86_64::tr3, 161},
388          {x86_64::tr4, 162},
389          {x86_64::tr5, 163},
390          {x86_64::tr6, 164},
391          {x86_64::tr7, 165},
392       };
393    }
394    return mrmap;
395 }
396
397 RegisterMap &machRegIndex_ppc() {
398    static RegisterMap mrmap;
399    if (mrmap.empty()) {
400       mrmap = {
401          {ppc32::r0, 0},
402          {ppc32::r1, 1},
403          {ppc32::r2, 2},
404          {ppc32::r3, 3},
405          {ppc32::r4, 4},
406          {ppc32::r5, 5},
407          {ppc32::r6, 6},
408          {ppc32::r7, 7},
409          {ppc32::r8, 8},
410          {ppc32::r9, 9},
411          {ppc32::r10, 10},
412          {ppc32::r11, 11},
413          {ppc32::r12, 12},
414          {ppc32::r13, 13},
415          {ppc32::r14, 14},
416          {ppc32::r15, 15},
417          {ppc32::r16, 16},
418          {ppc32::r17, 17},
419          {ppc32::r18, 18},
420          {ppc32::r19, 19},
421          {ppc32::r20, 20},
422          {ppc32::r21, 21},
423          {ppc32::r22, 22},
424          {ppc32::r23, 23},
425          {ppc32::r24, 24},
426          {ppc32::r25, 25},
427          {ppc32::r26, 26},
428          {ppc32::r27, 27},
429          {ppc32::r28, 28},
430          {ppc32::r29, 29},
431          {ppc32::r30, 30},
432          {ppc32::r31, 31},
433          {ppc32::fpr0, 32},
434          {ppc32::fpr1, 33},
435          {ppc32::fpr2, 34},
436          {ppc32::fpr3, 35},
437          {ppc32::fpr4, 36},
438          {ppc32::fpr5, 37},
439          {ppc32::fpr6, 38},
440          {ppc32::fpr7, 39},
441          {ppc32::fpr8, 40},
442          {ppc32::fpr9, 41},
443          {ppc32::fpr10, 42},
444          {ppc32::fpr11, 43},
445          {ppc32::fpr12, 44},
446          {ppc32::fpr13, 45},
447          {ppc32::fpr14, 46},
448          {ppc32::fpr15, 47},
449          {ppc32::fpr16, 48},
450          {ppc32::fpr17, 49},
451          {ppc32::fpr18, 50},
452          {ppc32::fpr19, 51},
453          {ppc32::fpr20, 52},
454          {ppc32::fpr21, 53},
455          {ppc32::fpr22, 54},
456          {ppc32::fpr23, 55},
457          {ppc32::fpr24, 56},
458          {ppc32::fpr25, 57},
459          {ppc32::fpr26, 58},
460          {ppc32::fpr27, 59},
461          {ppc32::fpr28, 60},
462          {ppc32::fpr29, 61},
463          {ppc32::fpr30, 62},
464          {ppc32::fpr31, 63},
465          {ppc32::fsr0, 64},
466          {ppc32::fsr1, 65},
467          {ppc32::fsr2, 66},
468          {ppc32::fsr3, 67},
469          {ppc32::fsr4, 68},
470          {ppc32::fsr5, 69},
471          {ppc32::fsr6, 70},
472          {ppc32::fsr7, 71},
473          {ppc32::fsr8, 72},
474          {ppc32::fsr9, 73},
475          {ppc32::fsr10, 74},
476          {ppc32::fsr11, 75},
477          {ppc32::fsr12, 76},
478          {ppc32::fsr13, 77},
479          {ppc32::fsr14, 78},
480          {ppc32::fsr15, 79},
481          {ppc32::fsr16, 80},
482          {ppc32::fsr17, 81},
483          {ppc32::fsr18, 82},
484          {ppc32::fsr19, 83},
485          {ppc32::fsr20, 84},
486          {ppc32::fsr21, 85},
487          {ppc32::fsr22, 86},
488          {ppc32::fsr23, 87},
489          {ppc32::fsr24, 88},
490          {ppc32::fsr25, 89},
491          {ppc32::fsr26, 90},
492          {ppc32::fsr27, 91},
493          {ppc32::fsr28, 92},
494          {ppc32::fsr29, 93},
495          {ppc32::fsr30, 94},
496          {ppc32::fsr31, 95},
497          {ppc32::mq, 96},
498          {ppc32::xer, 97},
499          {ppc32::lr, 98},
500          {ppc32::ctr, 99},
501          {ppc32::dsisr, 100},
502          {ppc32::dar, 101},
503          {ppc32::dec, 102},
504          {ppc32::sdr1, 103},
505          {ppc32::srr0, 104},
506          {ppc32::srr1, 105},
507          {ppc32::sprg0, 106},
508          {ppc32::sprg1, 107},
509          {ppc32::sprg2, 108},
510          {ppc32::sprg3, 109},
511          {ppc32::sprg3_ro, 109},
512          {ppc32::ear, 110},
513          {ppc32::tbl_wo, 111},
514          {ppc32::tbl_ro, 111},
515          {ppc32::tbu_wo, 112},
516          {ppc32::tbu_ro, 112},
517          {ppc32::pvr, 113},
518          {ppc32::ibat0u, 114},
519          {ppc32::ibat0l, 115},
520          {ppc32::ibat1u, 116},
521          {ppc32::ibat1l, 117},
522          {ppc32::ibat2u, 118},
523          {ppc32::ibat2l, 119},
524          {ppc32::ibat3u, 120},
525          {ppc32::ibat3l, 121},
526          {ppc32::dbat0u, 122},
527          {ppc32::dbat0l, 123},
528          {ppc32::dbat1u, 124},
529          {ppc32::dbat1l, 125},
530          {ppc32::dbat2u, 126},
531          {ppc32::dbat2l, 127},
532          {ppc32::dbat3u, 128},
533          {ppc32::dbat3l, 129},
534          {ppc32::pc, 130},
535          {ppc32::fpscw, 131},
536          {ppc32::fpscw0, 132},
537          {ppc32::fpscw1, 133},
538          {ppc32::fpscw2, 134},
539          {ppc32::fpscw3, 135},
540          {ppc32::fpscw4, 136},
541          {ppc32::fpscw5, 137},
542          {ppc32::fpscw6, 138},
543          {ppc32::fpscw7, 139},
544          {ppc32::msr, 140},
545          {ppc32::ivpr, 141},
546          {ppc32::ivor8, 142},
547          {ppc32::seg0, 143},
548          {ppc32::seg1, 144},
549          {ppc32::seg2, 145},
550          {ppc32::seg3, 146},
551          {ppc32::seg4, 147},
552          {ppc32::seg5, 148},
553          {ppc32::seg6, 149},
554          {ppc32::seg7, 150},
555          {ppc32::cr0, 151},
556          {ppc32::cr1, 152},
557          {ppc32::cr2, 153},
558          {ppc32::cr3, 154},
559          {ppc32::cr4, 155},
560          {ppc32::cr5, 156},
561          {ppc32::cr6, 157},
562          {ppc32::cr7, 158},
563          {ppc32::cr, 159},
564          {ppc32::sprg4, 160},
565          {ppc32::sprg4_ro, 160},
566          {ppc32::sprg5, 161},
567          {ppc32::sprg5_ro, 161},
568          {ppc32::sprg6, 162},
569          {ppc32::sprg6_ro, 162},
570          {ppc32::sprg7, 163},
571          {ppc32::sprg7_ro, 163}
572    };
573    }
574    return mrmap;
575 }
576
577 RegisterMap &machRegIndex_ppc_64() {
578    static RegisterMap mrmap;
579    if (mrmap.empty()) {
580       mrmap = {
581          {ppc64::r0, 0},
582          {ppc64::r1, 1},
583          {ppc64::r2, 2},
584          {ppc64::r3, 3},
585          {ppc64::r4, 4},
586          {ppc64::r5, 5},
587          {ppc64::r6, 6},
588          {ppc64::r7, 7},
589          {ppc64::r8, 8},
590          {ppc64::r9, 9},
591          {ppc64::r10, 10},
592          {ppc64::r11, 11},
593          {ppc64::r12, 12},
594          {ppc64::r13, 13},
595          {ppc64::r14, 14},
596          {ppc64::r15, 15},
597          {ppc64::r16, 16},
598          {ppc64::r17, 17},
599          {ppc64::r18, 18},
600          {ppc64::r19, 19},
601          {ppc64::r20, 20},
602          {ppc64::r21, 21},
603          {ppc64::r22, 22},
604          {ppc64::r23, 23},
605          {ppc64::r24, 24},
606          {ppc64::r25, 25},
607          {ppc64::r26, 26},
608          {ppc64::r27, 27},
609          {ppc64::r28, 28},
610          {ppc64::r29, 29},
611          {ppc64::r30, 30},
612          {ppc64::r31, 31},
613          {ppc64::fpr0, 32},
614          {ppc64::fpr1, 33},
615          {ppc64::fpr2, 34},
616          {ppc64::fpr3, 35},
617          {ppc64::fpr4, 36},
618          {ppc64::fpr5, 37},
619          {ppc64::fpr6, 38},
620          {ppc64::fpr7, 39},
621          {ppc64::fpr8, 40},
622          {ppc64::fpr9, 41},
623          {ppc64::fpr10, 42},
624          {ppc64::fpr11, 43},
625          {ppc64::fpr12, 44},
626          {ppc64::fpr13, 45},
627          {ppc64::fpr14, 46},
628          {ppc64::fpr15, 47},
629          {ppc64::fpr16, 48},
630          {ppc64::fpr17, 49},
631          {ppc64::fpr18, 50},
632          {ppc64::fpr19, 51},
633          {ppc64::fpr20, 52},
634          {ppc64::fpr21, 53},
635          {ppc64::fpr22, 54},
636          {ppc64::fpr23, 55},
637          {ppc64::fpr24, 56},
638          {ppc64::fpr25, 57},
639          {ppc64::fpr26, 58},
640          {ppc64::fpr27, 59},
641          {ppc64::fpr28, 60},
642          {ppc64::fpr29, 61},
643          {ppc64::fpr30, 62},
644          {ppc64::fpr31, 63},
645          {ppc64::fsr0, 64},
646          {ppc64::fsr1, 65},
647          {ppc64::fsr2, 66},
648          {ppc64::fsr3, 67},
649          {ppc64::fsr4, 68},
650          {ppc64::fsr5, 69},
651          {ppc64::fsr6, 70},
652          {ppc64::fsr7, 71},
653          {ppc64::fsr8, 72},
654          {ppc64::fsr9, 73},
655          {ppc64::fsr10, 74},
656          {ppc64::fsr11, 75},
657          {ppc64::fsr12, 76},
658          {ppc64::fsr13, 77},
659          {ppc64::fsr14, 78},
660          {ppc64::fsr15, 79},
661          {ppc64::fsr16, 80},
662          {ppc64::fsr17, 81},
663          {ppc64::fsr18, 82},
664          {ppc64::fsr19, 83},
665          {ppc64::fsr20, 84},
666          {ppc64::fsr21, 85},
667          {ppc64::fsr22, 86},
668          {ppc64::fsr23, 87},
669          {ppc64::fsr24, 88},
670          {ppc64::fsr25, 89},
671          {ppc64::fsr26, 90},
672          {ppc64::fsr27, 91},
673          {ppc64::fsr28, 92},
674          {ppc64::fsr29, 93},
675          {ppc64::fsr30, 94},
676          {ppc64::fsr31, 95},
677          {ppc64::mq, 96},
678          {ppc64::xer, 97},
679          {ppc64::lr, 98},
680          {ppc64::ctr, 99},
681          {ppc64::dsisr, 100},
682          {ppc64::dar, 101},
683          {ppc64::dec, 102},
684          {ppc64::sdr1, 103},
685          {ppc64::srr0, 104},
686          {ppc64::srr1, 105},
687          {ppc64::sprg0, 106},
688          {ppc64::sprg1, 107},
689          {ppc64::sprg2, 108},
690          {ppc64::sprg3, 109},
691          {ppc64::sprg3_ro, 109},
692          {ppc64::ear, 110},
693          {ppc64::tbl_wo, 111},
694          {ppc64::tbl_ro, 111},
695          {ppc64::tbu_wo, 112},
696          {ppc64::tbu_ro, 112},
697          {ppc64::pvr, 113},
698          {ppc64::ibat0u, 114},
699          {ppc64::ibat0l, 115},
700          {ppc64::ibat1u, 116},
701          {ppc64::ibat1l, 117},
702          {ppc64::ibat2u, 118},
703          {ppc64::ibat2l, 119},
704          {ppc64::ibat3u, 120},
705          {ppc64::ibat3l, 121},
706          {ppc64::dbat0u, 122},
707          {ppc64::dbat0l, 123},
708          {ppc64::dbat1u, 124},
709          {ppc64::dbat1l, 125},
710          {ppc64::dbat2u, 126},
711          {ppc64::dbat2l, 127},
712          {ppc64::dbat3u, 128},
713          {ppc64::dbat3l, 129},
714          {ppc64::pc, 130},
715          {ppc64::fpscw, 131},
716          {ppc64::fpscw0, 132},
717          {ppc64::fpscw1, 133},
718          {ppc64::fpscw2, 134},
719          {ppc64::fpscw3, 135},
720          {ppc64::fpscw4, 136},
721          {ppc64::fpscw5, 137},
722          {ppc64::fpscw6, 138},
723          {ppc64::fpscw7, 139},
724          {ppc64::msr, 140},
725          {ppc64::ivpr, 141},
726          {ppc64::ivor8, 142},
727          {ppc64::seg0, 143},
728          {ppc64::seg1, 144},
729          {ppc64::seg2, 145},
730          {ppc64::seg3, 146},
731          {ppc64::seg4, 147},
732          {ppc64::seg5, 148},
733          {ppc64::seg6, 149},
734          {ppc64::seg7, 150},
735          {ppc64::cr0, 151},
736          {ppc64::cr1, 152},
737          {ppc64::cr2, 153},
738          {ppc64::cr3, 154},
739          {ppc64::cr4, 155},
740          {ppc64::cr5, 156},
741          {ppc64::cr6, 157},
742          {ppc64::cr7, 158},
743          {ppc64::cr, 159},
744          {ppc64::sprg4, 160},
745          {ppc64::sprg4_ro, 160},
746          {ppc64::sprg5, 161},
747          {ppc64::sprg5_ro, 161},
748          {ppc64::sprg6, 162},
749          {ppc64::sprg6_ro, 162},
750          {ppc64::sprg7, 163},
751          {ppc64::sprg7_ro, 163}
752    };
753    }
754    return mrmap;
755 }
756
757 RegisterMap &machRegIndex_aarch64() {
758    static RegisterMap mrmap;
759    if (mrmap.empty()) {
760       mrmap = {
761          {aarch64::x0, 0},
762          {aarch64::x1, 1},
763          {aarch64::x2, 2},
764          {aarch64::x3, 3},
765          {aarch64::x4, 4},
766          {aarch64::x5, 5},
767          {aarch64::x6, 6},
768          {aarch64::x7, 7},
769          {aarch64::x8, 8},
770          {aarch64::x9, 9},
771          {aarch64::x10, 10},
772          {aarch64::x11, 11},
773          {aarch64::x12, 12},
774          {aarch64::x13, 13},
775          {aarch64::x14, 14},
776          {aarch64::x15, 15},
777          {aarch64::x16, 16},
778          {aarch64::x17, 17},
779          {aarch64::x18, 18},
780          {aarch64::x19, 19},
781          {aarch64::x20, 20},
782          {aarch64::x21, 21},
783          {aarch64::x22, 22},
784          {aarch64::x23, 23},
785          {aarch64::x24, 24},
786          {aarch64::x25, 25},
787          {aarch64::x26, 26},
788          {aarch64::x27, 27},
789          {aarch64::x28, 28},
790          {aarch64::x29, 29},
791          {aarch64::x30, 30} };
792    }
793    return mrmap;
794 }
795
796 #else
797   // This fails on VS 2015... but not VS 2010...
798 RegisterMap &machRegIndex_x86() {
799    static RegisterMap mrmap;
800    if (mrmap.empty()) {
801       mrmap = map_list_of
802          (x86::eax, 0)
803          (x86::ecx, 1)
804          (x86::edx, 2)
805          (x86::ebx, 3)
806          (x86::esp, 4)
807          (x86::ebp, 5)
808          (x86::esi, 6)
809          (x86::edi, 7)
810          (x86::eip, 8)
811          (x86::cf, 9)
812          (x86::flag1, 10)
813          (x86::pf, 11)
814          (x86::flag3, 12)
815          (x86::af, 13)
816          (x86::flag5, 14)
817          (x86::zf, 15)
818          (x86::sf, 16)
819          (x86::tf, 17)
820          (x86::if_, 18)
821          (x86::df, 19)
822          (x86::of, 20)
823          (x86::flagc, 21)
824          (x86::flagd, 22)
825          (x86::nt_, 23)
826          (x86::flagf, 24)
827          (x86::rf, 25)
828          (x86::ds, 26)
829          (x86::es, 27)
830          (x86::fs, 28)
831          (x86::gs, 29)
832          (x86::cs, 30)
833          (x86::ss, 31)
834          (x86::oeax, 32)
835          (x86::fsbase, 33)
836          (x86::gsbase, 34)
837          (x86::xmm0, 35)
838          (x86::xmm1, 36)
839          (x86::xmm2, 37)
840          (x86::xmm3, 38)
841          (x86::xmm4, 39)
842          (x86::xmm5, 40)
843          (x86::xmm6, 41)
844          (x86::xmm7, 42)
845          (x86::mm0, 43)  // mm0 to mm7 and st0 to st7 collapse to mm0
846          (x86::cr0, 44)
847          (x86::cr1, 45)
848          (x86::cr2, 46)
849          (x86::cr3, 47)
850          (x86::cr4, 48)
851          (x86::cr5, 49)
852          (x86::cr6, 50)
853          (x86::cr7, 51)
854          (x86::dr0, 52)
855          (x86::dr1, 53)
856          (x86::dr2, 54)
857          (x86::dr3, 55)
858          (x86::dr4, 56)
859          (x86::dr5, 57)
860          (x86::dr6, 58)
861          (x86::dr7, 59)
862          (x86::tr0, 60)
863          (x86::tr1, 61)
864          (x86::tr2, 62)
865          (x86::tr3, 63)
866          (x86::tr4, 64)
867          (x86::tr5, 65)
868          (x86::tr6, 66)
869          (x86::tr7, 67);
870    }
871    return mrmap;
872 }
873
874 RegisterMap &machRegIndex_x86_64() {
875    static RegisterMap mrmap;
876    if (mrmap.empty()) {
877       mrmap = map_list_of
878          (x86_64::rax, 0)
879          (x86_64::rcx, 1)
880          (x86_64::rdx, 2)
881          (x86_64::rbx, 3)
882          (x86_64::rsp, 4)
883          (x86_64::rbp, 5)
884          (x86_64::rsi, 6)
885          (x86_64::rdi, 7)
886          (x86_64::r8, 8)
887          (x86_64::r9, 9)
888          (x86_64::r10, 10)
889          (x86_64::r11, 11)
890          (x86_64::r12, 12)
891          (x86_64::r13, 13)
892          (x86_64::r14, 14)
893          (x86_64::r15, 15)
894          (x86_64::rip, 16)
895          (x86_64::cf, 17)
896          (x86_64::pf, 18)
897          (x86_64::af, 19)
898          (x86_64::zf, 20)
899          (x86_64::sf, 21)
900          (x86_64::tf, 22)
901          (x86_64::if_, 23)
902          (x86_64::df, 24)
903          (x86_64::of, 25)
904          (x86_64::nt_, 26)
905          (x86_64::rf, 27)
906          (x86_64::ds, 28)
907          (x86_64::es, 29)
908          (x86_64::fs, 30)
909          (x86_64::gs, 31)
910          (x86_64::cs, 32)
911          (x86_64::ss, 33)
912          (x86_64::orax, 34)
913          (x86_64::fsbase, 35)
914          (x86_64::gsbase, 36)
915          (x86_64::k0, 37)
916          (x86_64::k1, 38)
917          (x86_64::k2, 39)
918          (x86_64::k3, 40)
919          (x86_64::k4, 41)
920          (x86_64::k5, 42)
921          (x86_64::k6, 43)
922          (x86_64::k7, 44)
923          (x86_64::zmm0, 45)
924          (x86_64::zmm1, 46)
925          (x86_64::zmm2, 47)
926          (x86_64::zmm3, 48)
927          (x86_64::zmm4, 49)
928          (x86_64::zmm5, 50)
929          (x86_64::zmm6, 51)
930          (x86_64::zmm7, 52)
931          (x86_64::zmm8, 53)
932          (x86_64::zmm9, 54)
933          (x86_64::zmm10, 55)
934          (x86_64::zmm11, 56)
935          (x86_64::zmm12, 57)
936          (x86_64::zmm13, 58)
937          (x86_64::zmm14, 59)
938          (x86_64::zmm15, 60)
939          (x86_64::zmm16, 61)
940          (x86_64::zmm17, 62)
941          (x86_64::zmm18, 63)
942          (x86_64::zmm19, 64)
943          (x86_64::zmm20, 65)
944          (x86_64::zmm21, 66)
945          (x86_64::zmm22, 67)
946          (x86_64::zmm23, 68)
947          (x86_64::zmm24, 69)
948          (x86_64::zmm25, 70)
949          (x86_64::zmm26, 71)
950          (x86_64::zmm27, 72)
951          (x86_64::zmm28, 73)
952          (x86_64::zmm29, 74)
953          (x86_64::zmm30, 75)
954          (x86_64::zmm31, 75)
955          (x86_64::ymm0, 76)
956          (x86_64::ymm1, 77)
957          (x86_64::ymm2, 78)
958          (x86_64::ymm3, 79)
959          (x86_64::ymm4, 80)
960          (x86_64::ymm5, 81)
961          (x86_64::ymm6, 82)
962          (x86_64::ymm7, 83)
963          (x86_64::ymm8, 84)
964          (x86_64::ymm9, 85)
965          (x86_64::ymm10, 86)
966          (x86_64::ymm11, 87)
967          (x86_64::ymm12, 88)
968          (x86_64::ymm13, 89)
969          (x86_64::ymm14, 90)
970          (x86_64::ymm15, 91)
971          (x86_64::ymm16, 92)
972          (x86_64::ymm17, 93)
973          (x86_64::ymm18, 94)
974          (x86_64::ymm19, 95)
975          (x86_64::ymm20, 96)
976          (x86_64::ymm21, 97)
977          (x86_64::ymm22, 98)
978          (x86_64::ymm23, 99)
979          (x86_64::ymm24, 100)
980          (x86_64::ymm25, 101)
981          (x86_64::ymm26, 102)
982          (x86_64::ymm27, 103)
983          (x86_64::ymm28, 104)
984          (x86_64::ymm29, 105)
985          (x86_64::ymm30, 106)
986          (x86_64::ymm31, 107)
987          (x86_64::xmm0, 108)
988          (x86_64::xmm1, 109)
989          (x86_64::xmm2, 110)
990          (x86_64::xmm3, 111)
991          (x86_64::xmm4, 112)
992          (x86_64::xmm5, 113)
993          (x86_64::xmm6, 114)
994          (x86_64::xmm7, 115)
995          (x86_64::xmm8, 116)
996          (x86_64::xmm9, 117)
997          (x86_64::xmm10, 118)
998          (x86_64::xmm11, 119)
999          (x86_64::xmm12, 120)
1000          (x86_64::xmm13, 121)
1001          (x86_64::xmm14, 122)
1002          (x86_64::xmm15, 123)
1003          (x86_64::xmm16, 124)
1004          (x86_64::xmm17, 125)
1005          (x86_64::xmm18, 126)
1006          (x86_64::xmm19, 127)
1007          (x86_64::xmm20, 128)
1008          (x86_64::xmm21, 129)
1009          (x86_64::xmm22, 130)
1010          (x86_64::xmm23, 131)
1011          (x86_64::xmm24, 132)
1012          (x86_64::xmm25, 133)
1013          (x86_64::xmm26, 134)
1014          (x86_64::xmm27, 135)
1015          (x86_64::xmm28, 136)
1016          (x86_64::xmm29, 137)
1017          (x86_64::xmm30, 138)
1018          (x86_64::xmm31, 139)
1019          (x86_64::mm0, 140) // mm0 to mm7 and st0 to st7 collapse to mm0
1020          (x86_64::cr0, 141)
1021          (x86_64::cr1, 142)
1022          (x86_64::cr2, 143)
1023          (x86_64::cr3, 144)
1024          (x86_64::cr4, 145)
1025          (x86_64::cr5, 146)
1026          (x86_64::cr6, 147)
1027          (x86_64::cr7, 148)
1028          (x86_64::dr0, 149)
1029          (x86_64::dr1, 150)
1030          (x86_64::dr2, 151)
1031          (x86_64::dr3, 152)
1032          (x86_64::dr4, 153)
1033          (x86_64::dr5, 154)
1034          (x86_64::dr6, 155)
1035          (x86_64::dr7, 156)
1036          (x86_64::tr0, 157)
1037          (x86_64::tr1, 158)
1038          (x86_64::tr2, 159)
1039          (x86_64::tr3, 160)
1040          (x86_64::tr4, 161)
1041          (x86_64::tr5, 162)
1042          (x86_64::tr6, 163)
1043          (x86_64::tr7, 164)
1044          ;
1045    }
1046    return mrmap;
1047 }
1048
1049 RegisterMap &machRegIndex_ppc() {
1050    static RegisterMap mrmap;
1051    if (mrmap.empty()) {
1052       mrmap = map_list_of
1053          (ppc32::r0, 0)
1054          (ppc32::r1, 1)
1055          (ppc32::r2, 2)
1056          (ppc32::r3, 3)
1057          (ppc32::r4, 4)
1058          (ppc32::r5, 5)
1059          (ppc32::r6, 6)
1060          (ppc32::r7, 7)
1061          (ppc32::r8, 8)
1062          (ppc32::r9, 9)
1063          (ppc32::r10, 10)
1064          (ppc32::r11, 11)
1065          (ppc32::r12, 12)
1066          (ppc32::r13, 13)
1067          (ppc32::r14, 14)
1068          (ppc32::r15, 15)
1069          (ppc32::r16, 16)
1070          (ppc32::r17, 17)
1071          (ppc32::r18, 18)
1072          (ppc32::r19, 19)
1073          (ppc32::r20, 20)
1074          (ppc32::r21, 21)
1075          (ppc32::r22, 22)
1076          (ppc32::r23, 23)
1077          (ppc32::r24, 24)
1078          (ppc32::r25, 25)
1079          (ppc32::r26, 26)
1080          (ppc32::r27, 27)
1081          (ppc32::r28, 28)
1082          (ppc32::r29, 29)
1083          (ppc32::r30, 30)
1084          (ppc32::r31, 31)
1085          (ppc32::fpr0, 32)
1086          (ppc32::fpr1, 33)
1087          (ppc32::fpr2, 34)
1088          (ppc32::fpr3, 35)
1089          (ppc32::fpr4, 36)
1090          (ppc32::fpr5, 37)
1091          (ppc32::fpr6, 38)
1092          (ppc32::fpr7, 39)
1093          (ppc32::fpr8, 40)
1094          (ppc32::fpr9, 41)
1095          (ppc32::fpr10, 42)
1096          (ppc32::fpr11, 43)
1097          (ppc32::fpr12, 44)
1098          (ppc32::fpr13, 45)
1099          (ppc32::fpr14, 46)
1100          (ppc32::fpr15, 47)
1101          (ppc32::fpr16, 48)
1102          (ppc32::fpr17, 49)
1103          (ppc32::fpr18, 50)
1104          (ppc32::fpr19, 51)
1105          (ppc32::fpr20, 52)
1106          (ppc32::fpr21, 53)
1107          (ppc32::fpr22, 54)
1108          (ppc32::fpr23, 55)
1109          (ppc32::fpr24, 56)
1110          (ppc32::fpr25, 57)
1111          (ppc32::fpr26, 58)
1112          (ppc32::fpr27, 59)
1113          (ppc32::fpr28, 60)
1114          (ppc32::fpr29, 61)
1115          (ppc32::fpr30, 62)
1116          (ppc32::fpr31, 63)
1117          (ppc32::fsr0, 64)
1118          (ppc32::fsr1, 65)
1119          (ppc32::fsr2, 66)
1120          (ppc32::fsr3, 67)
1121          (ppc32::fsr4, 68)
1122          (ppc32::fsr5, 69)
1123          (ppc32::fsr6, 70)
1124          (ppc32::fsr7, 71)
1125          (ppc32::fsr8, 72)
1126          (ppc32::fsr9, 73)
1127          (ppc32::fsr10, 74)
1128          (ppc32::fsr11, 75)
1129          (ppc32::fsr12, 76)
1130          (ppc32::fsr13, 77)
1131          (ppc32::fsr14, 78)
1132          (ppc32::fsr15, 79)
1133          (ppc32::fsr16, 80)
1134          (ppc32::fsr17, 81)
1135          (ppc32::fsr18, 82)
1136          (ppc32::fsr19, 83)
1137          (ppc32::fsr20, 84)
1138          (ppc32::fsr21, 85)
1139          (ppc32::fsr22, 86)
1140          (ppc32::fsr23, 87)
1141          (ppc32::fsr24, 88)
1142          (ppc32::fsr25, 89)
1143          (ppc32::fsr26, 90)
1144          (ppc32::fsr27, 91)
1145          (ppc32::fsr28, 92)
1146          (ppc32::fsr29, 93)
1147          (ppc32::fsr30, 94)
1148          (ppc32::fsr31, 95)
1149          (ppc32::mq, 96)
1150          (ppc32::xer, 97)
1151          (ppc32::lr, 98)
1152          (ppc32::ctr, 99)
1153          (ppc32::dsisr, 100)
1154          (ppc32::dar, 101)
1155          (ppc32::dec, 102)
1156          (ppc32::sdr1, 103)
1157          (ppc32::srr0, 104)
1158          (ppc32::srr1, 105)
1159          (ppc32::sprg0, 106)
1160          (ppc32::sprg1, 107)
1161          (ppc32::sprg2, 108)
1162          (ppc32::sprg3, 109)
1163          (ppc32::sprg3_ro, 109)
1164          (ppc32::ear, 110)
1165          (ppc32::tbl_wo, 111)
1166          (ppc32::tbl_ro, 111)
1167          (ppc32::tbu_wo, 112)
1168          (ppc32::tbu_ro, 112)
1169          (ppc32::pvr, 113)
1170          (ppc32::ibat0u, 114)
1171          (ppc32::ibat0l, 115)
1172          (ppc32::ibat1u, 116)
1173          (ppc32::ibat1l, 117)
1174          (ppc32::ibat2u, 118)
1175          (ppc32::ibat2l, 119)
1176          (ppc32::ibat3u, 120)
1177          (ppc32::ibat3l, 121)
1178          (ppc32::dbat0u, 122)
1179          (ppc32::dbat0l, 123)
1180          (ppc32::dbat1u, 124)
1181          (ppc32::dbat1l, 125)
1182          (ppc32::dbat2u, 126)
1183          (ppc32::dbat2l, 127)
1184          (ppc32::dbat3u, 128)
1185          (ppc32::dbat3l, 129)
1186          (ppc32::pc, 130)
1187          (ppc32::fpscw, 131)
1188          (ppc32::fpscw0, 132)
1189          (ppc32::fpscw1, 133)
1190          (ppc32::fpscw2, 134)
1191          (ppc32::fpscw3, 135)
1192          (ppc32::fpscw4, 136)
1193          (ppc32::fpscw5, 137)
1194          (ppc32::fpscw6, 138)
1195          (ppc32::fpscw7, 139)
1196          (ppc32::msr, 140)
1197          (ppc32::ivpr, 141)
1198          (ppc32::ivor8, 142)
1199          (ppc32::seg0, 143)
1200          (ppc32::seg1, 144)
1201          (ppc32::seg2, 145)
1202          (ppc32::seg3, 146)
1203          (ppc32::seg4, 147)
1204          (ppc32::seg5, 148)
1205          (ppc32::seg6, 149)
1206          (ppc32::seg7, 150)
1207          (ppc32::cr0, 151)
1208          (ppc32::cr1, 152)
1209          (ppc32::cr2, 153)
1210          (ppc32::cr3, 154)
1211          (ppc32::cr4, 155)
1212          (ppc32::cr5, 156)
1213          (ppc32::cr6, 157)
1214          (ppc32::cr7, 158)
1215          (ppc32::cr, 159)
1216          (ppc32::sprg4, 160)
1217          (ppc32::sprg4_ro, 160)
1218          (ppc32::sprg5, 161)
1219          (ppc32::sprg5_ro, 161)
1220          (ppc32::sprg6, 162)
1221          (ppc32::sprg6_ro, 162)
1222          (ppc32::sprg7, 163)
1223          (ppc32::sprg7_ro, 163);
1224    }
1225    return mrmap;
1226 }
1227
1228 RegisterMap &machRegIndex_ppc_64() {
1229    static RegisterMap mrmap;
1230    if (mrmap.empty()) {
1231       mrmap = map_list_of
1232          (ppc64::r0, 0)
1233          (ppc64::r1, 1)
1234          (ppc64::r2, 2)
1235          (ppc64::r3, 3)
1236          (ppc64::r4, 4)
1237          (ppc64::r5, 5)
1238          (ppc64::r6, 6)
1239          (ppc64::r7, 7)
1240          (ppc64::r8, 8)
1241          (ppc64::r9, 9)
1242          (ppc64::r10, 10)
1243          (ppc64::r11, 11)
1244          (ppc64::r12, 12)
1245          (ppc64::r13, 13)
1246          (ppc64::r14, 14)
1247          (ppc64::r15, 15)
1248          (ppc64::r16, 16)
1249          (ppc64::r17, 17)
1250          (ppc64::r18, 18)
1251          (ppc64::r19, 19)
1252          (ppc64::r20, 20)
1253          (ppc64::r21, 21)
1254          (ppc64::r22, 22)
1255          (ppc64::r23, 23)
1256          (ppc64::r24, 24)
1257          (ppc64::r25, 25)
1258          (ppc64::r26, 26)
1259          (ppc64::r27, 27)
1260          (ppc64::r28, 28)
1261          (ppc64::r29, 29)
1262          (ppc64::r30, 30)
1263          (ppc64::r31, 31)
1264          (ppc64::fpr0, 32)
1265          (ppc64::fpr1, 33)
1266          (ppc64::fpr2, 34)
1267          (ppc64::fpr3, 35)
1268          (ppc64::fpr4, 36)
1269          (ppc64::fpr5, 37)
1270          (ppc64::fpr6, 38)
1271          (ppc64::fpr7, 39)
1272          (ppc64::fpr8, 40)
1273          (ppc64::fpr9, 41)
1274          (ppc64::fpr10, 42)
1275          (ppc64::fpr11, 43)
1276          (ppc64::fpr12, 44)
1277          (ppc64::fpr13, 45)
1278          (ppc64::fpr14, 46)
1279          (ppc64::fpr15, 47)
1280          (ppc64::fpr16, 48)
1281          (ppc64::fpr17, 49)
1282          (ppc64::fpr18, 50)
1283          (ppc64::fpr19, 51)
1284          (ppc64::fpr20, 52)
1285          (ppc64::fpr21, 53)
1286          (ppc64::fpr22, 54)
1287          (ppc64::fpr23, 55)
1288          (ppc64::fpr24, 56)
1289          (ppc64::fpr25, 57)
1290          (ppc64::fpr26, 58)
1291          (ppc64::fpr27, 59)
1292          (ppc64::fpr28, 60)
1293          (ppc64::fpr29, 61)
1294          (ppc64::fpr30, 62)
1295          (ppc64::fpr31, 63)
1296          (ppc64::fsr0, 64)
1297          (ppc64::fsr1, 65)
1298          (ppc64::fsr2, 66)
1299          (ppc64::fsr3, 67)
1300          (ppc64::fsr4, 68)
1301          (ppc64::fsr5, 69)
1302          (ppc64::fsr6, 70)
1303          (ppc64::fsr7, 71)
1304          (ppc64::fsr8, 72)
1305          (ppc64::fsr9, 73)
1306          (ppc64::fsr10, 74)
1307          (ppc64::fsr11, 75)
1308          (ppc64::fsr12, 76)
1309          (ppc64::fsr13, 77)
1310          (ppc64::fsr14, 78)
1311          (ppc64::fsr15, 79)
1312          (ppc64::fsr16, 80)
1313          (ppc64::fsr17, 81)
1314          (ppc64::fsr18, 82)
1315          (ppc64::fsr19, 83)
1316          (ppc64::fsr20, 84)
1317          (ppc64::fsr21, 85)
1318          (ppc64::fsr22, 86)
1319          (ppc64::fsr23, 87)
1320          (ppc64::fsr24, 88)
1321          (ppc64::fsr25, 89)
1322          (ppc64::fsr26, 90)
1323          (ppc64::fsr27, 91)
1324          (ppc64::fsr28, 92)
1325          (ppc64::fsr29, 93)
1326          (ppc64::fsr30, 94)
1327          (ppc64::fsr31, 95)
1328          (ppc64::mq, 96)
1329          (ppc64::xer, 97)
1330          (ppc64::lr, 98)
1331          (ppc64::ctr, 99)
1332          (ppc64::dsisr, 100)
1333          (ppc64::dar, 101)
1334          (ppc64::dec, 102)
1335          (ppc64::sdr1, 103)
1336          (ppc64::srr0, 104)
1337          (ppc64::srr1, 105)
1338          (ppc64::sprg0, 106)
1339          (ppc64::sprg1, 107)
1340          (ppc64::sprg2, 108)
1341          (ppc64::sprg3, 109)
1342          (ppc64::sprg3_ro, 109)
1343          (ppc64::ear, 110)
1344          (ppc64::tbl_wo, 111)
1345          (ppc64::tbl_ro, 111)
1346          (ppc64::tbu_wo, 112)
1347          (ppc64::tbu_ro, 112)
1348          (ppc64::pvr, 113)
1349          (ppc64::ibat0u, 114)
1350          (ppc64::ibat0l, 115)
1351          (ppc64::ibat1u, 116)
1352          (ppc64::ibat1l, 117)
1353          (ppc64::ibat2u, 118)
1354          (ppc64::ibat2l, 119)
1355          (ppc64::ibat3u, 120)
1356          (ppc64::ibat3l, 121)
1357          (ppc64::dbat0u, 122)
1358          (ppc64::dbat0l, 123)
1359          (ppc64::dbat1u, 124)
1360          (ppc64::dbat1l, 125)
1361          (ppc64::dbat2u, 126)
1362          (ppc64::dbat2l, 127)
1363          (ppc64::dbat3u, 128)
1364          (ppc64::dbat3l, 129)
1365          (ppc64::pc, 130)
1366          (ppc64::fpscw, 131)
1367          (ppc64::fpscw0, 132)
1368          (ppc64::fpscw1, 133)
1369          (ppc64::fpscw2, 134)
1370          (ppc64::fpscw3, 135)
1371          (ppc64::fpscw4, 136)
1372          (ppc64::fpscw5, 137)
1373          (ppc64::fpscw6, 138)
1374          (ppc64::fpscw7, 139)
1375          (ppc64::msr, 140)
1376          (ppc64::ivpr, 141)
1377          (ppc64::ivor8, 142)
1378          (ppc64::seg0, 143)
1379          (ppc64::seg1, 144)
1380          (ppc64::seg2, 145)
1381          (ppc64::seg3, 146)
1382          (ppc64::seg4, 147)
1383          (ppc64::seg5, 148)
1384          (ppc64::seg6, 149)
1385          (ppc64::seg7, 150)
1386          (ppc64::cr0, 151)
1387          (ppc64::cr1, 152)
1388          (ppc64::cr2, 153)
1389          (ppc64::cr3, 154)
1390          (ppc64::cr4, 155)
1391          (ppc64::cr5, 156)
1392          (ppc64::cr6, 157)
1393          (ppc64::cr7, 158)
1394          (ppc64::cr, 159)
1395          (ppc64::sprg4, 160)
1396          (ppc64::sprg4_ro, 160)
1397          (ppc64::sprg5, 161)
1398          (ppc64::sprg5_ro, 161)
1399          (ppc64::sprg6, 162)
1400          (ppc64::sprg6_ro, 162)
1401          (ppc64::sprg7, 163)
1402          (ppc64::sprg7_ro, 163);
1403    }
1404    return mrmap;
1405 }
1406
1407 RegisterMap &machRegIndex_aarch64() {
1408    static RegisterMap mrmap;
1409    if (mrmap.empty()) {
1410       mrmap =  map_list_of
1411                 (aarch64::x0, 0)
1412         (aarch64::x1, 1)
1413         (aarch64::x2, 2)
1414         (aarch64::x3, 3)
1415         (aarch64::x4, 4)
1416         (aarch64::x5, 5)
1417         (aarch64::x6, 6)
1418         (aarch64::x7, 7)
1419         (aarch64::x8, 8)
1420         (aarch64::x9, 9)
1421         (aarch64::x10, 10)
1422         (aarch64::x11, 11)
1423         (aarch64::x12, 12)
1424         (aarch64::x13, 13)
1425         (aarch64::x14, 14)
1426         (aarch64::x15, 15)
1427         (aarch64::x16, 16)
1428         (aarch64::x17, 17)
1429         (aarch64::x18, 18)
1430         (aarch64::x19, 19)
1431         (aarch64::x20, 20)
1432         (aarch64::x21, 21)
1433         (aarch64::x22, 22)
1434         (aarch64::x23, 23)
1435         (aarch64::x24, 24)
1436         (aarch64::x25, 25)
1437         (aarch64::x26, 26)
1438         (aarch64::x27, 27)
1439         (aarch64::x28, 28)
1440         (aarch64::x29, 29)
1441         (aarch64::x30, 30);
1442          }
1443         return mrmap;
1444 }
1445
1446 #endif
1447
1448 };
1449 };