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