4
0

medeleg.rs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. //! medeleg register
  2. use bit_field::BitField;
  3. /// medeleg register
  4. #[derive(Clone, Copy, Debug)]
  5. pub struct Medeleg {
  6. bits: usize,
  7. }
  8. impl Medeleg {
  9. /// Returns the contents of the register as raw bits
  10. #[inline]
  11. pub fn bits(&self) -> usize {
  12. self.bits
  13. }
  14. /// Instruction Address Misaligned Delegate
  15. #[inline]
  16. pub fn instruction_misaligned(&self) -> bool {
  17. self.bits.get_bit(0)
  18. }
  19. /// Instruction Access Fault Delegate
  20. #[inline]
  21. pub fn instruction_fault(&self) -> bool {
  22. self.bits.get_bit(1)
  23. }
  24. /// Illegal Instruction Delegate
  25. #[inline]
  26. pub fn illegal_instruction(&self) -> bool {
  27. self.bits.get_bit(2)
  28. }
  29. /// Breakpoint Delegate
  30. #[inline]
  31. pub fn breakpoint(&self) -> bool {
  32. self.bits.get_bit(3)
  33. }
  34. /// Load Address Misaligned Delegate
  35. #[inline]
  36. pub fn load_misaligned(&self) -> bool {
  37. self.bits.get_bit(4)
  38. }
  39. /// Load Access Fault Delegate
  40. #[inline]
  41. pub fn load_fault(&self) -> bool {
  42. self.bits.get_bit(5)
  43. }
  44. /// Store/AMO Address Misaligned Delegate
  45. #[inline]
  46. pub fn store_misaligned(&self) -> bool {
  47. self.bits.get_bit(6)
  48. }
  49. /// Store/AMO Access Fault Delegate
  50. #[inline]
  51. pub fn store_fault(&self) -> bool {
  52. self.bits.get_bit(7)
  53. }
  54. /// Environment Call from U-mode Delegate
  55. #[inline]
  56. pub fn user_env_call(&self) -> bool {
  57. self.bits.get_bit(8)
  58. }
  59. /// Environment Call from S-mode Delegate
  60. #[inline]
  61. pub fn supervisor_env_call(&self) -> bool {
  62. self.bits.get_bit(9)
  63. }
  64. /// Environment Call from M-mode Delegate
  65. #[inline]
  66. pub fn machine_env_call(&self) -> bool {
  67. self.bits.get_bit(11)
  68. }
  69. /// Instruction Page Fault Delegate
  70. #[inline]
  71. pub fn instruction_page_fault(&self) -> bool {
  72. self.bits.get_bit(12)
  73. }
  74. /// Load Page Fault Delegate
  75. #[inline]
  76. pub fn load_page_fault(&self) -> bool {
  77. self.bits.get_bit(13)
  78. }
  79. /// Store/AMO Page Fault Delegate
  80. #[inline]
  81. pub fn store_page_fault(&self) -> bool {
  82. self.bits.get_bit(15)
  83. }
  84. }
  85. read_csr_as!(Medeleg, 0x302);
  86. set!(0x302);
  87. clear!(0x302);
  88. set_clear_csr!(
  89. /// Instruction Address Misaligned Delegate
  90. , set_instruction_misaligned, clear_instruction_misaligned, 1 << 0);
  91. set_clear_csr!(
  92. /// Instruction Access Fault Delegate
  93. , set_instruction_fault, clear_instruction_fault, 1 << 1);
  94. set_clear_csr!(
  95. /// Illegal Instruction Delegate
  96. , set_illegal_instruction, clear_illegal_instruction, 1 << 2);
  97. set_clear_csr!(
  98. /// Breakpoint Delegate
  99. , set_breakpoint, clear_breakpoint, 1 << 3);
  100. set_clear_csr!(
  101. /// Load Address Misaligned Delegate
  102. , set_load_misaligned, clear_load_misaligned, 1 << 4);
  103. set_clear_csr!(
  104. /// Load Access Fault Delegate
  105. , set_load_fault, clear_load_fault, 1 << 5);
  106. set_clear_csr!(
  107. /// Store/AMO Address Misaligned Delegate
  108. , set_store_misaligned, clear_store_misaligned, 1 << 6);
  109. set_clear_csr!(
  110. /// Store/AMO Access fault
  111. , set_store_fault, clear_store_fault, 1 << 7);
  112. set_clear_csr!(
  113. /// Environment Call from U-mode Delegate
  114. , set_user_env_call, clear_user_env_call, 1 << 8);
  115. set_clear_csr!(
  116. /// Environment Call from S-mode Delegate
  117. , set_supervisor_env_call, clear_supervisor_env_call, 1 << 9);
  118. set_clear_csr!(
  119. /// Environment Call from M-mode Delegate
  120. , set_machine_env_call, clear_machine_env_call, 1 << 11);
  121. set_clear_csr!(
  122. /// Instruction Page Fault Delegate
  123. , set_instruction_page_fault, clear_instruction_page_fault, 1 << 12);
  124. set_clear_csr!(
  125. /// Load Page Fault Delegate
  126. , set_load_page_fault, clear_load_page_fault, 1 << 13);
  127. set_clear_csr!(
  128. /// Store/AMO Page Fault Delegate
  129. , set_store_page_fault, clear_store_page_fault, 1 << 15);