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