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