1 //
2 // Copyright (c) 2010-2025 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 using System.Collections.Generic;
8 using Antmicro.Renode.Peripherals.CPU;
9 
10 namespace Antmicro.Renode.Peripherals.SystemC
11 {
12     public partial class SystemCCortexMCPU
13     {
14         [Register]
15         public RegisterValue Control
16         {
17             get
18             {
19                 return GetRegisterValue32((int)SystemCCortexMRegisters.Control);
20             }
21             set
22             {
23                 SetRegisterValue32((int)SystemCCortexMRegisters.Control, value);
24             }
25         }
26         [Register]
27         public RegisterValue BasePri
28         {
29             get
30             {
31                 return GetRegisterValue32((int)SystemCCortexMRegisters.BasePri);
32             }
33             set
34             {
35                 SetRegisterValue32((int)SystemCCortexMRegisters.BasePri, value);
36             }
37         }
38         [Register]
39         public RegisterValue VecBase
40         {
41             get
42             {
43                 return GetRegisterValue32((int)SystemCCortexMRegisters.VecBase);
44             }
45             set
46             {
47                 SetRegisterValue32((int)SystemCCortexMRegisters.VecBase, value);
48             }
49         }
50         [Register]
51         public RegisterValue CurrentSP
52         {
53             get
54             {
55                 return GetRegisterValue32((int)SystemCCortexMRegisters.CurrentSP);
56             }
57             set
58             {
59                 SetRegisterValue32((int)SystemCCortexMRegisters.CurrentSP, value);
60             }
61         }
62         [Register]
63         public RegisterValue OtherSP
64         {
65             get
66             {
67                 return GetRegisterValue32((int)SystemCCortexMRegisters.OtherSP);
68             }
69             set
70             {
71                 SetRegisterValue32((int)SystemCCortexMRegisters.OtherSP, value);
72             }
73         }
74         [Register]
75         public RegisterValue FPCCR
76         {
77             get
78             {
79                 return GetRegisterValue32((int)SystemCCortexMRegisters.FPCCR);
80             }
81             set
82             {
83                 SetRegisterValue32((int)SystemCCortexMRegisters.FPCCR, value);
84             }
85         }
86         [Register]
87         public RegisterValue FPCAR
88         {
89             get
90             {
91                 return GetRegisterValue32((int)SystemCCortexMRegisters.FPCAR);
92             }
93             set
94             {
95                 SetRegisterValue32((int)SystemCCortexMRegisters.FPCAR, value);
96             }
97         }
98         [Register]
99         public RegisterValue FPDSCR
100         {
101             get
102             {
103                 return GetRegisterValue32((int)SystemCCortexMRegisters.FPDSCR);
104             }
105             set
106             {
107                 SetRegisterValue32((int)SystemCCortexMRegisters.FPDSCR, value);
108             }
109         }
110         [Register]
111         public RegisterValue CPACR
112         {
113             get
114             {
115                 return GetRegisterValue32((int)SystemCCortexMRegisters.CPACR);
116             }
117             set
118             {
119                 SetRegisterValue32((int)SystemCCortexMRegisters.CPACR, value);
120             }
121         }
122         [Register]
123         public RegisterValue PRIMASK
124         {
125             get
126             {
127                 return GetRegisterValue32((int)SystemCCortexMRegisters.PRIMASK);
128             }
129             set
130             {
131                 SetRegisterValue32((int)SystemCCortexMRegisters.PRIMASK, value);
132             }
133         }
134         [Register]
135         public RegisterValue FAULTMASK
136         {
137             get
138             {
139                 return GetRegisterValue32((int)SystemCCortexMRegisters.FAULTMASK);
140             }
141             set
142             {
143                 SetRegisterValue32((int)SystemCCortexMRegisters.FAULTMASK, value);
144             }
145         }
146 
147         private static readonly Dictionary<SystemCCortexMRegisters, CPURegister> mapping = new Dictionary<SystemCCortexMRegisters, CPURegister>
148         {
149             { SystemCCortexMRegisters.R0,  new CPURegister(0, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R0" }) },
150             { SystemCCortexMRegisters.R1,  new CPURegister(1, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R1" }) },
151             { SystemCCortexMRegisters.R2,  new CPURegister(2, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R2" }) },
152             { SystemCCortexMRegisters.R3,  new CPURegister(3, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R3" }) },
153             { SystemCCortexMRegisters.R4,  new CPURegister(4, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R4" }) },
154             { SystemCCortexMRegisters.R5,  new CPURegister(5, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R5" }) },
155             { SystemCCortexMRegisters.R6,  new CPURegister(6, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R6" }) },
156             { SystemCCortexMRegisters.R7,  new CPURegister(7, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R7" }) },
157             { SystemCCortexMRegisters.R8,  new CPURegister(8, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R8" }) },
158             { SystemCCortexMRegisters.R9,  new CPURegister(9, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R9" }) },
159             { SystemCCortexMRegisters.R10,  new CPURegister(10, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R10" }) },
160             { SystemCCortexMRegisters.R11,  new CPURegister(11, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R11" }) },
161             { SystemCCortexMRegisters.R12,  new CPURegister(12, 32, isGeneral: true, isReadonly: false, aliases: new [] { "R12" }) },
162             { SystemCCortexMRegisters.SP,  new CPURegister(13, 32, isGeneral: true, isReadonly: false, aliases: new [] { "SP", "R13" }) },
163             { SystemCCortexMRegisters.LR,  new CPURegister(14, 32, isGeneral: true, isReadonly: false, aliases: new [] { "LR", "R14" }) },
164             { SystemCCortexMRegisters.PC,  new CPURegister(15, 32, isGeneral: true, isReadonly: false, aliases: new [] { "PC", "R15" }) },
165             { SystemCCortexMRegisters.Control,  new CPURegister(18, 32, isGeneral: false, isReadonly: false, aliases: new [] { "Control" }) },
166             { SystemCCortexMRegisters.BasePri,  new CPURegister(19, 32, isGeneral: false, isReadonly: false, aliases: new [] { "BasePri" }) },
167             { SystemCCortexMRegisters.VecBase,  new CPURegister(20, 32, isGeneral: false, isReadonly: false, aliases: new [] { "VecBase" }) },
168             { SystemCCortexMRegisters.CurrentSP,  new CPURegister(21, 32, isGeneral: false, isReadonly: false, aliases: new [] { "CurrentSP" }) },
169             { SystemCCortexMRegisters.OtherSP,  new CPURegister(22, 32, isGeneral: false, isReadonly: false, aliases: new [] { "OtherSP" }) },
170             { SystemCCortexMRegisters.FPCCR,  new CPURegister(23, 32, isGeneral: false, isReadonly: false, aliases: new [] { "FPCCR" }) },
171             { SystemCCortexMRegisters.FPCAR,  new CPURegister(24, 32, isGeneral: false, isReadonly: false, aliases: new [] { "FPCAR" }) },
172             { SystemCCortexMRegisters.CPSR,  new CPURegister(25, 32, isGeneral: false, isReadonly: false, aliases: new [] { "CPSR" }) },
173             { SystemCCortexMRegisters.FPDSCR,  new CPURegister(26, 32, isGeneral: false, isReadonly: false, aliases: new [] { "FPDSCR" }) },
174             { SystemCCortexMRegisters.CPACR,  new CPURegister(27, 32, isGeneral: false, isReadonly: false, aliases: new [] { "CPACR" }) },
175             { SystemCCortexMRegisters.PRIMASK,  new CPURegister(28, 32, isGeneral: false, isReadonly: false, aliases: new [] { "PRIMASK" }) },
176             { SystemCCortexMRegisters.FAULTMASK,  new CPURegister(30, 32, isGeneral: false, isReadonly: false, aliases: new [] { "FAULTMASK" }) },
177         };
178     }
179 
180     public enum SystemCCortexMRegisters
181     {
182         SP = 13,
183         LR = 14,
184         PC = 15,
185         CPSR = 25,
186         Control = 18,
187         BasePri = 19,
188         VecBase = 20,
189         CurrentSP = 21,
190         OtherSP = 22,
191         FPCCR = 23,
192         FPCAR = 24,
193         FPDSCR = 26,
194         CPACR = 27,
195         PRIMASK = 28,
196         FAULTMASK = 30,
197         R0 = 0,
198         R1 = 1,
199         R2 = 2,
200         R3 = 3,
201         R4 = 4,
202         R5 = 5,
203         R6 = 6,
204         R7 = 7,
205         R8 = 8,
206         R9 = 9,
207         R10 = 10,
208         R11 = 11,
209         R12 = 12,
210         R13 = 13,
211         R14 = 14,
212         R15 = 15,
213     }
214 }
215