1 /********************************************************
2 *
3 * Warning!
4 * This file was generated automatically.
5 * Please do not edit. Changes should be made in the
6 * appropriate *.tt file.
7 *
8 */
9 using System;
10 using System.Linq;
11 using System.Collections.Generic;
12 using Antmicro.Renode.Peripherals.CPU.Registers;
13 using Antmicro.Renode.Utilities.Binding;
14 using Antmicro.Renode.Exceptions;
15 
16 namespace Antmicro.Renode.Peripherals.CPU
17 {
18     public partial class X86_64
19     {
SetRegister(int register, RegisterValue value)20         public override void SetRegister(int register, RegisterValue value)
21         {
22             if(!mapping.TryGetValue((X86_64Registers)register, out var r))
23             {
24                 throw new RecoverableException($"Wrong register index: {register}");
25             }
26 
27             SetRegisterValue64(r.Index, checked((ulong)value));
28         }
29 
GetRegister(int register)30         public override RegisterValue GetRegister(int register)
31         {
32             if(!mapping.TryGetValue((X86_64Registers)register, out var r))
33             {
34                 throw new RecoverableException($"Wrong register index: {register}");
35             }
36             return GetRegisterValue64(r.Index);
37         }
38 
GetRegisters()39         public override IEnumerable<CPURegister> GetRegisters()
40         {
41             return mapping.Values.OrderBy(x => x.Index);
42         }
43 
44         [Register]
45         public RegisterValue RAX
46         {
47             get
48             {
49                 return GetRegisterValue64((int)X86_64Registers.RAX);
50             }
51             set
52             {
53                 SetRegisterValue64((int)X86_64Registers.RAX, value);
54             }
55         }
56         [Register]
57         public RegisterValue RCX
58         {
59             get
60             {
61                 return GetRegisterValue64((int)X86_64Registers.RCX);
62             }
63             set
64             {
65                 SetRegisterValue64((int)X86_64Registers.RCX, value);
66             }
67         }
68         [Register]
69         public RegisterValue RDX
70         {
71             get
72             {
73                 return GetRegisterValue64((int)X86_64Registers.RDX);
74             }
75             set
76             {
77                 SetRegisterValue64((int)X86_64Registers.RDX, value);
78             }
79         }
80         [Register]
81         public RegisterValue RBX
82         {
83             get
84             {
85                 return GetRegisterValue64((int)X86_64Registers.RBX);
86             }
87             set
88             {
89                 SetRegisterValue64((int)X86_64Registers.RBX, value);
90             }
91         }
92         [Register]
93         public RegisterValue RSP
94         {
95             get
96             {
97                 return GetRegisterValue64((int)X86_64Registers.RSP);
98             }
99             set
100             {
101                 SetRegisterValue64((int)X86_64Registers.RSP, value);
102             }
103         }
104         [Register]
105         public RegisterValue RBP
106         {
107             get
108             {
109                 return GetRegisterValue64((int)X86_64Registers.RBP);
110             }
111             set
112             {
113                 SetRegisterValue64((int)X86_64Registers.RBP, value);
114             }
115         }
116         [Register]
117         public RegisterValue RSI
118         {
119             get
120             {
121                 return GetRegisterValue64((int)X86_64Registers.RSI);
122             }
123             set
124             {
125                 SetRegisterValue64((int)X86_64Registers.RSI, value);
126             }
127         }
128         [Register]
129         public RegisterValue RDI
130         {
131             get
132             {
133                 return GetRegisterValue64((int)X86_64Registers.RDI);
134             }
135             set
136             {
137                 SetRegisterValue64((int)X86_64Registers.RDI, value);
138             }
139         }
140         [Register]
141         public RegisterValue R8
142         {
143             get
144             {
145                 return GetRegisterValue64((int)X86_64Registers.R8);
146             }
147             set
148             {
149                 SetRegisterValue64((int)X86_64Registers.R8, value);
150             }
151         }
152         [Register]
153         public RegisterValue R9
154         {
155             get
156             {
157                 return GetRegisterValue64((int)X86_64Registers.R9);
158             }
159             set
160             {
161                 SetRegisterValue64((int)X86_64Registers.R9, value);
162             }
163         }
164         [Register]
165         public RegisterValue R10
166         {
167             get
168             {
169                 return GetRegisterValue64((int)X86_64Registers.R10);
170             }
171             set
172             {
173                 SetRegisterValue64((int)X86_64Registers.R10, value);
174             }
175         }
176         [Register]
177         public RegisterValue R11
178         {
179             get
180             {
181                 return GetRegisterValue64((int)X86_64Registers.R11);
182             }
183             set
184             {
185                 SetRegisterValue64((int)X86_64Registers.R11, value);
186             }
187         }
188         [Register]
189         public RegisterValue R12
190         {
191             get
192             {
193                 return GetRegisterValue64((int)X86_64Registers.R12);
194             }
195             set
196             {
197                 SetRegisterValue64((int)X86_64Registers.R12, value);
198             }
199         }
200         [Register]
201         public RegisterValue R13
202         {
203             get
204             {
205                 return GetRegisterValue64((int)X86_64Registers.R13);
206             }
207             set
208             {
209                 SetRegisterValue64((int)X86_64Registers.R13, value);
210             }
211         }
212         [Register]
213         public RegisterValue R14
214         {
215             get
216             {
217                 return GetRegisterValue64((int)X86_64Registers.R14);
218             }
219             set
220             {
221                 SetRegisterValue64((int)X86_64Registers.R14, value);
222             }
223         }
224         [Register]
225         public RegisterValue R15
226         {
227             get
228             {
229                 return GetRegisterValue64((int)X86_64Registers.R15);
230             }
231             set
232             {
233                 SetRegisterValue64((int)X86_64Registers.R15, value);
234             }
235         }
236         [Register]
237         public RegisterValue RIP
238         {
239             get
240             {
241                 return GetRegisterValue64((int)X86_64Registers.RIP);
242             }
243             set
244             {
245                 SetRegisterValue64((int)X86_64Registers.RIP, value);
246             }
247         }
248         [Register]
249         public RegisterValue EFLAGS
250         {
251             get
252             {
253                 return GetRegisterValue64((int)X86_64Registers.EFLAGS);
254             }
255             set
256             {
257                 SetRegisterValue64((int)X86_64Registers.EFLAGS, value);
258             }
259         }
260         [Register]
261         public RegisterValue CS
262         {
263             get
264             {
265                 return GetRegisterValue64((int)X86_64Registers.CS);
266             }
267             set
268             {
269                 SetRegisterValue64((int)X86_64Registers.CS, value);
270             }
271         }
272         [Register]
273         public RegisterValue SS
274         {
275             get
276             {
277                 return GetRegisterValue64((int)X86_64Registers.SS);
278             }
279             set
280             {
281                 SetRegisterValue64((int)X86_64Registers.SS, value);
282             }
283         }
284         [Register]
285         public RegisterValue DS
286         {
287             get
288             {
289                 return GetRegisterValue64((int)X86_64Registers.DS);
290             }
291             set
292             {
293                 SetRegisterValue64((int)X86_64Registers.DS, value);
294             }
295         }
296         [Register]
297         public RegisterValue ES
298         {
299             get
300             {
301                 return GetRegisterValue64((int)X86_64Registers.ES);
302             }
303             set
304             {
305                 SetRegisterValue64((int)X86_64Registers.ES, value);
306             }
307         }
308         [Register]
309         public RegisterValue FS
310         {
311             get
312             {
313                 return GetRegisterValue64((int)X86_64Registers.FS);
314             }
315             set
316             {
317                 SetRegisterValue64((int)X86_64Registers.FS, value);
318             }
319         }
320         [Register]
321         public RegisterValue GS
322         {
323             get
324             {
325                 return GetRegisterValue64((int)X86_64Registers.GS);
326             }
327             set
328             {
329                 SetRegisterValue64((int)X86_64Registers.GS, value);
330             }
331         }
332         [Register]
333         public RegisterValue ST0
334         {
335             get
336             {
337                 return GetRegisterValue64((int)X86_64Registers.ST0);
338             }
339             set
340             {
341                 SetRegisterValue64((int)X86_64Registers.ST0, value);
342             }
343         }
344         [Register]
345         public RegisterValue ST1
346         {
347             get
348             {
349                 return GetRegisterValue64((int)X86_64Registers.ST1);
350             }
351             set
352             {
353                 SetRegisterValue64((int)X86_64Registers.ST1, value);
354             }
355         }
356         [Register]
357         public RegisterValue ST2
358         {
359             get
360             {
361                 return GetRegisterValue64((int)X86_64Registers.ST2);
362             }
363             set
364             {
365                 SetRegisterValue64((int)X86_64Registers.ST2, value);
366             }
367         }
368         [Register]
369         public RegisterValue ST3
370         {
371             get
372             {
373                 return GetRegisterValue64((int)X86_64Registers.ST3);
374             }
375             set
376             {
377                 SetRegisterValue64((int)X86_64Registers.ST3, value);
378             }
379         }
380         [Register]
381         public RegisterValue ST4
382         {
383             get
384             {
385                 return GetRegisterValue64((int)X86_64Registers.ST4);
386             }
387             set
388             {
389                 SetRegisterValue64((int)X86_64Registers.ST4, value);
390             }
391         }
392         [Register]
393         public RegisterValue ST5
394         {
395             get
396             {
397                 return GetRegisterValue64((int)X86_64Registers.ST5);
398             }
399             set
400             {
401                 SetRegisterValue64((int)X86_64Registers.ST5, value);
402             }
403         }
404         [Register]
405         public RegisterValue ST6
406         {
407             get
408             {
409                 return GetRegisterValue64((int)X86_64Registers.ST6);
410             }
411             set
412             {
413                 SetRegisterValue64((int)X86_64Registers.ST6, value);
414             }
415         }
416         [Register]
417         public RegisterValue ST7
418         {
419             get
420             {
421                 return GetRegisterValue64((int)X86_64Registers.ST7);
422             }
423             set
424             {
425                 SetRegisterValue64((int)X86_64Registers.ST7, value);
426             }
427         }
428         [Register]
429         public RegisterValue CR0
430         {
431             get
432             {
433                 return GetRegisterValue64((int)X86_64Registers.CR0);
434             }
435             set
436             {
437                 SetRegisterValue64((int)X86_64Registers.CR0, value);
438             }
439         }
440         [Register]
441         public RegisterValue CR1
442         {
443             get
444             {
445                 return GetRegisterValue64((int)X86_64Registers.CR1);
446             }
447             set
448             {
449                 SetRegisterValue64((int)X86_64Registers.CR1, value);
450             }
451         }
452         [Register]
453         public RegisterValue CR2
454         {
455             get
456             {
457                 return GetRegisterValue64((int)X86_64Registers.CR2);
458             }
459             set
460             {
461                 SetRegisterValue64((int)X86_64Registers.CR2, value);
462             }
463         }
464         [Register]
465         public RegisterValue CR3
466         {
467             get
468             {
469                 return GetRegisterValue64((int)X86_64Registers.CR3);
470             }
471             set
472             {
473                 SetRegisterValue64((int)X86_64Registers.CR3, value);
474             }
475         }
476         [Register]
477         public RegisterValue CR4
478         {
479             get
480             {
481                 return GetRegisterValue64((int)X86_64Registers.CR4);
482             }
483             set
484             {
485                 SetRegisterValue64((int)X86_64Registers.CR4, value);
486             }
487         }
488         [Register]
489         public override RegisterValue PC
490         {
491             get
492             {
493                 return GetRegisterValue64((int)X86_64Registers.PC);
494             }
495             set
496             {
497                 SetRegisterValue64((int)X86_64Registers.PC, value);
498             }
499         }
500 
InitializeRegisters()501         protected override void InitializeRegisters()
502         {
503         }
504 
505         // 649:  Field '...' is never assigned to, and will always have its default value null
506         #pragma warning disable 649
507 
508         [Import(Name = "tlib_set_register_value_64")]
509         protected Action<int, ulong> SetRegisterValue64;
510         [Import(Name = "tlib_get_register_value_64")]
511         protected Func<int, ulong> GetRegisterValue64;
512 
513         #pragma warning restore 649
514 
515         private static readonly Dictionary<X86_64Registers, CPURegister> mapping = new Dictionary<X86_64Registers, CPURegister>
516         {
517             { X86_64Registers.RAX,  new CPURegister(0, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RAX" }) },
518             { X86_64Registers.RBX,  new CPURegister(1, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RBX" }) },
519             { X86_64Registers.RCX,  new CPURegister(2, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RCX" }) },
520             { X86_64Registers.RDX,  new CPURegister(3, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RDX" }) },
521             { X86_64Registers.RSP,  new CPURegister(4, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RSP" }) },
522             { X86_64Registers.RBP,  new CPURegister(5, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RBP" }) },
523             { X86_64Registers.RSI,  new CPURegister(6, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RSI" }) },
524             { X86_64Registers.RDI,  new CPURegister(7, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RDI" }) },
525             { X86_64Registers.R8,  new CPURegister(8, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R8" }) },
526             { X86_64Registers.R9,  new CPURegister(9, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R9" }) },
527             { X86_64Registers.R10,  new CPURegister(10, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R10" }) },
528             { X86_64Registers.R11,  new CPURegister(11, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R11" }) },
529             { X86_64Registers.R12,  new CPURegister(12, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R12" }) },
530             { X86_64Registers.R13,  new CPURegister(13, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R13" }) },
531             { X86_64Registers.R14,  new CPURegister(14, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R14" }) },
532             { X86_64Registers.R15,  new CPURegister(15, 64, isGeneral: true, isReadonly: false, aliases: new [] { "R15" }) },
533             { X86_64Registers.RIP,  new CPURegister(16, 64, isGeneral: true, isReadonly: false, aliases: new [] { "RIP", "PC" }) },
534             { X86_64Registers.EFLAGS,  new CPURegister(17, 64, isGeneral: true, isReadonly: false, aliases: new [] { "EFLAGS" }) },
535             { X86_64Registers.CS,  new CPURegister(18, 64, isGeneral: true, isReadonly: false, aliases: new [] { "CS" }) },
536             { X86_64Registers.SS,  new CPURegister(19, 64, isGeneral: true, isReadonly: false, aliases: new [] { "SS" }) },
537             { X86_64Registers.DS,  new CPURegister(20, 64, isGeneral: true, isReadonly: false, aliases: new [] { "DS" }) },
538             { X86_64Registers.ES,  new CPURegister(21, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ES" }) },
539             { X86_64Registers.FS,  new CPURegister(22, 64, isGeneral: true, isReadonly: false, aliases: new [] { "FS" }) },
540             { X86_64Registers.GS,  new CPURegister(23, 64, isGeneral: true, isReadonly: false, aliases: new [] { "GS" }) },
541             { X86_64Registers.ST0,  new CPURegister(24, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST0" }) },
542             { X86_64Registers.ST1,  new CPURegister(25, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST1" }) },
543             { X86_64Registers.ST2,  new CPURegister(26, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST2" }) },
544             { X86_64Registers.ST3,  new CPURegister(27, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST3" }) },
545             { X86_64Registers.ST4,  new CPURegister(28, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST4" }) },
546             { X86_64Registers.ST5,  new CPURegister(29, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST5" }) },
547             { X86_64Registers.ST6,  new CPURegister(30, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST6" }) },
548             { X86_64Registers.ST7,  new CPURegister(31, 64, isGeneral: true, isReadonly: false, aliases: new [] { "ST7" }) },
549             { X86_64Registers.CR0,  new CPURegister(32, 64, isGeneral: false, isReadonly: false, aliases: new [] { "CR0" }) },
550             { X86_64Registers.CR1,  new CPURegister(33, 64, isGeneral: false, isReadonly: false, aliases: new [] { "CR1" }) },
551             { X86_64Registers.CR2,  new CPURegister(34, 64, isGeneral: false, isReadonly: false, aliases: new [] { "CR2" }) },
552             { X86_64Registers.CR3,  new CPURegister(35, 64, isGeneral: false, isReadonly: false, aliases: new [] { "CR3" }) },
553             { X86_64Registers.CR4,  new CPURegister(36, 64, isGeneral: false, isReadonly: false, aliases: new [] { "CR4" }) },
554         };
555     }
556 
557     public enum X86_64Registers
558     {
559         RAX = 0,
560         RCX = 2,
561         RDX = 3,
562         RBX = 1,
563         RSP = 4,
564         RBP = 5,
565         RSI = 6,
566         RDI = 7,
567         R8 = 8,
568         R9 = 9,
569         R10 = 10,
570         R11 = 11,
571         R12 = 12,
572         R13 = 13,
573         R14 = 14,
574         R15 = 15,
575         RIP = 16,
576         EFLAGS = 17,
577         CS = 18,
578         SS = 19,
579         DS = 20,
580         ES = 21,
581         FS = 22,
582         GS = 23,
583         ST0 = 24,
584         ST1 = 25,
585         ST2 = 26,
586         ST3 = 27,
587         ST4 = 28,
588         ST5 = 29,
589         ST6 = 30,
590         ST7 = 31,
591         CR0 = 32,
592         CR1 = 33,
593         CR2 = 34,
594         CR3 = 35,
595         CR4 = 36,
596         PC = 16,
597     }
598 }
599