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