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 PowerPc
19     {
SetRegister(int register, RegisterValue value)20         public override void SetRegister(int register, RegisterValue value)
21         {
22             if(!mapping.TryGetValue((PowerPcRegisters)register, out var r))
23             {
24                 throw new RecoverableException($"Wrong register index: {register}");
25             }
26 
27             SetRegisterValue32(r.Index, checked((uint)value));
28         }
29 
GetRegister(int register)30         public override RegisterValue GetRegister(int register)
31         {
32             if(!mapping.TryGetValue((PowerPcRegisters)register, out var r))
33             {
34                 throw new RecoverableException($"Wrong register index: {register}");
35             }
36             return GetRegisterValue32(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 NIP
46         {
47             get
48             {
49                 return GetRegisterValue32((int)PowerPcRegisters.NIP);
50             }
51             set
52             {
53                 SetRegisterValue32((int)PowerPcRegisters.NIP, value);
54             }
55         }
56         [Register]
57         public RegisterValue MSR
58         {
59             get
60             {
61                 return GetRegisterValue32((int)PowerPcRegisters.MSR);
62             }
63             set
64             {
65                 SetRegisterValue32((int)PowerPcRegisters.MSR, value);
66             }
67         }
68         [Register]
69         public RegisterValue LR
70         {
71             get
72             {
73                 return GetRegisterValue32((int)PowerPcRegisters.LR);
74             }
75             set
76             {
77                 SetRegisterValue32((int)PowerPcRegisters.LR, value);
78             }
79         }
80         [Register]
81         public RegisterValue CTR
82         {
83             get
84             {
85                 return GetRegisterValue32((int)PowerPcRegisters.CTR);
86             }
87             set
88             {
89                 SetRegisterValue32((int)PowerPcRegisters.CTR, value);
90             }
91         }
92         [Register]
93         public RegisterValue XER
94         {
95             get
96             {
97                 return GetRegisterValue32((int)PowerPcRegisters.XER);
98             }
99             set
100             {
101                 SetRegisterValue32((int)PowerPcRegisters.XER, value);
102             }
103         }
104         [Register]
105         public override RegisterValue PC
106         {
107             get
108             {
109                 return GetRegisterValue32((int)PowerPcRegisters.PC);
110             }
111             set
112             {
113                 SetRegisterValue32((int)PowerPcRegisters.PC, value);
114             }
115         }
116         public RegistersGroup R { get; private set; }
117 
InitializeRegisters()118         protected override void InitializeRegisters()
119         {
120             var indexValueMapR = new Dictionary<int, PowerPcRegisters>
121             {
122                 { 0, PowerPcRegisters.R0 },
123                 { 1, PowerPcRegisters.R1 },
124                 { 2, PowerPcRegisters.R2 },
125                 { 3, PowerPcRegisters.R3 },
126                 { 4, PowerPcRegisters.R4 },
127                 { 5, PowerPcRegisters.R5 },
128                 { 6, PowerPcRegisters.R6 },
129                 { 7, PowerPcRegisters.R7 },
130                 { 8, PowerPcRegisters.R8 },
131                 { 9, PowerPcRegisters.R9 },
132                 { 10, PowerPcRegisters.R10 },
133                 { 11, PowerPcRegisters.R11 },
134                 { 12, PowerPcRegisters.R12 },
135                 { 13, PowerPcRegisters.R13 },
136                 { 14, PowerPcRegisters.R14 },
137                 { 15, PowerPcRegisters.R15 },
138                 { 16, PowerPcRegisters.R16 },
139                 { 17, PowerPcRegisters.R17 },
140                 { 18, PowerPcRegisters.R18 },
141                 { 19, PowerPcRegisters.R19 },
142                 { 20, PowerPcRegisters.R20 },
143                 { 21, PowerPcRegisters.R21 },
144                 { 22, PowerPcRegisters.R22 },
145                 { 23, PowerPcRegisters.R23 },
146                 { 24, PowerPcRegisters.R24 },
147                 { 25, PowerPcRegisters.R25 },
148                 { 26, PowerPcRegisters.R26 },
149                 { 27, PowerPcRegisters.R27 },
150                 { 28, PowerPcRegisters.R28 },
151                 { 29, PowerPcRegisters.R29 },
152                 { 30, PowerPcRegisters.R30 },
153                 { 31, PowerPcRegisters.R31 },
154             };
155             R = new RegistersGroup(
156                 indexValueMapR.Keys,
157                 i => GetRegister((int)indexValueMapR[i]),
158                 (i, v) => SetRegister((int)indexValueMapR[i], v));
159 
160         }
161 
162         // 649:  Field '...' is never assigned to, and will always have its default value null
163         #pragma warning disable 649
164 
165         [Import(Name = "tlib_set_register_value_32")]
166         protected Action<int, uint> SetRegisterValue32;
167         [Import(Name = "tlib_get_register_value_32")]
168         protected Func<int, uint> GetRegisterValue32;
169 
170         #pragma warning restore 649
171 
172         private static readonly Dictionary<PowerPcRegisters, CPURegister> mapping = new Dictionary<PowerPcRegisters, CPURegister>
173         {
174             { PowerPcRegisters.R0,  new CPURegister(0, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R0" }) },
175             { PowerPcRegisters.R1,  new CPURegister(1, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R1" }) },
176             { PowerPcRegisters.R2,  new CPURegister(2, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R2" }) },
177             { PowerPcRegisters.R3,  new CPURegister(3, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R3" }) },
178             { PowerPcRegisters.R4,  new CPURegister(4, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R4" }) },
179             { PowerPcRegisters.R5,  new CPURegister(5, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R5" }) },
180             { PowerPcRegisters.R6,  new CPURegister(6, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R6" }) },
181             { PowerPcRegisters.R7,  new CPURegister(7, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R7" }) },
182             { PowerPcRegisters.R8,  new CPURegister(8, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R8" }) },
183             { PowerPcRegisters.R9,  new CPURegister(9, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R9" }) },
184             { PowerPcRegisters.R10,  new CPURegister(10, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R10" }) },
185             { PowerPcRegisters.R11,  new CPURegister(11, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R11" }) },
186             { PowerPcRegisters.R12,  new CPURegister(12, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R12" }) },
187             { PowerPcRegisters.R13,  new CPURegister(13, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R13" }) },
188             { PowerPcRegisters.R14,  new CPURegister(14, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R14" }) },
189             { PowerPcRegisters.R15,  new CPURegister(15, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R15" }) },
190             { PowerPcRegisters.R16,  new CPURegister(16, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R16" }) },
191             { PowerPcRegisters.R17,  new CPURegister(17, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R17" }) },
192             { PowerPcRegisters.R18,  new CPURegister(18, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R18" }) },
193             { PowerPcRegisters.R19,  new CPURegister(19, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R19" }) },
194             { PowerPcRegisters.R20,  new CPURegister(20, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R20" }) },
195             { PowerPcRegisters.R21,  new CPURegister(21, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R21" }) },
196             { PowerPcRegisters.R22,  new CPURegister(22, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R22" }) },
197             { PowerPcRegisters.R23,  new CPURegister(23, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R23" }) },
198             { PowerPcRegisters.R24,  new CPURegister(24, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R24" }) },
199             { PowerPcRegisters.R25,  new CPURegister(25, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R25" }) },
200             { PowerPcRegisters.R26,  new CPURegister(26, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R26" }) },
201             { PowerPcRegisters.R27,  new CPURegister(27, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R27" }) },
202             { PowerPcRegisters.R28,  new CPURegister(28, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R28" }) },
203             { PowerPcRegisters.R29,  new CPURegister(29, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R29" }) },
204             { PowerPcRegisters.R30,  new CPURegister(30, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R30" }) },
205             { PowerPcRegisters.R31,  new CPURegister(31, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R31" }) },
206             { PowerPcRegisters.NIP,  new CPURegister(64, 32, isGeneral: true, isReadonly: false, aliases: new [] { "NIP", "PC" }) },
207             { PowerPcRegisters.MSR,  new CPURegister(65, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MSR" }) },
208             { PowerPcRegisters.LR,  new CPURegister(67, 32, isGeneral: false, isReadonly: false, aliases: new [] { "LR" }) },
209             { PowerPcRegisters.CTR,  new CPURegister(68, 32, isGeneral: false, isReadonly: false, aliases: new [] { "CTR" }) },
210             { PowerPcRegisters.XER,  new CPURegister(69, 32, isGeneral: false, isReadonly: false, aliases: new [] { "XER" }) },
211         };
212     }
213 
214     public enum PowerPcRegisters
215     {
216         NIP = 64,
217         MSR = 65,
218         LR = 67,
219         CTR = 68,
220         XER = 69,
221         PC = 64,
222         R0 = 0,
223         R1 = 1,
224         R2 = 2,
225         R3 = 3,
226         R4 = 4,
227         R5 = 5,
228         R6 = 6,
229         R7 = 7,
230         R8 = 8,
231         R9 = 9,
232         R10 = 10,
233         R11 = 11,
234         R12 = 12,
235         R13 = 13,
236         R14 = 14,
237         R15 = 15,
238         R16 = 16,
239         R17 = 17,
240         R18 = 18,
241         R19 = 19,
242         R20 = 20,
243         R21 = 21,
244         R22 = 22,
245         R23 = 23,
246         R24 = 24,
247         R25 = 25,
248         R26 = 26,
249         R27 = 27,
250         R28 = 28,
251         R29 = 29,
252         R30 = 30,
253         R31 = 31,
254     }
255 }
256