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 RiscV32 19 { SetRegister(int register, RegisterValue value)20 public override void SetRegister(int register, RegisterValue value) 21 { 22 if(!mapping.TryGetValue((RiscV32Registers)register, out var r)) 23 { 24 if(TrySetNonMappedRegister(register, value)) 25 { 26 return; 27 } 28 throw new RecoverableException($"Wrong register index: {register}"); 29 } 30 if(r.IsReadonly) 31 { 32 throw new RecoverableException($"The '{(RiscV32Registers)register}' register is read-only."); 33 } 34 35 switch(r.Width) 36 { 37 case 32: 38 SetRegisterValue32(r.Index, checked((uint)value)); 39 break; 40 case 64: 41 SetRegisterValue64(r.Index, checked((ulong)value)); 42 break; 43 default: 44 throw new ArgumentException($"Unsupported register width: {r.Width}"); 45 } 46 } 47 GetRegister(int register)48 public override RegisterValue GetRegister(int register) 49 { 50 if(!mapping.TryGetValue((RiscV32Registers)register, out var r)) 51 { 52 if(TryGetNonMappedRegister(register, out var value)) 53 { 54 return value; 55 } 56 throw new RecoverableException($"Wrong register index: {register}"); 57 } 58 switch(r.Width) 59 { 60 case 32: 61 return GetRegisterValue32(r.Index); 62 case 64: 63 return GetRegisterValue64(r.Index); 64 default: 65 throw new ArgumentException($"Unsupported register width: {r.Width}"); 66 } 67 } 68 GetRegisters()69 public override IEnumerable<CPURegister> GetRegisters() 70 { 71 return mapping.Values.Concat(GetNonMappedRegisters()).OrderBy(x => x.Index); 72 } 73 74 [Register] 75 public RegisterValue ZERO 76 { 77 get 78 { 79 return GetRegisterValue32((int)RiscV32Registers.ZERO); 80 } 81 set 82 { 83 SetRegisterValue32((int)RiscV32Registers.ZERO, value); 84 } 85 } 86 [Register] 87 public RegisterValue RA 88 { 89 get 90 { 91 return GetRegisterValue32((int)RiscV32Registers.RA); 92 } 93 set 94 { 95 SetRegisterValue32((int)RiscV32Registers.RA, value); 96 } 97 } 98 [Register] 99 public RegisterValue SP 100 { 101 get 102 { 103 return GetRegisterValue32((int)RiscV32Registers.SP); 104 } 105 set 106 { 107 SetRegisterValue32((int)RiscV32Registers.SP, value); 108 } 109 } 110 [Register] 111 public RegisterValue GP 112 { 113 get 114 { 115 return GetRegisterValue32((int)RiscV32Registers.GP); 116 } 117 set 118 { 119 SetRegisterValue32((int)RiscV32Registers.GP, value); 120 } 121 } 122 [Register] 123 public RegisterValue TP 124 { 125 get 126 { 127 return GetRegisterValue32((int)RiscV32Registers.TP); 128 } 129 set 130 { 131 SetRegisterValue32((int)RiscV32Registers.TP, value); 132 } 133 } 134 [Register] 135 public RegisterValue FP 136 { 137 get 138 { 139 return GetRegisterValue32((int)RiscV32Registers.FP); 140 } 141 set 142 { 143 SetRegisterValue32((int)RiscV32Registers.FP, value); 144 } 145 } 146 [Register] 147 public override RegisterValue PC 148 { 149 get 150 { 151 return GetRegisterValue32((int)RiscV32Registers.PC); 152 } 153 set 154 { 155 value = BeforePCWrite(value); 156 SetRegisterValue32((int)RiscV32Registers.PC, value); 157 } 158 } 159 [Register] 160 public RegisterValue SSTATUS 161 { 162 get 163 { 164 return GetRegisterValue32((int)RiscV32Registers.SSTATUS); 165 } 166 set 167 { 168 SetRegisterValue32((int)RiscV32Registers.SSTATUS, value); 169 } 170 } 171 [Register] 172 public RegisterValue SIE 173 { 174 get 175 { 176 return GetRegisterValue32((int)RiscV32Registers.SIE); 177 } 178 set 179 { 180 SetRegisterValue32((int)RiscV32Registers.SIE, value); 181 } 182 } 183 [Register] 184 public RegisterValue STVEC 185 { 186 get 187 { 188 return GetRegisterValue32((int)RiscV32Registers.STVEC); 189 } 190 set 191 { 192 value = BeforeSTVECWrite(value); 193 SetRegisterValue32((int)RiscV32Registers.STVEC, value); 194 } 195 } 196 [Register] 197 public RegisterValue SSCRATCH 198 { 199 get 200 { 201 return GetRegisterValue32((int)RiscV32Registers.SSCRATCH); 202 } 203 set 204 { 205 SetRegisterValue32((int)RiscV32Registers.SSCRATCH, value); 206 } 207 } 208 [Register] 209 public RegisterValue SEPC 210 { 211 get 212 { 213 return GetRegisterValue32((int)RiscV32Registers.SEPC); 214 } 215 set 216 { 217 SetRegisterValue32((int)RiscV32Registers.SEPC, value); 218 } 219 } 220 [Register] 221 public RegisterValue SCAUSE 222 { 223 get 224 { 225 return GetRegisterValue32((int)RiscV32Registers.SCAUSE); 226 } 227 set 228 { 229 SetRegisterValue32((int)RiscV32Registers.SCAUSE, value); 230 } 231 } 232 [Register] 233 public RegisterValue STVAL 234 { 235 get 236 { 237 return GetRegisterValue32((int)RiscV32Registers.STVAL); 238 } 239 set 240 { 241 SetRegisterValue32((int)RiscV32Registers.STVAL, value); 242 } 243 } 244 [Register] 245 public RegisterValue SIP 246 { 247 get 248 { 249 return GetRegisterValue32((int)RiscV32Registers.SIP); 250 } 251 set 252 { 253 SetRegisterValue32((int)RiscV32Registers.SIP, value); 254 } 255 } 256 [Register] 257 public RegisterValue SATP 258 { 259 get 260 { 261 return GetRegisterValue32((int)RiscV32Registers.SATP); 262 } 263 set 264 { 265 SetRegisterValue32((int)RiscV32Registers.SATP, value); 266 } 267 } 268 [Register] 269 public RegisterValue SPTBR 270 { 271 get 272 { 273 return GetRegisterValue32((int)RiscV32Registers.SPTBR); 274 } 275 set 276 { 277 SetRegisterValue32((int)RiscV32Registers.SPTBR, value); 278 } 279 } 280 [Register] 281 public RegisterValue MSTATUS 282 { 283 get 284 { 285 return GetRegisterValue32((int)RiscV32Registers.MSTATUS); 286 } 287 set 288 { 289 SetRegisterValue32((int)RiscV32Registers.MSTATUS, value); 290 } 291 } 292 [Register] 293 public RegisterValue MISA 294 { 295 get 296 { 297 return GetRegisterValue32((int)RiscV32Registers.MISA); 298 } 299 set 300 { 301 SetRegisterValue32((int)RiscV32Registers.MISA, value); 302 } 303 } 304 [Register] 305 public RegisterValue MEDELEG 306 { 307 get 308 { 309 return GetRegisterValue32((int)RiscV32Registers.MEDELEG); 310 } 311 set 312 { 313 SetRegisterValue32((int)RiscV32Registers.MEDELEG, value); 314 } 315 } 316 [Register] 317 public RegisterValue MIDELEG 318 { 319 get 320 { 321 return GetRegisterValue32((int)RiscV32Registers.MIDELEG); 322 } 323 set 324 { 325 SetRegisterValue32((int)RiscV32Registers.MIDELEG, value); 326 } 327 } 328 [Register] 329 public RegisterValue MIE 330 { 331 get 332 { 333 return GetRegisterValue32((int)RiscV32Registers.MIE); 334 } 335 set 336 { 337 SetRegisterValue32((int)RiscV32Registers.MIE, value); 338 } 339 } 340 [Register] 341 public RegisterValue MTVEC 342 { 343 get 344 { 345 return GetRegisterValue32((int)RiscV32Registers.MTVEC); 346 } 347 set 348 { 349 value = BeforeMTVECWrite(value); 350 SetRegisterValue32((int)RiscV32Registers.MTVEC, value); 351 } 352 } 353 [Register] 354 public RegisterValue MSCRATCH 355 { 356 get 357 { 358 return GetRegisterValue32((int)RiscV32Registers.MSCRATCH); 359 } 360 set 361 { 362 SetRegisterValue32((int)RiscV32Registers.MSCRATCH, value); 363 } 364 } 365 [Register] 366 public RegisterValue MEPC 367 { 368 get 369 { 370 return GetRegisterValue32((int)RiscV32Registers.MEPC); 371 } 372 set 373 { 374 SetRegisterValue32((int)RiscV32Registers.MEPC, value); 375 } 376 } 377 [Register] 378 public RegisterValue MCAUSE 379 { 380 get 381 { 382 return GetRegisterValue32((int)RiscV32Registers.MCAUSE); 383 } 384 set 385 { 386 SetRegisterValue32((int)RiscV32Registers.MCAUSE, value); 387 } 388 } 389 [Register] 390 public RegisterValue MTVAL 391 { 392 get 393 { 394 return GetRegisterValue32((int)RiscV32Registers.MTVAL); 395 } 396 set 397 { 398 SetRegisterValue32((int)RiscV32Registers.MTVAL, value); 399 } 400 } 401 [Register] 402 public RegisterValue MIP 403 { 404 get 405 { 406 return GetRegisterValue32((int)RiscV32Registers.MIP); 407 } 408 set 409 { 410 SetRegisterValue32((int)RiscV32Registers.MIP, value); 411 } 412 } 413 [Register] 414 public RegisterValue MSECCFG 415 { 416 get 417 { 418 return GetRegisterValue32((int)RiscV32Registers.MSECCFG); 419 } 420 set 421 { 422 SetRegisterValue32((int)RiscV32Registers.MSECCFG, value); 423 } 424 } 425 [Register] 426 public RegisterValue PRIV 427 { 428 get 429 { 430 return GetRegisterValue32((int)RiscV32Registers.PRIV); 431 } 432 set 433 { 434 SetRegisterValue32((int)RiscV32Registers.PRIV, value); 435 } 436 } 437 [Register] 438 public RegisterValue VSTART 439 { 440 get 441 { 442 BeforeVectorExtensionRegisterRead(); 443 return GetRegisterValue32((int)RiscV32Registers.VSTART); 444 } 445 set 446 { 447 value = BeforeVectorExtensionRegisterWrite(value); 448 SetRegisterValue32((int)RiscV32Registers.VSTART, value); 449 } 450 } 451 [Register] 452 public RegisterValue VXSAT 453 { 454 get 455 { 456 BeforeVectorExtensionRegisterRead(); 457 return GetRegisterValue32((int)RiscV32Registers.VXSAT); 458 } 459 set 460 { 461 value = BeforeVectorExtensionRegisterWrite(value); 462 SetRegisterValue32((int)RiscV32Registers.VXSAT, value); 463 } 464 } 465 [Register] 466 public RegisterValue VXRM 467 { 468 get 469 { 470 BeforeVectorExtensionRegisterRead(); 471 return GetRegisterValue32((int)RiscV32Registers.VXRM); 472 } 473 set 474 { 475 value = BeforeVectorExtensionRegisterWrite(value); 476 SetRegisterValue32((int)RiscV32Registers.VXRM, value); 477 } 478 } 479 [Register] 480 public RegisterValue VCSR 481 { 482 get 483 { 484 BeforeVectorExtensionRegisterRead(); 485 return GetRegisterValue32((int)RiscV32Registers.VCSR); 486 } 487 set 488 { 489 value = BeforeVectorExtensionRegisterWrite(value); 490 SetRegisterValue32((int)RiscV32Registers.VCSR, value); 491 } 492 } 493 [Register] 494 public RegisterValue VL 495 { 496 get 497 { 498 BeforeVectorExtensionRegisterRead(); 499 return GetRegisterValue32((int)RiscV32Registers.VL); 500 } 501 set 502 { 503 value = BeforeVectorExtensionRegisterWrite(value); 504 SetRegisterValue32((int)RiscV32Registers.VL, value); 505 } 506 } 507 [Register] 508 public RegisterValue VTYPE 509 { 510 get 511 { 512 BeforeVectorExtensionRegisterRead(); 513 return GetRegisterValue32((int)RiscV32Registers.VTYPE); 514 } 515 set 516 { 517 value = BeforeVectorExtensionRegisterWrite(value); 518 SetRegisterValue32((int)RiscV32Registers.VTYPE, value); 519 } 520 } 521 [Register] 522 public RegisterValue VLENB 523 { 524 get 525 { 526 BeforeVectorExtensionRegisterRead(); 527 return GetRegisterValue32((int)RiscV32Registers.VLENB); 528 } 529 set 530 { 531 value = BeforeVectorExtensionRegisterWrite(value); 532 SetRegisterValue32((int)RiscV32Registers.VLENB, value); 533 } 534 } 535 public RegistersGroup X { get; private set; } 536 public RegistersGroup T { get; private set; } 537 public RegistersGroup S { get; private set; } 538 public RegistersGroup A { get; private set; } 539 public RegistersGroup F { get; private set; } 540 InitializeRegisters()541 protected override void InitializeRegisters() 542 { 543 var indexValueMapX = new Dictionary<int, RiscV32Registers> 544 { 545 { 0, RiscV32Registers.X0 }, 546 { 1, RiscV32Registers.X1 }, 547 { 2, RiscV32Registers.X2 }, 548 { 3, RiscV32Registers.X3 }, 549 { 4, RiscV32Registers.X4 }, 550 { 5, RiscV32Registers.X5 }, 551 { 6, RiscV32Registers.X6 }, 552 { 7, RiscV32Registers.X7 }, 553 { 8, RiscV32Registers.X8 }, 554 { 9, RiscV32Registers.X9 }, 555 { 10, RiscV32Registers.X10 }, 556 { 11, RiscV32Registers.X11 }, 557 { 12, RiscV32Registers.X12 }, 558 { 13, RiscV32Registers.X13 }, 559 { 14, RiscV32Registers.X14 }, 560 { 15, RiscV32Registers.X15 }, 561 { 16, RiscV32Registers.X16 }, 562 { 17, RiscV32Registers.X17 }, 563 { 18, RiscV32Registers.X18 }, 564 { 19, RiscV32Registers.X19 }, 565 { 20, RiscV32Registers.X20 }, 566 { 21, RiscV32Registers.X21 }, 567 { 22, RiscV32Registers.X22 }, 568 { 23, RiscV32Registers.X23 }, 569 { 24, RiscV32Registers.X24 }, 570 { 25, RiscV32Registers.X25 }, 571 { 26, RiscV32Registers.X26 }, 572 { 27, RiscV32Registers.X27 }, 573 { 28, RiscV32Registers.X28 }, 574 { 29, RiscV32Registers.X29 }, 575 { 30, RiscV32Registers.X30 }, 576 { 31, RiscV32Registers.X31 }, 577 }; 578 X = new RegistersGroup( 579 indexValueMapX.Keys, 580 i => GetRegister((int)indexValueMapX[i]), 581 (i, v) => SetRegister((int)indexValueMapX[i], v)); 582 583 var indexValueMapT = new Dictionary<int, RiscV32Registers> 584 { 585 { 0, RiscV32Registers.T0 }, 586 { 1, RiscV32Registers.T1 }, 587 { 2, RiscV32Registers.T2 }, 588 { 3, RiscV32Registers.T3 }, 589 { 4, RiscV32Registers.T4 }, 590 { 5, RiscV32Registers.T5 }, 591 { 6, RiscV32Registers.T6 }, 592 }; 593 T = new RegistersGroup( 594 indexValueMapT.Keys, 595 i => GetRegister((int)indexValueMapT[i]), 596 (i, v) => SetRegister((int)indexValueMapT[i], v)); 597 598 var indexValueMapS = new Dictionary<int, RiscV32Registers> 599 { 600 { 0, RiscV32Registers.S0 }, 601 { 1, RiscV32Registers.S1 }, 602 { 2, RiscV32Registers.S2 }, 603 { 3, RiscV32Registers.S3 }, 604 { 4, RiscV32Registers.S4 }, 605 { 5, RiscV32Registers.S5 }, 606 { 6, RiscV32Registers.S6 }, 607 { 7, RiscV32Registers.S7 }, 608 { 8, RiscV32Registers.S8 }, 609 { 9, RiscV32Registers.S9 }, 610 { 10, RiscV32Registers.S10 }, 611 { 11, RiscV32Registers.S11 }, 612 }; 613 S = new RegistersGroup( 614 indexValueMapS.Keys, 615 i => GetRegister((int)indexValueMapS[i]), 616 (i, v) => SetRegister((int)indexValueMapS[i], v)); 617 618 var indexValueMapA = new Dictionary<int, RiscV32Registers> 619 { 620 { 0, RiscV32Registers.A0 }, 621 { 1, RiscV32Registers.A1 }, 622 { 2, RiscV32Registers.A2 }, 623 { 3, RiscV32Registers.A3 }, 624 { 4, RiscV32Registers.A4 }, 625 { 5, RiscV32Registers.A5 }, 626 { 6, RiscV32Registers.A6 }, 627 { 7, RiscV32Registers.A7 }, 628 }; 629 A = new RegistersGroup( 630 indexValueMapA.Keys, 631 i => GetRegister((int)indexValueMapA[i]), 632 (i, v) => SetRegister((int)indexValueMapA[i], v)); 633 634 var indexValueMapF = new Dictionary<int, RiscV32Registers> 635 { 636 { 0, RiscV32Registers.F0 }, 637 { 1, RiscV32Registers.F1 }, 638 { 2, RiscV32Registers.F2 }, 639 { 3, RiscV32Registers.F3 }, 640 { 4, RiscV32Registers.F4 }, 641 { 5, RiscV32Registers.F5 }, 642 { 6, RiscV32Registers.F6 }, 643 { 7, RiscV32Registers.F7 }, 644 { 8, RiscV32Registers.F8 }, 645 { 9, RiscV32Registers.F9 }, 646 { 10, RiscV32Registers.F10 }, 647 { 11, RiscV32Registers.F11 }, 648 { 12, RiscV32Registers.F12 }, 649 { 13, RiscV32Registers.F13 }, 650 { 14, RiscV32Registers.F14 }, 651 { 15, RiscV32Registers.F15 }, 652 { 16, RiscV32Registers.F16 }, 653 { 17, RiscV32Registers.F17 }, 654 { 18, RiscV32Registers.F18 }, 655 { 19, RiscV32Registers.F19 }, 656 { 20, RiscV32Registers.F20 }, 657 { 21, RiscV32Registers.F21 }, 658 { 22, RiscV32Registers.F22 }, 659 { 23, RiscV32Registers.F23 }, 660 { 24, RiscV32Registers.F24 }, 661 { 25, RiscV32Registers.F25 }, 662 { 26, RiscV32Registers.F26 }, 663 { 27, RiscV32Registers.F27 }, 664 { 28, RiscV32Registers.F28 }, 665 { 29, RiscV32Registers.F29 }, 666 { 30, RiscV32Registers.F30 }, 667 { 31, RiscV32Registers.F31 }, 668 }; 669 F = new RegistersGroup( 670 indexValueMapF.Keys, 671 i => GetRegister((int)indexValueMapF[i]), 672 (i, v) => SetRegister((int)indexValueMapF[i], v)); 673 674 } 675 676 // 649: Field '...' is never assigned to, and will always have its default value null 677 #pragma warning disable 649 678 679 [Import(Name = "tlib_set_register_value_32")] 680 protected Action<int, uint> SetRegisterValue32; 681 [Import(Name = "tlib_get_register_value_32")] 682 protected Func<int, uint> GetRegisterValue32; 683 684 #pragma warning restore 649 685 686 // 649: Field '...' is never assigned to, and will always have its default value null 687 #pragma warning disable 649 688 689 [Import(Name = "tlib_set_register_value_64")] 690 protected Action<int, ulong> SetRegisterValue64; 691 [Import(Name = "tlib_get_register_value_64")] 692 protected Func<int, ulong> GetRegisterValue64; 693 694 #pragma warning restore 649 695 696 private static readonly Dictionary<RiscV32Registers, CPURegister> mapping = new Dictionary<RiscV32Registers, CPURegister> 697 { 698 { RiscV32Registers.ZERO, new CPURegister(0, 32, isGeneral: true, isReadonly: true, aliases: new [] { "ZERO", "X0" }) }, 699 { RiscV32Registers.RA, new CPURegister(1, 32, isGeneral: true, isReadonly: false, aliases: new [] { "RA", "X1" }) }, 700 { RiscV32Registers.SP, new CPURegister(2, 32, isGeneral: true, isReadonly: false, aliases: new [] { "SP", "X2" }) }, 701 { RiscV32Registers.GP, new CPURegister(3, 32, isGeneral: true, isReadonly: false, aliases: new [] { "GP", "X3" }) }, 702 { RiscV32Registers.TP, new CPURegister(4, 32, isGeneral: true, isReadonly: false, aliases: new [] { "TP", "X4" }) }, 703 { RiscV32Registers.X5, new CPURegister(5, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X5", "T0" }) }, 704 { RiscV32Registers.X6, new CPURegister(6, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X6", "T1" }) }, 705 { RiscV32Registers.X7, new CPURegister(7, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X7", "T2" }) }, 706 { RiscV32Registers.FP, new CPURegister(8, 32, isGeneral: true, isReadonly: false, aliases: new [] { "FP", "X8", "S0" }) }, 707 { RiscV32Registers.X9, new CPURegister(9, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X9", "S1" }) }, 708 { RiscV32Registers.X10, new CPURegister(10, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X10", "A0" }) }, 709 { RiscV32Registers.X11, new CPURegister(11, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X11", "A1" }) }, 710 { RiscV32Registers.X12, new CPURegister(12, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X12", "A2" }) }, 711 { RiscV32Registers.X13, new CPURegister(13, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X13", "A3" }) }, 712 { RiscV32Registers.X14, new CPURegister(14, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X14", "A4" }) }, 713 { RiscV32Registers.X15, new CPURegister(15, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X15", "A5" }) }, 714 { RiscV32Registers.X16, new CPURegister(16, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X16", "A6" }) }, 715 { RiscV32Registers.X17, new CPURegister(17, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X17", "A7" }) }, 716 { RiscV32Registers.X18, new CPURegister(18, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X18", "S2" }) }, 717 { RiscV32Registers.X19, new CPURegister(19, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X19", "S3" }) }, 718 { RiscV32Registers.X20, new CPURegister(20, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X20", "S4" }) }, 719 { RiscV32Registers.X21, new CPURegister(21, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X21", "S5" }) }, 720 { RiscV32Registers.X22, new CPURegister(22, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X22", "S6" }) }, 721 { RiscV32Registers.X23, new CPURegister(23, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X23", "S7" }) }, 722 { RiscV32Registers.X24, new CPURegister(24, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X24", "S8" }) }, 723 { RiscV32Registers.X25, new CPURegister(25, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X25", "S9" }) }, 724 { RiscV32Registers.X26, new CPURegister(26, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X26", "S10" }) }, 725 { RiscV32Registers.X27, new CPURegister(27, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X27", "S11" }) }, 726 { RiscV32Registers.X28, new CPURegister(28, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X28", "T3" }) }, 727 { RiscV32Registers.X29, new CPURegister(29, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X29", "T4" }) }, 728 { RiscV32Registers.X30, new CPURegister(30, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X30", "T5" }) }, 729 { RiscV32Registers.X31, new CPURegister(31, 32, isGeneral: true, isReadonly: false, aliases: new [] { "X31", "T6" }) }, 730 { RiscV32Registers.PC, new CPURegister(32, 32, isGeneral: true, isReadonly: false, aliases: new [] { "PC" }) }, 731 { RiscV32Registers.F0, new CPURegister(33, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F0" }) }, 732 { RiscV32Registers.F1, new CPURegister(34, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F1" }) }, 733 { RiscV32Registers.F2, new CPURegister(35, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F2" }) }, 734 { RiscV32Registers.F3, new CPURegister(36, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F3" }) }, 735 { RiscV32Registers.F4, new CPURegister(37, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F4" }) }, 736 { RiscV32Registers.F5, new CPURegister(38, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F5" }) }, 737 { RiscV32Registers.F6, new CPURegister(39, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F6" }) }, 738 { RiscV32Registers.F7, new CPURegister(40, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F7" }) }, 739 { RiscV32Registers.F8, new CPURegister(41, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F8" }) }, 740 { RiscV32Registers.F9, new CPURegister(42, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F9" }) }, 741 { RiscV32Registers.F10, new CPURegister(43, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F10" }) }, 742 { RiscV32Registers.F11, new CPURegister(44, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F11" }) }, 743 { RiscV32Registers.F12, new CPURegister(45, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F12" }) }, 744 { RiscV32Registers.F13, new CPURegister(46, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F13" }) }, 745 { RiscV32Registers.F14, new CPURegister(47, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F14" }) }, 746 { RiscV32Registers.F15, new CPURegister(48, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F15" }) }, 747 { RiscV32Registers.F16, new CPURegister(49, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F16" }) }, 748 { RiscV32Registers.F17, new CPURegister(50, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F17" }) }, 749 { RiscV32Registers.F18, new CPURegister(51, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F18" }) }, 750 { RiscV32Registers.F19, new CPURegister(52, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F19" }) }, 751 { RiscV32Registers.F20, new CPURegister(53, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F20" }) }, 752 { RiscV32Registers.F21, new CPURegister(54, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F21" }) }, 753 { RiscV32Registers.F22, new CPURegister(55, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F22" }) }, 754 { RiscV32Registers.F23, new CPURegister(56, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F23" }) }, 755 { RiscV32Registers.F24, new CPURegister(57, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F24" }) }, 756 { RiscV32Registers.F25, new CPURegister(58, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F25" }) }, 757 { RiscV32Registers.F26, new CPURegister(59, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F26" }) }, 758 { RiscV32Registers.F27, new CPURegister(60, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F27" }) }, 759 { RiscV32Registers.F28, new CPURegister(61, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F28" }) }, 760 { RiscV32Registers.F29, new CPURegister(62, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F29" }) }, 761 { RiscV32Registers.F30, new CPURegister(63, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F30" }) }, 762 { RiscV32Registers.F31, new CPURegister(64, 64, isGeneral: false, isReadonly: false, aliases: new [] { "F31" }) }, 763 { RiscV32Registers.VSTART, new CPURegister(101, 32, isGeneral: false, isReadonly: false, aliases: new [] { "VSTART" }) }, 764 { RiscV32Registers.VXSAT, new CPURegister(102, 32, isGeneral: false, isReadonly: false, aliases: new [] { "VXSAT" }) }, 765 { RiscV32Registers.VXRM, new CPURegister(103, 32, isGeneral: false, isReadonly: false, aliases: new [] { "VXRM" }) }, 766 { RiscV32Registers.VCSR, new CPURegister(104, 32, isGeneral: false, isReadonly: false, aliases: new [] { "VCSR" }) }, 767 { RiscV32Registers.SSTATUS, new CPURegister(321, 32, isGeneral: false, isReadonly: false, aliases: new [] { "SSTATUS" }) }, 768 { RiscV32Registers.SIE, new CPURegister(325, 32, isGeneral: false, isReadonly: false, aliases: new [] { "SIE" }) }, 769 { RiscV32Registers.STVEC, new CPURegister(326, 32, isGeneral: false, isReadonly: false, aliases: new [] { "STVEC" }) }, 770 { RiscV32Registers.SSCRATCH, new CPURegister(385, 32, isGeneral: false, isReadonly: false, aliases: new [] { "SSCRATCH" }) }, 771 { RiscV32Registers.SEPC, new CPURegister(386, 32, isGeneral: false, isReadonly: false, aliases: new [] { "SEPC" }) }, 772 { RiscV32Registers.SCAUSE, new CPURegister(387, 32, isGeneral: false, isReadonly: false, aliases: new [] { "SCAUSE" }) }, 773 { RiscV32Registers.STVAL, new CPURegister(388, 32, isGeneral: false, isReadonly: false, aliases: new [] { "STVAL" }) }, 774 { RiscV32Registers.SIP, new CPURegister(389, 32, isGeneral: false, isReadonly: false, aliases: new [] { "SIP" }) }, 775 { RiscV32Registers.SATP, new CPURegister(449, 32, isGeneral: false, isReadonly: false, aliases: new [] { "SATP", "SPTBR" }) }, 776 { RiscV32Registers.MSTATUS, new CPURegister(833, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MSTATUS" }) }, 777 { RiscV32Registers.MISA, new CPURegister(834, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MISA" }) }, 778 { RiscV32Registers.MEDELEG, new CPURegister(835, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MEDELEG" }) }, 779 { RiscV32Registers.MIDELEG, new CPURegister(836, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MIDELEG" }) }, 780 { RiscV32Registers.MIE, new CPURegister(837, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MIE" }) }, 781 { RiscV32Registers.MTVEC, new CPURegister(838, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MTVEC" }) }, 782 { RiscV32Registers.MSCRATCH, new CPURegister(897, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MSCRATCH" }) }, 783 { RiscV32Registers.MEPC, new CPURegister(898, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MEPC" }) }, 784 { RiscV32Registers.MCAUSE, new CPURegister(899, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MCAUSE" }) }, 785 { RiscV32Registers.MTVAL, new CPURegister(900, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MTVAL" }) }, 786 { RiscV32Registers.MIP, new CPURegister(901, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MIP" }) }, 787 { RiscV32Registers.MSECCFG, new CPURegister(1863, 32, isGeneral: false, isReadonly: false, aliases: new [] { "MSECCFG" }) }, 788 { RiscV32Registers.VL, new CPURegister(3104, 32, isGeneral: false, isReadonly: false, aliases: new [] { "VL" }) }, 789 { RiscV32Registers.VTYPE, new CPURegister(3105, 32, isGeneral: false, isReadonly: false, aliases: new [] { "VTYPE" }) }, 790 { RiscV32Registers.VLENB, new CPURegister(3106, 32, isGeneral: false, isReadonly: true, aliases: new [] { "VLENB" }) }, 791 { RiscV32Registers.PRIV, new CPURegister(4161, 32, isGeneral: false, isReadonly: false, aliases: new [] { "PRIV" }) }, 792 }; 793 } 794 795 public enum RiscV32Registers 796 { 797 ZERO = 0, 798 RA = 1, 799 SP = 2, 800 GP = 3, 801 TP = 4, 802 FP = 8, 803 PC = 32, 804 SSTATUS = 321, 805 SIE = 325, 806 STVEC = 326, 807 SSCRATCH = 385, 808 SEPC = 386, 809 SCAUSE = 387, 810 STVAL = 388, 811 SIP = 389, 812 SATP = 449, 813 SPTBR = 449, 814 MSTATUS = 833, 815 MISA = 834, 816 MEDELEG = 835, 817 MIDELEG = 836, 818 MIE = 837, 819 MTVEC = 838, 820 MSCRATCH = 897, 821 MEPC = 898, 822 MCAUSE = 899, 823 MTVAL = 900, 824 MIP = 901, 825 MSECCFG = 1863, 826 PRIV = 4161, 827 VSTART = 101, 828 VXSAT = 102, 829 VXRM = 103, 830 VCSR = 104, 831 VL = 3104, 832 VTYPE = 3105, 833 VLENB = 3106, 834 X0 = 0, 835 X1 = 1, 836 X2 = 2, 837 X3 = 3, 838 X4 = 4, 839 X5 = 5, 840 X6 = 6, 841 X7 = 7, 842 X8 = 8, 843 X9 = 9, 844 X10 = 10, 845 X11 = 11, 846 X12 = 12, 847 X13 = 13, 848 X14 = 14, 849 X15 = 15, 850 X16 = 16, 851 X17 = 17, 852 X18 = 18, 853 X19 = 19, 854 X20 = 20, 855 X21 = 21, 856 X22 = 22, 857 X23 = 23, 858 X24 = 24, 859 X25 = 25, 860 X26 = 26, 861 X27 = 27, 862 X28 = 28, 863 X29 = 29, 864 X30 = 30, 865 X31 = 31, 866 T0 = 5, 867 T1 = 6, 868 T2 = 7, 869 T3 = 28, 870 T4 = 29, 871 T5 = 30, 872 T6 = 31, 873 S0 = 8, 874 S1 = 9, 875 S2 = 18, 876 S3 = 19, 877 S4 = 20, 878 S5 = 21, 879 S6 = 22, 880 S7 = 23, 881 S8 = 24, 882 S9 = 25, 883 S10 = 26, 884 S11 = 27, 885 A0 = 10, 886 A1 = 11, 887 A2 = 12, 888 A3 = 13, 889 A4 = 14, 890 A5 = 15, 891 A6 = 16, 892 A7 = 17, 893 F0 = 33, 894 F1 = 34, 895 F2 = 35, 896 F3 = 36, 897 F4 = 37, 898 F5 = 38, 899 F6 = 39, 900 F7 = 40, 901 F8 = 41, 902 F9 = 42, 903 F10 = 43, 904 F11 = 44, 905 F12 = 45, 906 F13 = 46, 907 F14 = 47, 908 F15 = 48, 909 F16 = 49, 910 F17 = 50, 911 F18 = 51, 912 F19 = 52, 913 F20 = 53, 914 F21 = 54, 915 F22 = 55, 916 F23 = 56, 917 F24 = 57, 918 F25 = 58, 919 F26 = 59, 920 F27 = 60, 921 F28 = 61, 922 F29 = 62, 923 F30 = 63, 924 F31 = 64, 925 } 926 } 927