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