NMSIS-Core  Version 1.2.0
NMSIS-Core support for Nuclei processor-based devices
core_feature_base.h
1 /*
2  * Copyright (c) 2019 Nuclei Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Licensed under the Apache License, Version 2.0 (the License); you may
7  * not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 
19 #ifndef __CORE_FEATURE_BASE__
20 #define __CORE_FEATURE_BASE__
21 
25 /*
26  * Core Base Feature Configuration Macro:
27  * 1. __HARTID_OFFSET: Optional, define this macro when your cpu system first hart hartid and hart index is different.
28  * eg. If your cpu system, first hart hartid is 2, hart index is 0, then set this macro to 2
29  *
30  */
31 #include <stdint.h>
32 
33 #ifdef __cplusplus
34  extern "C" {
35 #endif
36 
37 #include "nmsis_compiler.h"
38 
45 #ifndef __RISCV_XLEN
46 
47  #ifndef __riscv_xlen
48  #define __RISCV_XLEN 32
49  #else
50  #define __RISCV_XLEN __riscv_xlen
51  #endif
52 #endif /* __RISCV_XLEN */
53 
55 typedef unsigned long rv_csr_t;
56  /* End of Doxygen Group NMSIS_Core_Registers */
68 typedef union {
69  struct {
70  rv_csr_t a:1;
71  rv_csr_t b:1;
72  rv_csr_t c:1;
73  rv_csr_t d:1;
74  rv_csr_t e:1;
75  rv_csr_t f:1;
76  rv_csr_t g:1;
77  rv_csr_t h:1;
78  rv_csr_t i:1;
79  rv_csr_t j:1;
81  rv_csr_t l:1;
82  rv_csr_t m:1;
83  rv_csr_t n:1;
85  rv_csr_t p:1;
86  rv_csr_t q:1;
88  rv_csr_t s:1;
89  rv_csr_t t:1;
90  rv_csr_t u:1;
91  rv_csr_t v:1;
93  rv_csr_t x:1;
94 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
95  rv_csr_t _reserved5:38;
96  rv_csr_t mxl:2;
97 #else
100 #endif
101  } b;
102  rv_csr_t d;
103 } CSR_MISA_Type;
104 
108 typedef union {
109  struct {
110 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
111  rv_csr_t _reserved0:3;
112  rv_csr_t mie:1;
113  rv_csr_t _reserved1:3;
114  rv_csr_t mpie:1;
115  rv_csr_t _reserved2:3;
116  rv_csr_t mpp:2;
117  rv_csr_t fs:2;
118  rv_csr_t xs:2;
119  rv_csr_t mprv:1;
120  rv_csr_t _reserved3:14;
121  rv_csr_t uxl:2;
122  rv_csr_t _reserved6:29;
123  rv_csr_t sd:1;
124 #else
141 #endif
142  } b;
145 
149 typedef union {
150  struct {
152 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
153  rv_csr_t addr:58;
154 #else
156 #endif
157  } b;
160 
164 typedef union {
165  struct {
173 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
174  rv_csr_t _reserved2:32;
175  rv_csr_t interrupt:1;
176 #else
178 #endif
179  } b;
182 
186 typedef union {
187  struct {
191 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
192  rv_csr_t _reserved1:61;
193 #else
195 #endif
196  } b;
199 
203 typedef union {
204  struct {
208 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
209  rv_csr_t _reserved1:54;
210 #else
212 #endif
213  } b;
216 
220 typedef union {
221  struct {
224  } b;
227 
231 typedef union {
232  struct {
239 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
240  rv_csr_t _reserved3:54;
241 #else
243 #endif
244  } b;
247 
249 
253 typedef union {
254  struct {
268  } b;
271 
275 typedef union {
276  struct {
285 #if defined(__RISCV_XLEN) && __RISCV_XLEN == 64
286  rv_csr_t _reserved2:48;
287 #else
289 #endif
290  } b;
293 
297 typedef union {
298  struct {
305  } b;
308 
312 typedef union {
313  struct {
320  } b;
323 
327 typedef union {
328  struct {
341  } b;
344 
348 typedef union {
349  struct {
359  } b;
362 
366 typedef union {
367  struct {
377  } b;
380 
384 typedef union {
385  struct {
390  } b;
393 
397 typedef union {
398  struct {
403  } b;
406 
410 typedef union {
411  struct {
414  } b;
417 
421 typedef union {
422  struct {
429  } b;
432  /* End of Doxygen Group NMSIS_Core_Base_Registers */
434 
435 /* ########################### Core Function Access ########################### */
449 #ifndef __ASSEMBLY__
450 
451 #ifndef __ICCRISCV__
452 
463 #define __RV_CSR_SWAP(csr, val) \
464  ({ \
465  rv_csr_t __v = (unsigned long)(val); \
466  __ASM volatile("csrrw %0, " STRINGIFY(csr) ", %1" \
467  : "=r"(__v) \
468  : "rK"(__v) \
469  : "memory"); \
470  __v; \
471  })
472 
481 #define __RV_CSR_READ(csr) \
482  ({ \
483  rv_csr_t __v; \
484  __ASM volatile("csrr %0, " STRINGIFY(csr) \
485  : "=r"(__v) \
486  : \
487  : "memory"); \
488  __v; \
489  })
490 
499 #define __RV_CSR_WRITE(csr, val) \
500  ({ \
501  rv_csr_t __v = (rv_csr_t)(val); \
502  __ASM volatile("csrw " STRINGIFY(csr) ", %0" \
503  : \
504  : "rK"(__v) \
505  : "memory"); \
506  })
507 
518 #define __RV_CSR_READ_SET(csr, val) \
519  ({ \
520  rv_csr_t __v = (rv_csr_t)(val); \
521  __ASM volatile("csrrs %0, " STRINGIFY(csr) ", %1" \
522  : "=r"(__v) \
523  : "rK"(__v) \
524  : "memory"); \
525  __v; \
526  })
527 
536 #define __RV_CSR_SET(csr, val) \
537  ({ \
538  rv_csr_t __v = (rv_csr_t)(val); \
539  __ASM volatile("csrs " STRINGIFY(csr) ", %0" \
540  : \
541  : "rK"(__v) \
542  : "memory"); \
543  })
544 
555 #define __RV_CSR_READ_CLEAR(csr, val) \
556  ({ \
557  rv_csr_t __v = (rv_csr_t)(val); \
558  __ASM volatile("csrrc %0, " STRINGIFY(csr) ", %1" \
559  : "=r"(__v) \
560  : "rK"(__v) \
561  : "memory"); \
562  __v; \
563  })
564 
573 #define __RV_CSR_CLEAR(csr, val) \
574  ({ \
575  rv_csr_t __v = (rv_csr_t)(val); \
576  __ASM volatile("csrc " STRINGIFY(csr) ", %0" \
577  : \
578  : "rK"(__v) \
579  : "memory"); \
580  })
581 #else
582 
583 #include <intrinsics.h>
584 
585 #define __RV_CSR_SWAP __write_csr
586 #define __RV_CSR_READ __read_csr
587 #define __RV_CSR_WRITE __write_csr
588 #define __RV_CSR_READ_SET __set_bits_csr
589 #define __RV_CSR_SET __set_bits_csr
590 #define __RV_CSR_READ_CLEAR __clear_bits_csr
591 #define __RV_CSR_CLEAR __clear_bits_csr
592 
593 #endif /* __ICCRISCV__ */
594 
595 #endif /* __ASSEMBLY__ */
596 
605 __STATIC_FORCEINLINE void __switch_mode(uint8_t mode, uintptr_t stack, void(*entry_point)(void))
606 {
607  unsigned long val = 0;
608 
609  /* Set MPP to the requested privilege mode */
610  val = __RV_CSR_READ(CSR_MSTATUS);
611  val = __RV_INSERT_FIELD(val, MSTATUS_MPP, mode);
612 
613  /* Set previous MIE disabled */
614  val = __RV_INSERT_FIELD(val, MSTATUS_MPIE, 0);
615 
617 
618  /* Set the entry point in MEPC */
619  __RV_CSR_WRITE(CSR_MEPC, (unsigned long)entry_point);
620 
621  /* Set the register file */
622  __ASM volatile("mv sp, %0" ::"r"(stack));
623 
624  __ASM volatile("mret");
625 }
626 
634 {
636 }
637 
645 {
647 }
648 
656 {
658 }
659 
667 {
669 }
670 
678 {
679 #if __RISCV_XLEN == 32
680  volatile uint32_t high0, low, high;
681  uint64_t full;
682 
683  high0 = __RV_CSR_READ(CSR_MCYCLEH);
684  low = __RV_CSR_READ(CSR_MCYCLE);
685  high = __RV_CSR_READ(CSR_MCYCLEH);
686  if (high0 != high) {
687  low = __RV_CSR_READ(CSR_MCYCLE);
688  }
689  full = (((uint64_t)high) << 32) | low;
690  return full;
691 #elif __RISCV_XLEN == 64
692  return (uint64_t)__RV_CSR_READ(CSR_MCYCLE);
693 #else // TODO Need cover for XLEN=128 case in future
694  return (uint64_t)__RV_CSR_READ(CSR_MCYCLE);
695 #endif
696 }
697 
705 {
706 #if __RISCV_XLEN == 32
707  volatile uint32_t high0, low, high;
708  uint64_t full;
709 
710  high0 = __RV_CSR_READ(CSR_MINSTRETH);
713  if (high0 != high) {
715  }
716  full = (((uint64_t)high) << 32) | low;
717  return full;
718 #elif __RISCV_XLEN == 64
719  return (uint64_t)__RV_CSR_READ(CSR_MINSTRET);
720 #else // TODO Need cover for XLEN=128 case in future
721  return (uint64_t)__RV_CSR_READ(CSR_MINSTRET);
722 #endif
723 }
724 
733 {
734 #if __RISCV_XLEN == 32
735  volatile uint32_t high0, low, high;
736  uint64_t full;
737 
738  high0 = __RV_CSR_READ(CSR_TIMEH);
739  low = __RV_CSR_READ(CSR_TIME);
740  high = __RV_CSR_READ(CSR_TIMEH);
741  if (high0 != high) {
742  low = __RV_CSR_READ(CSR_TIME);
743  }
744  full = (((uint64_t)high) << 32) | low;
745  return full;
746 #elif __RISCV_XLEN == 64
747  return (uint64_t)__RV_CSR_READ(CSR_TIME);
748 #else // TODO Need cover for XLEN=128 case in future
749  return (uint64_t)__RV_CSR_READ(CSR_TIME);
750 #endif
751 }
752 
761 {
762  unsigned long id;
763 
764  id = (__RV_CSR_READ(CSR_MHARTID) >> 8) & 0xFF;
765  return id;
766 }
767 
777 {
778  unsigned long id;
779 #ifdef __HARTID_OFFSET
780  id = __RV_CSR_READ(CSR_MHARTID) - __HARTID_OFFSET;
781 #else
783 #endif
784  return id;
785 }
786 
797 {
798  unsigned long id;
800  return id;
801 }
802  /* End of Doxygen Group NMSIS_Core_CSR_Register_Access */
804 
805 /* ########################### CPU Intrinsic Functions ########################### */
823 {
824  __ASM volatile("nop");
825 }
826 
837 {
839  __ASM volatile("wfi");
840 }
841 
850 {
852  __ASM volatile("wfi");
854 }
855 
864 {
865  __ASM volatile("ebreak");
866 }
867 
875 {
876  __ASM volatile("ecall");
877 }
878 
882 typedef enum WFI_SleepMode {
885 } WFI_SleepMode_Type;
886 
894 __STATIC_FORCEINLINE void __set_wfi_sleepmode(WFI_SleepMode_Type mode)
895 {
897 }
898 
906 {
907  __RV_CSR_SET(CSR_TXEVT, 0x1);
908 }
909 
916 {
918 }
919 
926 {
928 }
929 
936 {
938 }
939 
946 {
948 }
949 
957 {
958  __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, (1 << idx));
959 }
960 
968 {
969  __RV_CSR_SET(CSR_MCOUNTINHIBIT, (1 << idx));
970 }
971 
980 {
982 }
983 
992 {
994 }
995 
1003 {
1004  __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, 0xFFFFFFFF);
1005 }
1006 
1014 {
1015  __RV_CSR_SET(CSR_MCOUNTINHIBIT, 0xFFFFFFFF);
1016 }
1017 
1025 __STATIC_FORCEINLINE void __set_hpm_event(unsigned long idx, unsigned long event)
1026 {
1027  switch (idx) {
1028  case 3: __RV_CSR_WRITE(CSR_MHPMEVENT3, event); break;
1029  case 4: __RV_CSR_WRITE(CSR_MHPMEVENT4, event); break;
1030  case 5: __RV_CSR_WRITE(CSR_MHPMEVENT5, event); break;
1031  case 6: __RV_CSR_WRITE(CSR_MHPMEVENT6, event); break;
1032  case 7: __RV_CSR_WRITE(CSR_MHPMEVENT7, event); break;
1033  case 8: __RV_CSR_WRITE(CSR_MHPMEVENT8, event); break;
1034  case 9: __RV_CSR_WRITE(CSR_MHPMEVENT9, event); break;
1035  case 10: __RV_CSR_WRITE(CSR_MHPMEVENT10, event); break;
1036  case 11: __RV_CSR_WRITE(CSR_MHPMEVENT11, event); break;
1037  case 12: __RV_CSR_WRITE(CSR_MHPMEVENT12, event); break;
1038  case 13: __RV_CSR_WRITE(CSR_MHPMEVENT13, event); break;
1039  case 14: __RV_CSR_WRITE(CSR_MHPMEVENT14, event); break;
1040  case 15: __RV_CSR_WRITE(CSR_MHPMEVENT15, event); break;
1041  case 16: __RV_CSR_WRITE(CSR_MHPMEVENT16, event); break;
1042  case 17: __RV_CSR_WRITE(CSR_MHPMEVENT17, event); break;
1043  case 18: __RV_CSR_WRITE(CSR_MHPMEVENT18, event); break;
1044  case 19: __RV_CSR_WRITE(CSR_MHPMEVENT19, event); break;
1045  case 20: __RV_CSR_WRITE(CSR_MHPMEVENT20, event); break;
1046  case 21: __RV_CSR_WRITE(CSR_MHPMEVENT21, event); break;
1047  case 22: __RV_CSR_WRITE(CSR_MHPMEVENT22, event); break;
1048  case 23: __RV_CSR_WRITE(CSR_MHPMEVENT23, event); break;
1049  case 24: __RV_CSR_WRITE(CSR_MHPMEVENT24, event); break;
1050  case 25: __RV_CSR_WRITE(CSR_MHPMEVENT25, event); break;
1051  case 26: __RV_CSR_WRITE(CSR_MHPMEVENT26, event); break;
1052  case 27: __RV_CSR_WRITE(CSR_MHPMEVENT27, event); break;
1053  case 28: __RV_CSR_WRITE(CSR_MHPMEVENT28, event); break;
1054  case 29: __RV_CSR_WRITE(CSR_MHPMEVENT29, event); break;
1055  case 30: __RV_CSR_WRITE(CSR_MHPMEVENT30, event); break;
1056  case 31: __RV_CSR_WRITE(CSR_MHPMEVENT31, event); break;
1057  default: break;
1058  }
1059 }
1060 
1069 __STATIC_FORCEINLINE unsigned long __get_hpm_event(unsigned long idx)
1070 {
1071  switch (idx) {
1072  case 3: return __RV_CSR_READ(CSR_MHPMEVENT3);
1073  case 4: return __RV_CSR_READ(CSR_MHPMEVENT4);
1074  case 5: return __RV_CSR_READ(CSR_MHPMEVENT5);
1075  case 6: return __RV_CSR_READ(CSR_MHPMEVENT6);
1076  case 7: return __RV_CSR_READ(CSR_MHPMEVENT7);
1077  case 8: return __RV_CSR_READ(CSR_MHPMEVENT8);
1078  case 9: return __RV_CSR_READ(CSR_MHPMEVENT9);
1079  case 10: return __RV_CSR_READ(CSR_MHPMEVENT10);
1080  case 11: return __RV_CSR_READ(CSR_MHPMEVENT11);
1081  case 12: return __RV_CSR_READ(CSR_MHPMEVENT12);
1082  case 13: return __RV_CSR_READ(CSR_MHPMEVENT13);
1083  case 14: return __RV_CSR_READ(CSR_MHPMEVENT14);
1084  case 15: return __RV_CSR_READ(CSR_MHPMEVENT15);
1085  case 16: return __RV_CSR_READ(CSR_MHPMEVENT16);
1086  case 17: return __RV_CSR_READ(CSR_MHPMEVENT17);
1087  case 18: return __RV_CSR_READ(CSR_MHPMEVENT18);
1088  case 19: return __RV_CSR_READ(CSR_MHPMEVENT19);
1089  case 20: return __RV_CSR_READ(CSR_MHPMEVENT20);
1090  case 21: return __RV_CSR_READ(CSR_MHPMEVENT21);
1091  case 22: return __RV_CSR_READ(CSR_MHPMEVENT22);
1092  case 23: return __RV_CSR_READ(CSR_MHPMEVENT23);
1093  case 24: return __RV_CSR_READ(CSR_MHPMEVENT24);
1094  case 25: return __RV_CSR_READ(CSR_MHPMEVENT25);
1095  case 26: return __RV_CSR_READ(CSR_MHPMEVENT26);
1096  case 27: return __RV_CSR_READ(CSR_MHPMEVENT27);
1097  case 28: return __RV_CSR_READ(CSR_MHPMEVENT28);
1098  case 29: return __RV_CSR_READ(CSR_MHPMEVENT29);
1099  case 30: return __RV_CSR_READ(CSR_MHPMEVENT30);
1100  case 31: return __RV_CSR_READ(CSR_MHPMEVENT31);
1101  default: return 0;
1102  }
1103 }
1104 
1112 __STATIC_FORCEINLINE void __set_hpm_counter(unsigned long idx, uint64_t value)
1113 {
1114  switch (idx) {
1115 #if __RISCV_XLEN == 32
1116  case 3: __RV_CSR_WRITE(CSR_MHPMCOUNTER3, 0); // prevent carry
1117  __RV_CSR_WRITE(CSR_MHPMCOUNTER3H, (uint32_t)(value >> 32));
1118  __RV_CSR_WRITE(CSR_MHPMCOUNTER3, (uint32_t)(value)); break;
1119  case 4: __RV_CSR_WRITE(CSR_MHPMCOUNTER4, 0); // prevent carry
1120  __RV_CSR_WRITE(CSR_MHPMCOUNTER4H, (uint32_t)(value >> 32));
1121  __RV_CSR_WRITE(CSR_MHPMCOUNTER4, (uint32_t)(value)); break;
1122  case 5: __RV_CSR_WRITE(CSR_MHPMCOUNTER5, 0); // prevent carry
1123  __RV_CSR_WRITE(CSR_MHPMCOUNTER5H, (uint32_t)(value >> 32));
1124  __RV_CSR_WRITE(CSR_MHPMCOUNTER5, (uint32_t)(value)); break;
1125  case 6: __RV_CSR_WRITE(CSR_MHPMCOUNTER6, 0); // prevent carry
1126  __RV_CSR_WRITE(CSR_MHPMCOUNTER6H, (uint32_t)(value >> 32));
1127  __RV_CSR_WRITE(CSR_MHPMCOUNTER6, (uint32_t)(value)); break;
1128  case 7: __RV_CSR_WRITE(CSR_MHPMCOUNTER7, 0); // prevent carry
1129  __RV_CSR_WRITE(CSR_MHPMCOUNTER7H, (uint32_t)(value >> 32));
1130  __RV_CSR_WRITE(CSR_MHPMCOUNTER7, (uint32_t)(value)); break;
1131  case 8: __RV_CSR_WRITE(CSR_MHPMCOUNTER8, 0); // prevent carry
1132  __RV_CSR_WRITE(CSR_MHPMCOUNTER8H, (uint32_t)(value >> 32));
1133  __RV_CSR_WRITE(CSR_MHPMCOUNTER8, (uint32_t)(value)); break;
1134  case 9: __RV_CSR_WRITE(CSR_MHPMCOUNTER9, 0); // prevent carry
1135  __RV_CSR_WRITE(CSR_MHPMCOUNTER9H, (uint32_t)(value >> 32));
1136  __RV_CSR_WRITE(CSR_MHPMCOUNTER9, (uint32_t)(value)); break;
1137  case 10: __RV_CSR_WRITE(CSR_MHPMCOUNTER10, 0); // prevent carry
1138  __RV_CSR_WRITE(CSR_MHPMCOUNTER10H, (uint32_t)(value >> 32));
1139  __RV_CSR_WRITE(CSR_MHPMCOUNTER10, (uint32_t)(value)); break;
1140  case 11: __RV_CSR_WRITE(CSR_MHPMCOUNTER11, 0); // prevent carry
1141  __RV_CSR_WRITE(CSR_MHPMCOUNTER11H, (uint32_t)(value >> 32));
1142  __RV_CSR_WRITE(CSR_MHPMCOUNTER11, (uint32_t)(value)); break;
1143  case 12: __RV_CSR_WRITE(CSR_MHPMCOUNTER12, 0); // prevent carry
1144  __RV_CSR_WRITE(CSR_MHPMCOUNTER12H, (uint32_t)(value >> 32));
1145  __RV_CSR_WRITE(CSR_MHPMCOUNTER12, (uint32_t)(value)); break;
1146  case 13: __RV_CSR_WRITE(CSR_MHPMCOUNTER13, 0); // prevent carry
1147  __RV_CSR_WRITE(CSR_MHPMCOUNTER13H, (uint32_t)(value >> 32));
1148  __RV_CSR_WRITE(CSR_MHPMCOUNTER13, (uint32_t)(value)); break;
1149  case 14: __RV_CSR_WRITE(CSR_MHPMCOUNTER14, 0); // prevent carry
1150  __RV_CSR_WRITE(CSR_MHPMCOUNTER14H, (uint32_t)(value >> 32));
1151  __RV_CSR_WRITE(CSR_MHPMCOUNTER14, (uint32_t)(value)); break;
1152  case 15: __RV_CSR_WRITE(CSR_MHPMCOUNTER15, 0); // prevent carry
1153  __RV_CSR_WRITE(CSR_MHPMCOUNTER15H, (uint32_t)(value >> 32));
1154  __RV_CSR_WRITE(CSR_MHPMCOUNTER15, (uint32_t)(value)); break;
1155  case 16: __RV_CSR_WRITE(CSR_MHPMCOUNTER16, 0); // prevent carry
1156  __RV_CSR_WRITE(CSR_MHPMCOUNTER16H, (uint32_t)(value >> 32));
1157  __RV_CSR_WRITE(CSR_MHPMCOUNTER16, (uint32_t)(value)); break;
1158  case 17: __RV_CSR_WRITE(CSR_MHPMCOUNTER17, 0); // prevent carry
1159  __RV_CSR_WRITE(CSR_MHPMCOUNTER17H, (uint32_t)(value >> 32));
1160  __RV_CSR_WRITE(CSR_MHPMCOUNTER17, (uint32_t)(value)); break;
1161  case 18: __RV_CSR_WRITE(CSR_MHPMCOUNTER18, 0); // prevent carry
1162  __RV_CSR_WRITE(CSR_MHPMCOUNTER18H, (uint32_t)(value >> 32));
1163  __RV_CSR_WRITE(CSR_MHPMCOUNTER18, (uint32_t)(value)); break;
1164  case 19: __RV_CSR_WRITE(CSR_MHPMCOUNTER19, 0); // prevent carry
1165  __RV_CSR_WRITE(CSR_MHPMCOUNTER19H, (uint32_t)(value >> 32));
1166  __RV_CSR_WRITE(CSR_MHPMCOUNTER19, (uint32_t)(value)); break;
1167  case 20: __RV_CSR_WRITE(CSR_MHPMCOUNTER20, 0); // prevent carry
1168  __RV_CSR_WRITE(CSR_MHPMCOUNTER20H, (uint32_t)(value >> 32));
1169  __RV_CSR_WRITE(CSR_MHPMCOUNTER20, (uint32_t)(value)); break;
1170  case 21: __RV_CSR_WRITE(CSR_MHPMCOUNTER21, 0); // prevent carry
1171  __RV_CSR_WRITE(CSR_MHPMCOUNTER21H, (uint32_t)(value >> 32));
1172  __RV_CSR_WRITE(CSR_MHPMCOUNTER21, (uint32_t)(value)); break;
1173  case 22: __RV_CSR_WRITE(CSR_MHPMCOUNTER22, 0); // prevent carry
1174  __RV_CSR_WRITE(CSR_MHPMCOUNTER22H, (uint32_t)(value >> 32));
1175  __RV_CSR_WRITE(CSR_MHPMCOUNTER22, (uint32_t)(value)); break;
1176  case 23: __RV_CSR_WRITE(CSR_MHPMCOUNTER23, 0); // prevent carry
1177  __RV_CSR_WRITE(CSR_MHPMCOUNTER23H, (uint32_t)(value >> 32));
1178  __RV_CSR_WRITE(CSR_MHPMCOUNTER23, (uint32_t)(value)); break;
1179  case 24: __RV_CSR_WRITE(CSR_MHPMCOUNTER24, 0); // prevent carry
1180  __RV_CSR_WRITE(CSR_MHPMCOUNTER24H, (uint32_t)(value >> 32));
1181  __RV_CSR_WRITE(CSR_MHPMCOUNTER24, (uint32_t)(value)); break;
1182  case 25: __RV_CSR_WRITE(CSR_MHPMCOUNTER25, 0); // prevent carry
1183  __RV_CSR_WRITE(CSR_MHPMCOUNTER25H, (uint32_t)(value >> 32));
1184  __RV_CSR_WRITE(CSR_MHPMCOUNTER25, (uint32_t)(value)); break;
1185  case 26: __RV_CSR_WRITE(CSR_MHPMCOUNTER26, 0); // prevent carry
1186  __RV_CSR_WRITE(CSR_MHPMCOUNTER26H, (uint32_t)(value >> 32));
1187  __RV_CSR_WRITE(CSR_MHPMCOUNTER26, (uint32_t)(value)); break;
1188  case 27: __RV_CSR_WRITE(CSR_MHPMCOUNTER27, 0); // prevent carry
1189  __RV_CSR_WRITE(CSR_MHPMCOUNTER27H, (uint32_t)(value >> 32));
1190  __RV_CSR_WRITE(CSR_MHPMCOUNTER27, (uint32_t)(value)); break;
1191  case 28: __RV_CSR_WRITE(CSR_MHPMCOUNTER28, 0); // prevent carry
1192  __RV_CSR_WRITE(CSR_MHPMCOUNTER28H, (uint32_t)(value >> 32));
1193  __RV_CSR_WRITE(CSR_MHPMCOUNTER28, (uint32_t)(value)); break;
1194  case 29: __RV_CSR_WRITE(CSR_MHPMCOUNTER29, 0); // prevent carry
1195  __RV_CSR_WRITE(CSR_MHPMCOUNTER29H, (uint32_t)(value >> 32));
1196  __RV_CSR_WRITE(CSR_MHPMCOUNTER29, (uint32_t)(value)); break;
1197  case 30: __RV_CSR_WRITE(CSR_MHPMCOUNTER30, 0); // prevent carry
1198  __RV_CSR_WRITE(CSR_MHPMCOUNTER30H, (uint32_t)(value >> 32));
1199  __RV_CSR_WRITE(CSR_MHPMCOUNTER30, (uint32_t)(value)); break;
1200  case 31: __RV_CSR_WRITE(CSR_MHPMCOUNTER31, 0); // prevent carry
1201  __RV_CSR_WRITE(CSR_MHPMCOUNTER31H, (uint32_t)(value >> 32));
1202  __RV_CSR_WRITE(CSR_MHPMCOUNTER31, (uint32_t)(value)); break;
1203 
1204 #elif __RISCV_XLEN == 64
1205  case 3: __RV_CSR_WRITE(CSR_MHPMCOUNTER3, (value)); break;
1206  case 4: __RV_CSR_WRITE(CSR_MHPMCOUNTER4, (value)); break;
1207  case 5: __RV_CSR_WRITE(CSR_MHPMCOUNTER5, (value)); break;
1208  case 6: __RV_CSR_WRITE(CSR_MHPMCOUNTER6, (value)); break;
1209  case 7: __RV_CSR_WRITE(CSR_MHPMCOUNTER7, (value)); break;
1210  case 8: __RV_CSR_WRITE(CSR_MHPMCOUNTER8, (value)); break;
1211  case 9: __RV_CSR_WRITE(CSR_MHPMCOUNTER9, (value)); break;
1212  case 10: __RV_CSR_WRITE(CSR_MHPMCOUNTER10, (value)); break;
1213  case 11: __RV_CSR_WRITE(CSR_MHPMCOUNTER11, (value)); break;
1214  case 12: __RV_CSR_WRITE(CSR_MHPMCOUNTER12, (value)); break;
1215  case 13: __RV_CSR_WRITE(CSR_MHPMCOUNTER13, (value)); break;
1216  case 14: __RV_CSR_WRITE(CSR_MHPMCOUNTER14, (value)); break;
1217  case 15: __RV_CSR_WRITE(CSR_MHPMCOUNTER15, (value)); break;
1218  case 16: __RV_CSR_WRITE(CSR_MHPMCOUNTER16, (value)); break;
1219  case 17: __RV_CSR_WRITE(CSR_MHPMCOUNTER17, (value)); break;
1220  case 18: __RV_CSR_WRITE(CSR_MHPMCOUNTER18, (value)); break;
1221  case 19: __RV_CSR_WRITE(CSR_MHPMCOUNTER19, (value)); break;
1222  case 20: __RV_CSR_WRITE(CSR_MHPMCOUNTER20, (value)); break;
1223  case 21: __RV_CSR_WRITE(CSR_MHPMCOUNTER21, (value)); break;
1224  case 22: __RV_CSR_WRITE(CSR_MHPMCOUNTER22, (value)); break;
1225  case 23: __RV_CSR_WRITE(CSR_MHPMCOUNTER23, (value)); break;
1226  case 24: __RV_CSR_WRITE(CSR_MHPMCOUNTER24, (value)); break;
1227  case 25: __RV_CSR_WRITE(CSR_MHPMCOUNTER25, (value)); break;
1228  case 26: __RV_CSR_WRITE(CSR_MHPMCOUNTER26, (value)); break;
1229  case 27: __RV_CSR_WRITE(CSR_MHPMCOUNTER27, (value)); break;
1230  case 28: __RV_CSR_WRITE(CSR_MHPMCOUNTER28, (value)); break;
1231  case 29: __RV_CSR_WRITE(CSR_MHPMCOUNTER29, (value)); break;
1232  case 30: __RV_CSR_WRITE(CSR_MHPMCOUNTER30, (value)); break;
1233  case 31: __RV_CSR_WRITE(CSR_MHPMCOUNTER31, (value)); break;
1234 
1235 #else
1236 #endif
1237  default: break;
1238  }
1239 }
1240 
1249 __STATIC_FORCEINLINE unsigned long __get_hpm_counter(unsigned long idx)
1250 {
1251 #if __RISCV_XLEN == 32
1252  volatile uint32_t high0, low, high;
1253  uint64_t full;
1254 
1255  switch (idx) {
1256  case 0: return __get_rv_cycle();
1257  case 2: return __get_rv_instret();
1258  case 3: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER3H);
1261  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER3); }
1262  full = (((uint64_t)high) << 32) | low; return full;
1263  case 4: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER4H);
1266  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER4); }
1267  full = (((uint64_t)high) << 32) | low; return full;
1268  case 5: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER5H);
1271  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER5); }
1272  full = (((uint64_t)high) << 32) | low; return full;
1273  case 6: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER6H);
1276  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER6); }
1277  full = (((uint64_t)high) << 32) | low; return full;
1278  case 7: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER7H);
1281  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER7); }
1282  full = (((uint64_t)high) << 32) | low; return full;
1283  case 8: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER8H);
1286  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER8); }
1287  full = (((uint64_t)high) << 32) | low; return full;
1288  case 9: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER9H);
1291  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER9); }
1292  full = (((uint64_t)high) << 32) | low; return full;
1293  case 10: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER10H);
1296  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER10); }
1297  full = (((uint64_t)high) << 32) | low; return full;
1298  case 11: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER11H);
1301  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER11); }
1302  full = (((uint64_t)high) << 32) | low; return full;
1303  case 12: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER12H);
1306  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER12); }
1307  full = (((uint64_t)high) << 32) | low; return full;
1308  case 13: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER13H);
1311  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER13); }
1312  full = (((uint64_t)high) << 32) | low; return full;
1313  case 14: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER14H);
1316  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER14); }
1317  full = (((uint64_t)high) << 32) | low; return full;
1318  case 15: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER15H);
1321  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER15); }
1322  full = (((uint64_t)high) << 32) | low; return full;
1323  case 16: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER16H);
1326  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER16); }
1327  full = (((uint64_t)high) << 32) | low; return full;
1328  case 17: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER17H);
1331  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER17); }
1332  full = (((uint64_t)high) << 32) | low; return full;
1333  case 18: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER18H);
1336  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER18); }
1337  full = (((uint64_t)high) << 32) | low; return full;
1338  case 19: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER19H);
1341  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER19); }
1342  full = (((uint64_t)high) << 32) | low; return full;
1343  case 20: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER20H);
1346  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER20); }
1347  full = (((uint64_t)high) << 32) | low; return full;
1348  case 21: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER21H);
1351  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER21); }
1352  full = (((uint64_t)high) << 32) | low; return full;
1353  case 22: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER22H);
1356  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER22); }
1357  full = (((uint64_t)high) << 32) | low; return full;
1358  case 23: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER23H);
1361  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER23); }
1362  full = (((uint64_t)high) << 32) | low; return full;
1363  case 24: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER24H);
1366  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER24); }
1367  full = (((uint64_t)high) << 32) | low; return full;
1368  case 25: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER25H);
1371  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER25); }
1372  full = (((uint64_t)high) << 32) | low; return full;
1373  case 26: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER26H);
1376  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER26); }
1377  full = (((uint64_t)high) << 32) | low; return full;
1378  case 27: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER27H);
1381  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER27); }
1382  full = (((uint64_t)high) << 32) | low; return full;
1383  case 28: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER28H);
1386  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER28); }
1387  full = (((uint64_t)high) << 32) | low; return full;
1388  case 29: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER29H);
1391  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER29); }
1392  full = (((uint64_t)high) << 32) | low; return full;
1393  case 30: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER30H);
1396  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER30); }
1397  full = (((uint64_t)high) << 32) | low; return full;
1398  case 31: high0 = __RV_CSR_READ(CSR_MHPMCOUNTER31H);
1401  if (high0 != high) { low = __RV_CSR_READ(CSR_MHPMCOUNTER31); }
1402  full = (((uint64_t)high) << 32) | low; return full;
1403 
1404 #elif __RISCV_XLEN == 64
1405  switch (idx) {
1406  case 0: return __get_rv_cycle();
1407  case 2: return __get_rv_instret();
1408  case 3: return __RV_CSR_READ(CSR_MHPMCOUNTER3);
1409  case 4: return __RV_CSR_READ(CSR_MHPMCOUNTER4);
1410  case 5: return __RV_CSR_READ(CSR_MHPMCOUNTER5);
1411  case 6: return __RV_CSR_READ(CSR_MHPMCOUNTER6);
1412  case 7: return __RV_CSR_READ(CSR_MHPMCOUNTER7);
1413  case 8: return __RV_CSR_READ(CSR_MHPMCOUNTER8);
1414  case 9: return __RV_CSR_READ(CSR_MHPMCOUNTER9);
1415  case 10: return __RV_CSR_READ(CSR_MHPMCOUNTER10);
1416  case 11: return __RV_CSR_READ(CSR_MHPMCOUNTER11);
1417  case 12: return __RV_CSR_READ(CSR_MHPMCOUNTER12);
1418  case 13: return __RV_CSR_READ(CSR_MHPMCOUNTER13);
1419  case 14: return __RV_CSR_READ(CSR_MHPMCOUNTER14);
1420  case 15: return __RV_CSR_READ(CSR_MHPMCOUNTER15);
1421  case 16: return __RV_CSR_READ(CSR_MHPMCOUNTER16);
1422  case 17: return __RV_CSR_READ(CSR_MHPMCOUNTER17);
1423  case 18: return __RV_CSR_READ(CSR_MHPMCOUNTER18);
1424  case 19: return __RV_CSR_READ(CSR_MHPMCOUNTER19);
1425  case 20: return __RV_CSR_READ(CSR_MHPMCOUNTER20);
1426  case 21: return __RV_CSR_READ(CSR_MHPMCOUNTER21);
1427  case 22: return __RV_CSR_READ(CSR_MHPMCOUNTER22);
1428  case 23: return __RV_CSR_READ(CSR_MHPMCOUNTER23);
1429  case 24: return __RV_CSR_READ(CSR_MHPMCOUNTER24);
1430  case 25: return __RV_CSR_READ(CSR_MHPMCOUNTER25);
1431  case 26: return __RV_CSR_READ(CSR_MHPMCOUNTER26);
1432  case 27: return __RV_CSR_READ(CSR_MHPMCOUNTER27);
1433  case 28: return __RV_CSR_READ(CSR_MHPMCOUNTER28);
1434  case 29: return __RV_CSR_READ(CSR_MHPMCOUNTER29);
1435  case 30: return __RV_CSR_READ(CSR_MHPMCOUNTER30);
1436  case 31: return __RV_CSR_READ(CSR_MHPMCOUNTER31);
1437 
1438 #else
1439  switch (idx) {
1440 #endif
1441  default: return 0;
1442  }
1443 }
1444 
1452 __STATIC_FORCEINLINE void __set_medeleg(unsigned long mask)
1453 {
1454  __RV_CSR_WRITE(CSR_MEDELEG, mask);
1455 }
1456 
1467 #define __FENCE(p, s) __ASM volatile ("fence " #p "," #s : : : "memory")
1468 
1476 {
1477  __ASM volatile("fence.i");
1478 }
1479 
1481 #define __RWMB() __FENCE(iorw,iorw)
1482 
1484 #define __RMB() __FENCE(ir,ir)
1485 
1487 #define __WMB() __FENCE(ow,ow)
1488 
1490 #define __SMP_RWMB() __FENCE(rw,rw)
1491 
1493 #define __SMP_RMB() __FENCE(r,r)
1494 
1496 #define __SMP_WMB() __FENCE(w,w)
1497 
1499 #define __CPU_RELAX() __ASM volatile ("" : : : "memory")
1500 
1501 
1502 /* ===== Load/Store Operations ===== */
1509 __STATIC_FORCEINLINE uint8_t __LB(volatile void *addr)
1510 {
1511  uint8_t result;
1512 
1513  __ASM volatile ("lb %0, 0(%1)" : "=r" (result) : "r" (addr));
1514  return result;
1515 }
1516 
1523 __STATIC_FORCEINLINE uint16_t __LH(volatile void *addr)
1524 {
1525  uint16_t result;
1526 
1527  __ASM volatile ("lh %0, 0(%1)" : "=r" (result) : "r" (addr));
1528  return result;
1529 }
1530 
1537 __STATIC_FORCEINLINE uint32_t __LW(volatile void *addr)
1538 {
1539  uint32_t result;
1540 
1541  __ASM volatile ("lw %0, 0(%1)" : "=r" (result) : "r" (addr));
1542  return result;
1543 }
1544 
1545 #if __RISCV_XLEN != 32
1546 
1553 __STATIC_FORCEINLINE uint64_t __LD(volatile void *addr)
1554 {
1555  uint64_t result;
1556  __ASM volatile ("ld %0, 0(%1)" : "=r" (result) : "r" (addr));
1557  return result;
1558 }
1559 #endif
1560 
1567 __STATIC_FORCEINLINE void __SB(volatile void *addr, uint8_t val)
1568 {
1569  __ASM volatile ("sb %0, 0(%1)" : : "r" (val), "r" (addr));
1570 }
1571 
1578 __STATIC_FORCEINLINE void __SH(volatile void *addr, uint16_t val)
1579 {
1580  __ASM volatile ("sh %0, 0(%1)" : : "r" (val), "r" (addr));
1581 }
1582 
1589 __STATIC_FORCEINLINE void __SW(volatile void *addr, uint32_t val)
1590 {
1591  __ASM volatile ("sw %0, 0(%1)" : : "r" (val), "r" (addr));
1592 }
1593 
1594 #if __RISCV_XLEN != 32
1595 
1601 __STATIC_FORCEINLINE void __SD(volatile void *addr, uint64_t val)
1602 {
1603  __ASM volatile ("sd %0, 0(%1)" : : "r" (val), "r" (addr));
1604 }
1605 #endif
1606 
1618 __STATIC_FORCEINLINE uint32_t __CAS_W(volatile uint32_t *addr, uint32_t oldval, uint32_t newval)
1619 {
1620  uint32_t result;
1621  uint32_t rc;
1622 
1623  __ASM volatile ( \
1624  "0: lr.w %0, %2 \n" \
1625  " bne %0, %z3, 1f \n" \
1626  " sc.w %1, %z4, %2 \n" \
1627  " bnez %1, 0b \n" \
1628  "1:\n" \
1629  : "=&r"(result), "=&r"(rc), "+A"(*addr) \
1630  : "r"(oldval), "r"(newval) \
1631  : "memory");
1632  return result;
1633 }
1634 
1642 __STATIC_FORCEINLINE uint32_t __AMOSWAP_W(volatile uint32_t *addr, uint32_t newval)
1643 {
1644  uint32_t result;
1645 
1646  __ASM volatile ("amoswap.w %0, %2, %1" : \
1647  "=r"(result), "+A"(*addr) : "r"(newval) : "memory");
1648  return result;
1649 }
1650 
1658 __STATIC_FORCEINLINE int32_t __AMOADD_W(volatile int32_t *addr, int32_t value)
1659 {
1660  int32_t result;
1661 
1662  __ASM volatile ("amoadd.w %0, %2, %1" : \
1663  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1664  return *addr;
1665 }
1666 
1674 __STATIC_FORCEINLINE int32_t __AMOAND_W(volatile int32_t *addr, int32_t value)
1675 {
1676  int32_t result;
1677 
1678  __ASM volatile ("amoand.w %0, %2, %1" : \
1679  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1680  return *addr;
1681 }
1682 
1690 __STATIC_FORCEINLINE int32_t __AMOOR_W(volatile int32_t *addr, int32_t value)
1691 {
1692  int32_t result;
1693 
1694  __ASM volatile ("amoor.w %0, %2, %1" : \
1695  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1696  return *addr;
1697 }
1698 
1706 __STATIC_FORCEINLINE int32_t __AMOXOR_W(volatile int32_t *addr, int32_t value)
1707 {
1708  int32_t result;
1709 
1710  __ASM volatile ("amoxor.w %0, %2, %1" : \
1711  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1712  return *addr;
1713 }
1714 
1722 __STATIC_FORCEINLINE uint32_t __AMOMAXU_W(volatile uint32_t *addr, uint32_t value)
1723 {
1724  uint32_t result;
1725 
1726  __ASM volatile ("amomaxu.w %0, %2, %1" : \
1727  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1728  return *addr;
1729 }
1730 
1738 __STATIC_FORCEINLINE int32_t __AMOMAX_W(volatile int32_t *addr, int32_t value)
1739 {
1740  int32_t result;
1741 
1742  __ASM volatile ("amomax.w %0, %2, %1" : \
1743  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1744  return *addr;
1745 }
1746 
1754 __STATIC_FORCEINLINE uint32_t __AMOMINU_W(volatile uint32_t *addr, uint32_t value)
1755 {
1756  uint32_t result;
1757 
1758  __ASM volatile ("amominu.w %0, %2, %1" : \
1759  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1760  return *addr;
1761 }
1762 
1770 __STATIC_FORCEINLINE int32_t __AMOMIN_W(volatile int32_t *addr, int32_t value)
1771 {
1772  int32_t result;
1773 
1774  __ASM volatile ("amomin.w %0, %2, %1" : \
1775  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1776  return *addr;
1777 }
1778 
1779 #if __RISCV_XLEN == 64
1780 
1791 __STATIC_FORCEINLINE uint64_t __CAS_D(volatile uint64_t *addr, uint64_t oldval, uint64_t newval)
1792 {
1793  uint64_t result;
1794  uint64_t rc;
1795 
1796  __ASM volatile ( \
1797  "0: lr.d %0, %2 \n" \
1798  " bne %0, %z3, 1f \n" \
1799  " sc.d %1, %z4, %2 \n" \
1800  " bnez %1, 0b \n" \
1801  "1:\n" \
1802  : "=&r"(result), "=&r"(rc), "+A"(*addr) \
1803  : "r"(oldval), "r"(newval) \
1804  : "memory");
1805  return result;
1806 }
1807 
1815 __STATIC_FORCEINLINE uint64_t __AMOSWAP_D(volatile uint64_t *addr, uint64_t newval)
1816 {
1817  uint64_t result;
1818 
1819  __ASM volatile ("amoswap.d %0, %2, %1" : \
1820  "=r"(result), "+A"(*addr) : "r"(newval) : "memory");
1821  return result;
1822 }
1823 
1831 __STATIC_FORCEINLINE int64_t __AMOADD_D(volatile int64_t *addr, int64_t value)
1832 {
1833  int64_t result;
1834 
1835  __ASM volatile ("amoadd.d %0, %2, %1" : \
1836  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1837  return *addr;
1838 }
1839 
1847 __STATIC_FORCEINLINE int64_t __AMOAND_D(volatile int64_t *addr, int64_t value)
1848 {
1849  int64_t result;
1850 
1851  __ASM volatile ("amoand.d %0, %2, %1" : \
1852  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1853  return *addr;
1854 }
1855 
1863 __STATIC_FORCEINLINE int64_t __AMOOR_D(volatile int64_t *addr, int64_t value)
1864 {
1865  int64_t result;
1866 
1867  __ASM volatile ("amoor.d %0, %2, %1" : \
1868  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1869  return *addr;
1870 }
1871 
1879 __STATIC_FORCEINLINE int64_t __AMOXOR_D(volatile int64_t *addr, int64_t value)
1880 {
1881  int64_t result;
1882 
1883  __ASM volatile ("amoxor.d %0, %2, %1" : \
1884  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1885  return *addr;
1886 }
1887 
1895 __STATIC_FORCEINLINE uint64_t __AMOMAXU_D(volatile uint64_t *addr, uint64_t value)
1896 {
1897  uint64_t result;
1898 
1899  __ASM volatile ("amomaxu.d %0, %2, %1" : \
1900  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1901  return *addr;
1902 }
1903 
1911 __STATIC_FORCEINLINE int64_t __AMOMAX_D(volatile int64_t *addr, int64_t value)
1912 {
1913  int64_t result;
1914 
1915  __ASM volatile ("amomax.d %0, %2, %1" : \
1916  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1917  return *addr;
1918 }
1919 
1927 __STATIC_FORCEINLINE uint64_t __AMOMINU_D(volatile uint64_t *addr, uint64_t value)
1928 {
1929  uint64_t result;
1930 
1931  __ASM volatile ("amominu.d %0, %2, %1" : \
1932  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1933  return *addr;
1934 }
1935 
1943 __STATIC_FORCEINLINE int64_t __AMOMIN_D(volatile int64_t *addr, int64_t value)
1944 {
1945  int64_t result;
1946 
1947  __ASM volatile ("amomin.d %0, %2, %1" : \
1948  "=r"(result), "+A"(*addr) : "r"(value) : "memory");
1949  return *addr;
1950 }
1951 #endif /* __RISCV_XLEN == 64 */
1952  /* End of Doxygen Group NMSIS_Core_CPU_Intrinsic */
1954 
1955 #ifdef __cplusplus
1956 }
1957 #endif
1958 #endif /* __CORE_FEATURE_BASE__ */
CSR_MDCFGINFO_Type::way
rv_csr_t way
D-Cache way.
Definition: core_feature_base.h:369
CSR_MHPMCOUNTER9
#define CSR_MHPMCOUNTER9
Definition: riscv_encoding.h:688
MCOUNTINHIBIT_CY
#define MCOUNTINHIBIT_CY
Definition: riscv_encoding.h:200
CSR_MDCFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:378
CSR_MSAVESTATUS_Type::mpp2
rv_csr_t mpp2
bit: 9..10 privilede mode of second level NMI/exception nestting
Definition: core_feature_base.h:282
CSR_MHPMCOUNTER15H
#define CSR_MHPMCOUNTER15H
Definition: riscv_encoding.h:835
CSR_SSTATUS
#define CSR_SSTATUS
Definition: riscv_encoding.h:501
CSR_MISA_Type::c
rv_csr_t c
bit: 2 Compressed extension
Definition: core_feature_base.h:72
CSR_MHPMCOUNTER7
#define CSR_MHPMCOUNTER7
Definition: riscv_encoding.h:686
CSR_MPPICFGINFO_Type::ppi_bpa
rv_csr_t ppi_bpa
PPI base address.
Definition: core_feature_base.h:389
CSR_MPPICFGINFO_Type::_reserved1
rv_csr_t _reserved1
Reserved.
Definition: core_feature_base.h:388
__AMOMINU_W
__STATIC_FORCEINLINE uint32_t __AMOMINU_W(volatile uint32_t *addr, uint32_t value)
Atomic unsigned MIN with 32bit value.
Definition: core_feature_base.h:1754
__get_hart_index
__STATIC_FORCEINLINE unsigned long __get_hart_index(void)
Get hart index of current cluster.
Definition: core_feature_base.h:776
CSR_TXEVT
#define CSR_TXEVT
Definition: riscv_encoding.h:960
CSR_MDCFGINFO_Type::_reserved0
rv_csr_t _reserved0
Definition: core_feature_base.h:372
CSR_MHPMCOUNTER16
#define CSR_MHPMCOUNTER16
Definition: riscv_encoding.h:695
WFI_SleepMode
WFI_SleepMode
WFI Sleep Mode enumeration.
Definition: core_feature_base.h:882
CSR_MHPMEVENT26
#define CSR_MHPMEVENT26
Definition: riscv_encoding.h:734
CSR_MCFGINFO_Type::fio
rv_csr_t fio
FIO present.
Definition: core_feature_base.h:333
CSR_MMISCCTRL_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:245
CSR_MECCCODE_Type::_reserved0
rv_csr_t _reserved0
Reserved.
Definition: core_feature_base.h:424
CSR_MTVEC_Type::addr
rv_csr_t addr
bit: 6..31 mtvec address
Definition: core_feature_base.h:155
CSR_MISA_Type::d
rv_csr_t d
bit: 3 Double-precision floating-point extension
Definition: core_feature_base.h:73
CSR_MISA_Type::u
rv_csr_t u
bit: 20 User mode implemented
Definition: core_feature_base.h:90
CSR_MECCCODE_Type::sramid
rv_csr_t sramid
Indicate 1bit ECC error, software can clear these bits.
Definition: core_feature_base.h:427
CSR_MDCFGINFO_Type::cache_ecc
rv_csr_t cache_ecc
D-Cache ECC present.
Definition: core_feature_base.h:371
CSR_MCACHECTL_Type::ic_en
rv_csr_t ic_en
I-Cache enable.
Definition: core_feature_base.h:255
CSR_MHPMCOUNTER22H
#define CSR_MHPMCOUNTER22H
Definition: riscv_encoding.h:842
SSTATUS_SIE
#define SSTATUS_SIE
Definition: riscv_encoding.h:79
CSR_MECCCODE_Type::_reserved1
rv_csr_t _reserved1
Reserved.
Definition: core_feature_base.h:426
CSR_MDCAUSE_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:225
CSR_MDLMCTL_Type::dlm_rwecc
rv_csr_t dlm_rwecc
Control mecc_code write to dlm, simulate error injection.
Definition: core_feature_base.h:317
__enable_mhpm_counters
__STATIC_FORCEINLINE void __enable_mhpm_counters(unsigned long mask)
Enable hardware performance counters with mask.
Definition: core_feature_base.h:979
CSR_MPPICFGINFO_Type::ppi_size
rv_csr_t ppi_size
PPI size, need to be 2^n size.
Definition: core_feature_base.h:387
CSR_MHPMCOUNTER20H
#define CSR_MHPMCOUNTER20H
Definition: riscv_encoding.h:840
CSR_MHPMCOUNTER23H
#define CSR_MHPMCOUNTER23H
Definition: riscv_encoding.h:843
CSR_MCACHECTL_Type::dc_ecc_en
rv_csr_t dc_ecc_en
D-Cache ECC enable.
Definition: core_feature_base.h:263
CSR_MCACHECTL_Type::_reserved1
rv_csr_t _reserved1
Definition: core_feature_base.h:267
CSR_MISA_Type::s
rv_csr_t s
bit: 18 Supervisor mode implemented
Definition: core_feature_base.h:88
__disable_mcycle_counter
__STATIC_FORCEINLINE void __disable_mcycle_counter(void)
Disable MCYCLE counter.
Definition: core_feature_base.h:925
CSR_MHPMEVENT19
#define CSR_MHPMEVENT19
Definition: riscv_encoding.h:727
CSR_MCFGINFO_Type::dcache
rv_csr_t dcache
DCache present.
Definition: core_feature_base.h:339
CSR_MSUBM_Type::typ
rv_csr_t typ
bit: 6..7 current trap type
Definition: core_feature_base.h:206
CSR_MHPMCOUNTER14
#define CSR_MHPMCOUNTER14
Definition: riscv_encoding.h:693
CSR_MICFGINFO_Type::lsize
rv_csr_t lsize
I-Cache line size.
Definition: core_feature_base.h:352
CSR_MHPMCOUNTER17H
#define CSR_MHPMCOUNTER17H
Definition: riscv_encoding.h:837
CSR_MHARTID
#define CSR_MHARTID
Definition: riscv_encoding.h:743
CSR_MHPMCOUNTER21
#define CSR_MHPMCOUNTER21
Definition: riscv_encoding.h:700
CSR_MSTATUS_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:143
CSR_MECCLOCK_Type::_reserved0
rv_csr_t _reserved0
Reserved.
Definition: core_feature_base.h:413
CSR_MSTATUS_Type::_reserved0
rv_csr_t _reserved0
bit: 0 Reserved
Definition: core_feature_base.h:125
CSR_MCACHECTL_Type::ic_ecc_excp_en
rv_csr_t ic_ecc_excp_en
I-Cache 2bit ECC error exception enable.
Definition: core_feature_base.h:258
__enable_irq_s
__STATIC_FORCEINLINE void __enable_irq_s(void)
Enable IRQ Interrupts in supervisor mode.
Definition: core_feature_base.h:655
__NOP
__STATIC_FORCEINLINE void __NOP(void)
NOP Instruction.
Definition: core_feature_base.h:822
__RV_CSR_CLEAR
#define __RV_CSR_CLEAR(csr, val)
CSR operation Macro for csrc instruction.
Definition: core_feature_base.h:573
CSR_MSAVESTATUS_Type::mpie2
rv_csr_t mpie2
bit: 8 interrupt enable flag of second level NMI/exception nestting
Definition: core_feature_base.h:281
CSR_MFIOCFGINFO_Type
Union type to access MFIOCFG_INFO CSR register.
Definition: core_feature_base.h:397
CSR_MFIOCFGINFO_Type::_reserved0
rv_csr_t _reserved0
Reserved.
Definition: core_feature_base.h:399
CSR_MHPMEVENT11
#define CSR_MHPMEVENT11
Definition: riscv_encoding.h:719
CSR_MCACHECTL_Type
Union type to access MCACHE_CTL CSR register.
Definition: core_feature_base.h:253
CSR_MILMCTL_Type::ilm_en
rv_csr_t ilm_en
ILM enable.
Definition: core_feature_base.h:299
CSR_MSTATUS_Type::xs
rv_csr_t xs
bit: XS status flag
Definition: core_feature_base.h:136
CSR_MCACHECTL_Type::dc_en
rv_csr_t dc_en
DCache enable.
Definition: core_feature_base.h:262
CSR_MEDELEG
#define CSR_MEDELEG
Definition: riscv_encoding.h:568
CSR_MSAVESTATUS_Type::_reserved2
rv_csr_t _reserved2
bit: 16..31 Reserved
Definition: core_feature_base.h:288
__get_hpm_event
__STATIC_FORCEINLINE unsigned long __get_hpm_event(unsigned long idx)
Get event for selected high performance monitor event.
Definition: core_feature_base.h:1069
CSR_MTVEC_Type::mode
rv_csr_t mode
bit: 0..5 interrupt mode control
Definition: core_feature_base.h:151
CSR_MHPMEVENT6
#define CSR_MHPMEVENT6
Definition: riscv_encoding.h:714
CSR_MCAUSE_Type::_reserved1
rv_csr_t _reserved1
bit: 26..24 Reserved
Definition: core_feature_base.h:169
__ECALL
__STATIC_FORCEINLINE void __ECALL(void)
Environment Call Instruction.
Definition: core_feature_base.h:874
CSR_MHPMCOUNTER22
#define CSR_MHPMCOUNTER22
Definition: riscv_encoding.h:701
CSR_MHPMCOUNTER31
#define CSR_MHPMCOUNTER31
Definition: riscv_encoding.h:710
CSR_MMISCCTRL_Type::misalign
rv_csr_t misalign
bit: 6 misaligned access support flag
Definition: core_feature_base.h:236
CSR_MECCCODE_Type
Union type to access MECC_CODE CSR register.
Definition: core_feature_base.h:421
CSR_MCOUNTINHIBIT_Type
Union type to access MCOUNTINHIBIT CSR register.
Definition: core_feature_base.h:186
CSR_MICFGINFO_Type
Union type to access MICFG_INFO CSR register.
Definition: core_feature_base.h:348
CSR_MHPMEVENT17
#define CSR_MHPMEVENT17
Definition: riscv_encoding.h:725
CSR_MCOUNTINHIBIT_Type::_reserved0
rv_csr_t _reserved0
bit: 1 Reserved
Definition: core_feature_base.h:189
CSR_MHPMCOUNTER27H
#define CSR_MHPMCOUNTER27H
Definition: riscv_encoding.h:847
CSR_MSTATUS_Type::_reserved3
rv_csr_t _reserved3
bit: Reserved
Definition: core_feature_base.h:131
CSR_MHPMCOUNTER13
#define CSR_MHPMCOUNTER13
Definition: riscv_encoding.h:692
CSR_MHPMEVENT9
#define CSR_MHPMEVENT9
Definition: riscv_encoding.h:717
__AMOAND_W
__STATIC_FORCEINLINE int32_t __AMOAND_W(volatile int32_t *addr, int32_t value)
Atomic And with 32bit value.
Definition: core_feature_base.h:1674
CSR_MSAVESTATUS_Type::ptyp1
rv_csr_t ptyp1
bit: 6..7 NMI/exception type of before first nestting
Definition: core_feature_base.h:280
CSR_MFIOCFGINFO_Type::_reserved1
rv_csr_t _reserved1
Reserved.
Definition: core_feature_base.h:401
CSR_MHPMCOUNTER10H
#define CSR_MHPMCOUNTER10H
Definition: riscv_encoding.h:830
CSR_MCFGINFO_Type
Union type to access MCFG_INFO CSR register.
Definition: core_feature_base.h:327
CSR_MHPMCOUNTER14H
#define CSR_MHPMCOUNTER14H
Definition: riscv_encoding.h:834
CSR_MSTATUS_Type::spie
rv_csr_t spie
bit: 3 Supervisor Privilede mode interrupt enable flag
Definition: core_feature_base.h:130
CSR_MCFGINFO_Type::clic
rv_csr_t clic
CLIC present.
Definition: core_feature_base.h:331
CSR_MHPMCOUNTER13H
#define CSR_MHPMCOUNTER13H
Definition: riscv_encoding.h:833
CSR_MSAVESTATUS_Type::mpp1
rv_csr_t mpp1
bit: 1..2 privilede mode of fisrt level NMI/exception nestting
Definition: core_feature_base.h:278
__AMOXOR_W
__STATIC_FORCEINLINE int32_t __AMOXOR_W(volatile int32_t *addr, int32_t value)
Atomic XOR with 32bit value.
Definition: core_feature_base.h:1706
CSR_MSTATUS_Type::_reserved1
rv_csr_t _reserved1
bit: 2 Reserved
Definition: core_feature_base.h:127
CSR_MFIOCFGINFO_Type::fio_size
rv_csr_t fio_size
FIO size, need to be 2^n size.
Definition: core_feature_base.h:400
__AMOMAX_W
__STATIC_FORCEINLINE int32_t __AMOMAX_W(volatile int32_t *addr, int32_t value)
Atomic signed MAX with 32bit value.
Definition: core_feature_base.h:1738
CSR_MCYCLEH
#define CSR_MCYCLEH
Definition: riscv_encoding.h:821
CSR_MDCFGINFO_Type
Union type to access MDCFG_INFO CSR register.
Definition: core_feature_base.h:366
CSR_MCAUSE_Type
Union type to access MCAUSE CSR register.
Definition: core_feature_base.h:164
CSR_MICFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:360
CSR_MCAUSE_Type::mpil
rv_csr_t mpil
bit: 23..16 Previous interrupt level
Definition: core_feature_base.h:168
CSR_MCFGINFO_Type::tee
rv_csr_t tee
TEE present.
Definition: core_feature_base.h:329
CSR_MSUBM_Type::ptyp
rv_csr_t ptyp
bit: 8..9 previous trap type
Definition: core_feature_base.h:207
CSR_MISA_Type
Union type to access MISA CSR register.
Definition: core_feature_base.h:68
CSR_MHPMCOUNTER20
#define CSR_MHPMCOUNTER20
Definition: riscv_encoding.h:699
CSR_MHPMCOUNTER4
#define CSR_MHPMCOUNTER4
Definition: riscv_encoding.h:683
__set_wfi_sleepmode
__STATIC_FORCEINLINE void __set_wfi_sleepmode(WFI_SleepMode_Type mode)
Set Sleep mode of WFI.
Definition: core_feature_base.h:894
CSR_MHPMCOUNTER8H
#define CSR_MHPMCOUNTER8H
Definition: riscv_encoding.h:828
CSR_MMISCCTRL_Type::_reserved1
rv_csr_t _reserved1
bit: 4..5 Reserved
Definition: core_feature_base.h:235
CSR_MISA_Type::t
rv_csr_t t
bit: 19 Tentatively reserved for Transactional Memory extension
Definition: core_feature_base.h:89
CSR_MHPMCOUNTER8
#define CSR_MHPMCOUNTER8
Definition: riscv_encoding.h:687
CSR_MSAVESTATUS_Type::ptyp2
rv_csr_t ptyp2
bit: 14..15 NMI/exception type of before second nestting
Definition: core_feature_base.h:284
CSR_MISA_Type::mxl
rv_csr_t mxl
bit: 30..31 Machine XLEN
Definition: core_feature_base.h:99
CSR_MSAVESTATUS_Type::_reserved1
rv_csr_t _reserved1
bit: 11..13 Reserved
Definition: core_feature_base.h:283
__RV_CSR_WRITE
#define __RV_CSR_WRITE(csr, val)
CSR operation Macro for csrw instruction.
Definition: core_feature_base.h:499
CSR_MISA_Type::f
rv_csr_t f
bit: 5 Single-precision floating-point extension
Definition: core_feature_base.h:75
CSR_MDLMCTL_Type
Union type to access MDLM_CTL CSR register.
Definition: core_feature_base.h:312
CSR_MHPMEVENT31
#define CSR_MHPMEVENT31
Definition: riscv_encoding.h:739
CSR_MHPMEVENT14
#define CSR_MHPMEVENT14
Definition: riscv_encoding.h:722
CSR_MILMCTL_Type::ilm_bpa
rv_csr_t ilm_bpa
ILM base address.
Definition: core_feature_base.h:304
CSR_MCFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:342
CSR_TIME
#define CSR_TIME
Definition: riscv_encoding.h:467
CSR_MHPMEVENT3
#define CSR_MHPMEVENT3
Definition: riscv_encoding.h:711
CSR_MISA_Type::j
rv_csr_t j
bit: 9 Tentatively reserved for Dynamically Translated Languages extension
Definition: core_feature_base.h:79
CSR_MINSTRET
#define CSR_MINSTRET
Definition: riscv_encoding.h:681
__set_hpm_event
__STATIC_FORCEINLINE void __set_hpm_event(unsigned long idx, unsigned long event)
Set event for selected high performance monitor event.
Definition: core_feature_base.h:1025
CSR_MICFGINFO_Type::lm_xonly
rv_csr_t lm_xonly
ILM Execute only permission.
Definition: core_feature_base.h:356
__LH
__STATIC_FORCEINLINE uint16_t __LH(volatile void *addr)
Load 16bit value from address (16 bit)
Definition: core_feature_base.h:1523
CSR_MISA_Type::g
rv_csr_t g
bit: 6 Additional standard extensions present
Definition: core_feature_base.h:76
__LW
__STATIC_FORCEINLINE uint32_t __LW(volatile void *addr)
Load 32bit value from address (32 bit)
Definition: core_feature_base.h:1537
CSR_MMISCCTL_Type
CSR_MMISCCTRL_Type CSR_MMISCCTL_Type
Definition: core_feature_base.h:248
CSR_MDLMCTL_Type::dlm_en
rv_csr_t dlm_en
DLM enable.
Definition: core_feature_base.h:314
CSR_MDLMCTL_Type::dlm_ecc_excp_en
rv_csr_t dlm_ecc_excp_en
DLM ECC exception enable.
Definition: core_feature_base.h:316
CSR_MSAVESTATUS_Type::mpie1
rv_csr_t mpie1
bit: 0 interrupt enable flag of fisrt level NMI/exception nestting
Definition: core_feature_base.h:277
CSR_MCAUSE_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:180
CSR_MSTATUS_Type::fs
rv_csr_t fs
bit: FS status flag
Definition: core_feature_base.h:135
CSR_MHPMCOUNTER17
#define CSR_MHPMCOUNTER17
Definition: riscv_encoding.h:696
CSR_MDCFGINFO_Type::lm_ecc
rv_csr_t lm_ecc
DLM ECC present.
Definition: core_feature_base.h:375
CSR_MMISCCTRL_Type::_reserved2
rv_csr_t _reserved2
bit: 7..8 Reserved
Definition: core_feature_base.h:237
__get_hart_id
__STATIC_FORCEINLINE unsigned long __get_hart_id(void)
Get hart id of current cluster.
Definition: core_feature_base.h:796
CSR_MHPMEVENT12
#define CSR_MHPMEVENT12
Definition: riscv_encoding.h:720
CSR_MCAUSE_Type::mpie
rv_csr_t mpie
bit: 27 Interrupt enable flag before enter interrupt
Definition: core_feature_base.h:170
CSR_MCACHECTL_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:269
CSR_MSUBM_Type
Union type to access MSUBM CSR register.
Definition: core_feature_base.h:203
CSR_MHPMCOUNTER19H
#define CSR_MHPMCOUNTER19H
Definition: riscv_encoding.h:839
MSTATUS_MPIE
#define MSTATUS_MPIE
Definition: riscv_encoding.h:44
__disable_irq_s
__STATIC_FORCEINLINE void __disable_irq_s(void)
Disable IRQ Interrupts in supervisor mode.
Definition: core_feature_base.h:666
CSR_MCOUNTINHIBIT_Type::cy
rv_csr_t cy
bit: 0 1 means disable mcycle counter
Definition: core_feature_base.h:188
CSR_MISA_Type::l
rv_csr_t l
bit: 11 Tentatively reserved for Decimal Floating-Point extension
Definition: core_feature_base.h:81
CSR_MCACHECTL_Type::ic_ecc_en
rv_csr_t ic_ecc_en
I-Cache ECC enable.
Definition: core_feature_base.h:257
CSR_MTVEC_Type
Union type to access MTVEC CSR register.
Definition: core_feature_base.h:149
CSR_MDLMCTL_Type::dlm_ecc_en
rv_csr_t dlm_ecc_en
DLM ECC eanble.
Definition: core_feature_base.h:315
MSTATUS_MPP
#define MSTATUS_MPP
Definition: riscv_encoding.h:47
__disable_all_counter
__STATIC_FORCEINLINE void __disable_all_counter(void)
Disable all MCYCLE & MINSTRET & MHPMCOUNTER counter.
Definition: core_feature_base.h:1013
CSR_MMISCCTRL_Type
Union type to access MMISC_CTRL CSR register.
Definition: core_feature_base.h:231
CSR_MHPMCOUNTER18H
#define CSR_MHPMCOUNTER18H
Definition: riscv_encoding.h:838
__SB
__STATIC_FORCEINLINE void __SB(volatile void *addr, uint8_t val)
Write 8bit value to address (8 bit)
Definition: core_feature_base.h:1567
CSR_MCFGINFO_Type::icache
rv_csr_t icache
ICache present.
Definition: core_feature_base.h:338
__disable_mhpm_counters
__STATIC_FORCEINLINE void __disable_mhpm_counters(unsigned long mask)
Disable hardware performance counters with mask.
Definition: core_feature_base.h:991
CSR_MSTATUS_Type::sum
rv_csr_t sum
bit: Supervisor Mode load and store protection
Definition: core_feature_base.h:138
CSR_MHPMEVENT29
#define CSR_MHPMEVENT29
Definition: riscv_encoding.h:737
CSR_MHPMCOUNTER24
#define CSR_MHPMCOUNTER24
Definition: riscv_encoding.h:703
CSR_MISA_Type::h
rv_csr_t h
bit: 7 Hypervisor extension
Definition: core_feature_base.h:77
CSR_MISA_Type::b
rv_csr_t b
bit: 1 Tentatively reserved for Bit-Manipulation extension
Definition: core_feature_base.h:71
CSR_MHPMEVENT15
#define CSR_MHPMEVENT15
Definition: riscv_encoding.h:723
CSR_MCFGINFO_Type::ilm
rv_csr_t ilm
ILM present.
Definition: core_feature_base.h:336
CSR_MDCFGINFO_Type::lm_size
rv_csr_t lm_size
DLM size, need to be 2^n size.
Definition: core_feature_base.h:373
CSR_MCACHECTL_Type::ic_rwtecc
rv_csr_t ic_rwtecc
Control I-Cache Tag Ram ECC code injection.
Definition: core_feature_base.h:259
CSR_MCFGINFO_Type::ppi
rv_csr_t ppi
PPI present.
Definition: core_feature_base.h:334
__get_rv_time
__STATIC_FORCEINLINE uint64_t __get_rv_time(void)
Read whole 64 bits value of real-time clock.
Definition: core_feature_base.h:732
CSR_MHPMEVENT13
#define CSR_MHPMEVENT13
Definition: riscv_encoding.h:721
CSR_MCACHECTL_Type::ic_scpd_mod
rv_csr_t ic_scpd_mod
Scratchpad mode, 0: Scratchpad as ICache Data RAM, 1: Scratchpad as ILM SRAM.
Definition: core_feature_base.h:256
CSR_TIMEH
#define CSR_TIMEH
Definition: riscv_encoding.h:754
CSR_MCAUSE_Type::minhv
rv_csr_t minhv
bit: 30 Machine interrupt vector table
Definition: core_feature_base.h:172
CSR_MHPMEVENT27
#define CSR_MHPMEVENT27
Definition: riscv_encoding.h:735
CSR_MICFGINFO_Type::lm_ecc
rv_csr_t lm_ecc
ILM ECC present.
Definition: core_feature_base.h:357
CSR_MISA_Type::_reserved1
rv_csr_t _reserved1
bit: 10 Reserved
Definition: core_feature_base.h:80
WFE_WFE
#define WFE_WFE
Definition: riscv_encoding.h:195
CSR_MHPMEVENT25
#define CSR_MHPMEVENT25
Definition: riscv_encoding.h:733
CSR_MHPMCOUNTER30H
#define CSR_MHPMCOUNTER30H
Definition: riscv_encoding.h:850
__AMOMAXU_W
__STATIC_FORCEINLINE uint32_t __AMOMAXU_W(volatile uint32_t *addr, uint32_t value)
Atomic unsigned MAX with 32bit value.
Definition: core_feature_base.h:1722
__WFI
__STATIC_FORCEINLINE void __WFI(void)
Wait For Interrupt.
Definition: core_feature_base.h:836
CSR_MHPMEVENT22
#define CSR_MHPMEVENT22
Definition: riscv_encoding.h:730
CSR_MECCCODE_Type::code
rv_csr_t code
Used to inject ECC check code.
Definition: core_feature_base.h:423
CSR_MSTATUS_Type::mpie
rv_csr_t mpie
bit: mirror of MIE flag
Definition: core_feature_base.h:132
MSTATUS_MIE
#define MSTATUS_MIE
Definition: riscv_encoding.h:40
CSR_MECCCODE_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:430
__enable_mcycle_counter
__STATIC_FORCEINLINE void __enable_mcycle_counter(void)
Enable MCYCLE counter.
Definition: core_feature_base.h:915
__disable_irq
__STATIC_FORCEINLINE void __disable_irq(void)
Disable IRQ Interrupts.
Definition: core_feature_base.h:644
CSR_MILMCTL_Type::ilm_rwecc
rv_csr_t ilm_rwecc
Control mecc_code write to ilm, simulate error injection.
Definition: core_feature_base.h:302
__enable_mhpm_counter
__STATIC_FORCEINLINE void __enable_mhpm_counter(unsigned long idx)
Enable selected hardware performance monitor counter.
Definition: core_feature_base.h:956
CSR_MCFGINFO_Type::_reserved0
rv_csr_t _reserved0
Definition: core_feature_base.h:340
CSR_MICFGINFO_Type::cache_ecc
rv_csr_t cache_ecc
I-Cache ECC present.
Definition: core_feature_base.h:353
CSR_MILMCTL_Type::_reserved0
rv_csr_t _reserved0
Reserved.
Definition: core_feature_base.h:303
WFI_SHALLOW_SLEEP
@ WFI_SHALLOW_SLEEP
Shallow sleep mode, the core_clk will poweroff.
Definition: core_feature_base.h:883
CSR_MHPMEVENT7
#define CSR_MHPMEVENT7
Definition: riscv_encoding.h:715
CSR_MILMCTL_Type::ilm_ecc_en
rv_csr_t ilm_ecc_en
ILM ECC eanble.
Definition: core_feature_base.h:300
CSR_MCACHECTL_Type::_reserved0
rv_csr_t _reserved0
Definition: core_feature_base.h:261
CSR_MHPMEVENT20
#define CSR_MHPMEVENT20
Definition: riscv_encoding.h:728
CSR_MECCLOCK_Type
Union type to access MECC_LOCK CSR register.
Definition: core_feature_base.h:410
__CAS_W
__STATIC_FORCEINLINE uint32_t __CAS_W(volatile uint32_t *addr, uint32_t oldval, uint32_t newval)
Compare and Swap 32bit value using LR and SC.
Definition: core_feature_base.h:1618
CSR_MHPMEVENT5
#define CSR_MHPMEVENT5
Definition: riscv_encoding.h:713
__get_rv_cycle
__STATIC_FORCEINLINE uint64_t __get_rv_cycle(void)
Read whole 64 bits value of mcycle counter.
Definition: core_feature_base.h:677
CSR_MHPMCOUNTER16H
#define CSR_MHPMCOUNTER16H
Definition: riscv_encoding.h:836
CSR_MECCCODE_Type::_reserved2
rv_csr_t _reserved2
Reserved.
Definition: core_feature_base.h:428
__switch_mode
__STATIC_FORCEINLINE void __switch_mode(uint8_t mode, uintptr_t stack, void(*entry_point)(void))
switch privilege from machine mode to others.
Definition: core_feature_base.h:605
__AMOOR_W
__STATIC_FORCEINLINE int32_t __AMOOR_W(volatile int32_t *addr, int32_t value)
Atomic OR with 32bit value.
Definition: core_feature_base.h:1690
CSR_MTVEC_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:158
CSR_MHPMEVENT16
#define CSR_MHPMEVENT16
Definition: riscv_encoding.h:724
CSR_MECCLOCK_Type::ecc_lock
rv_csr_t ecc_lock
RW permission, ECC Lock configure.
Definition: core_feature_base.h:412
CSR_MICFGINFO_Type::set
rv_csr_t set
I-Cache sets per way.
Definition: core_feature_base.h:350
__SH
__STATIC_FORCEINLINE void __SH(volatile void *addr, uint16_t val)
Write 16bit value to address (16 bit)
Definition: core_feature_base.h:1578
CSR_MCAUSE_Type::exccode
rv_csr_t exccode
bit: 11..0 exception or interrupt code
Definition: core_feature_base.h:166
CSR_MHPMCOUNTER4H
#define CSR_MHPMCOUNTER4H
Definition: riscv_encoding.h:824
CSR_MINSTRETH
#define CSR_MINSTRETH
Definition: riscv_encoding.h:822
CSR_MHPMCOUNTER12
#define CSR_MHPMCOUNTER12
Definition: riscv_encoding.h:691
CSR_MHPMCOUNTER28H
#define CSR_MHPMCOUNTER28H
Definition: riscv_encoding.h:848
CSR_MHPMCOUNTER25
#define CSR_MHPMCOUNTER25
Definition: riscv_encoding.h:704
CSR_MCOUNTINHIBIT_Type::ir
rv_csr_t ir
bit: 2 1 means disable minstret counter
Definition: core_feature_base.h:190
CSR_MHPMEVENT10
#define CSR_MHPMEVENT10
Definition: riscv_encoding.h:718
CSR_MHPMEVENT30
#define CSR_MHPMEVENT30
Definition: riscv_encoding.h:738
CSR_MHPMCOUNTER9H
#define CSR_MHPMCOUNTER9H
Definition: riscv_encoding.h:829
CSR_MSTATUS_Type::mpp
rv_csr_t mpp
bit: mirror of Privilege Mode
Definition: core_feature_base.h:134
CSR_MHPMCOUNTER11
#define CSR_MHPMCOUNTER11
Definition: riscv_encoding.h:690
CSR_MICFGINFO_Type::way
rv_csr_t way
I-Cache way.
Definition: core_feature_base.h:351
MCOUNTINHIBIT_IR
#define MCOUNTINHIBIT_IR
Definition: riscv_encoding.h:199
CSR_MHPMCOUNTER7H
#define CSR_MHPMCOUNTER7H
Definition: riscv_encoding.h:827
CSR_MDLMCTL_Type::dlm_bpa
rv_csr_t dlm_bpa
DLM base address.
Definition: core_feature_base.h:319
__enable_irq
__STATIC_FORCEINLINE void __enable_irq(void)
Enable IRQ Interrupts.
Definition: core_feature_base.h:633
CSR_MHPMCOUNTER27
#define CSR_MHPMCOUNTER27
Definition: riscv_encoding.h:706
__STATIC_FORCEINLINE
#define __STATIC_FORCEINLINE
Define a static function that should be always inlined by the compiler.
Definition: nmsis_gcc.h:70
CSR_MCACHECTL_Type::dc_rwtecc
rv_csr_t dc_rwtecc
Control D-Cache Tag Ram ECC code injection.
Definition: core_feature_base.h:265
CSR_MCOUNTINHIBIT
#define CSR_MCOUNTINHIBIT
Definition: riscv_encoding.h:578
CSR_MHPMCOUNTER5H
#define CSR_MHPMCOUNTER5H
Definition: riscv_encoding.h:825
__get_cluster_id
__STATIC_FORCEINLINE unsigned long __get_cluster_id(void)
Get cluster id of current cluster.
Definition: core_feature_base.h:760
CSR_MCYCLE
#define CSR_MCYCLE
Definition: riscv_encoding.h:680
CSR_MCACHECTL_Type::dc_ecc_excp_en
rv_csr_t dc_ecc_excp_en
D-Cache 2bit ECC error exception enable.
Definition: core_feature_base.h:264
CSR_MMISCCTRL_Type::_reserved0
rv_csr_t _reserved0
bit: 0..2 Reserved
Definition: core_feature_base.h:233
CSR_MSTATUS_Type
Union type to access MSTATUS CSR register.
Definition: core_feature_base.h:108
CSR_MDLMCTL_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:321
CSR_MCOUNTINHIBIT_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:197
__TXEVT
__STATIC_FORCEINLINE void __TXEVT(void)
Send TX Event.
Definition: core_feature_base.h:905
__EBREAK
__STATIC_FORCEINLINE void __EBREAK(void)
Breakpoint Instruction.
Definition: core_feature_base.h:863
CSR_MHPMCOUNTER29H
#define CSR_MHPMCOUNTER29H
Definition: riscv_encoding.h:849
CSR_MHPMCOUNTER3
#define CSR_MHPMCOUNTER3
Definition: riscv_encoding.h:682
CSR_MHPMCOUNTER12H
#define CSR_MHPMCOUNTER12H
Definition: riscv_encoding.h:832
CSR_MHPMEVENT8
#define CSR_MHPMEVENT8
Definition: riscv_encoding.h:716
CSR_MCACHECTL_Type::dc_rwdecc
rv_csr_t dc_rwdecc
Control D-Cache Data Ram ECC code injection.
Definition: core_feature_base.h:266
__AMOSWAP_W
__STATIC_FORCEINLINE uint32_t __AMOSWAP_W(volatile uint32_t *addr, uint32_t newval)
Atomic Swap 32bit value into memory.
Definition: core_feature_base.h:1642
CSR_MDCAUSE_Type
Union type to access MDCAUSE CSR register.
Definition: core_feature_base.h:220
CSR_MICFGINFO_Type::_reserved1
rv_csr_t _reserved1
Definition: core_feature_base.h:358
CSR_MDCFGINFO_Type::set
rv_csr_t set
D-Cache sets per way.
Definition: core_feature_base.h:368
CSR_SLEEPVALUE
#define CSR_SLEEPVALUE
Definition: riscv_encoding.h:959
__RV_CSR_READ
#define __RV_CSR_READ(csr)
CSR operation Macro for csrr instruction.
Definition: core_feature_base.h:481
CSR_MMISCCTRL_Type::bpu
rv_csr_t bpu
bit: 3 dynamic prediction enable flag
Definition: core_feature_base.h:234
CSR_MCFGINFO_Type::plic
rv_csr_t plic
PLIC present.
Definition: core_feature_base.h:332
CSR_MDLMCTL_Type::_reserved0
rv_csr_t _reserved0
Reserved.
Definition: core_feature_base.h:318
CSR_MHPMCOUNTER24H
#define CSR_MHPMCOUNTER24H
Definition: riscv_encoding.h:844
CSR_MDCAUSE_Type::mdcause
rv_csr_t mdcause
bit: 0..1 More detailed exception information as MCAUSE supplement
Definition: core_feature_base.h:222
CSR_MHPMCOUNTER5
#define CSR_MHPMCOUNTER5
Definition: riscv_encoding.h:684
__get_hpm_counter
__STATIC_FORCEINLINE unsigned long __get_hpm_counter(unsigned long idx)
Get value of selected high performance monitor couner.
Definition: core_feature_base.h:1249
CSR_MSTATUS_Type::_reserved4
rv_csr_t _reserved4
bit: Reserved
Definition: core_feature_base.h:133
CSR_MHPMCOUNTER3H
#define CSR_MHPMCOUNTER3H
Definition: riscv_encoding.h:823
__disable_minstret_counter
__STATIC_FORCEINLINE void __disable_minstret_counter(void)
Disable MINSTRET counter.
Definition: core_feature_base.h:945
CSR_MHPMCOUNTER15
#define CSR_MHPMCOUNTER15
Definition: riscv_encoding.h:694
CSR_MISA_Type::a
rv_csr_t a
bit: 0 Atomic extension
Definition: core_feature_base.h:70
CSR_MHPMCOUNTER6
#define CSR_MHPMCOUNTER6
Definition: riscv_encoding.h:685
CSR_MSAVESTATUS_Type::w
rv_csr_t w
Type used for csr data access.
Definition: core_feature_base.h:291
CSR_MHPMCOUNTER19
#define CSR_MHPMCOUNTER19
Definition: riscv_encoding.h:698
__enable_all_counter
__STATIC_FORCEINLINE void __enable_all_counter(void)
Enable all MCYCLE & MINSTRET & MHPMCOUNTER counter.
Definition: core_feature_base.h:1002
CSR_MHPMEVENT24
#define CSR_MHPMEVENT24
Definition: riscv_encoding.h:732
CSR_MSTATUS_Type::mprv
rv_csr_t mprv
bit: Machine mode PMP
Definition: core_feature_base.h:137
CSR_MHPMCOUNTER11H
#define CSR_MHPMCOUNTER11H
Definition: riscv_encoding.h:831
__enable_minstret_counter
__STATIC_FORCEINLINE void __enable_minstret_counter(void)
Enable MINSTRET counter.
Definition: core_feature_base.h:935
CSR_MHPMCOUNTER23
#define CSR_MHPMCOUNTER23
Definition: riscv_encoding.h:702
CSR_MHPMCOUNTER26H
#define CSR_MHPMCOUNTER26H
Definition: riscv_encoding.h:846
CSR_MSTATUS_Type::_reserved6
rv_csr_t _reserved6
bit: 19..30 Reserved
Definition: core_feature_base.h:139
CSR_MDCFGINFO_Type::_reserved1
rv_csr_t _reserved1
Definition: core_feature_base.h:376
CSR_MISA_Type::p
rv_csr_t p
bit: 15 Tentatively reserved for Packed-SIMD extension
Definition: core_feature_base.h:85
__RV_CSR_SET
#define __RV_CSR_SET(csr, val)
CSR operation Macro for csrs instruction.
Definition: core_feature_base.h:536
CSR_MHPMCOUNTER31H
#define CSR_MHPMCOUNTER31H
Definition: riscv_encoding.h:851
CSR_MHPMCOUNTER21H
#define CSR_MHPMCOUNTER21H
Definition: riscv_encoding.h:841
__WFE
__STATIC_FORCEINLINE void __WFE(void)
Wait For Event.
Definition: core_feature_base.h:849
CSR_MHPMEVENT18
#define CSR_MHPMEVENT18
Definition: riscv_encoding.h:726
CSR_MPPICFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:391
CSR_MISA_Type::_reserved4
rv_csr_t _reserved4
bit: 22 Reserved
Definition: core_feature_base.h:92
CSR_MHPMCOUNTER28
#define CSR_MHPMCOUNTER28
Definition: riscv_encoding.h:707
CSR_MISA_Type::m
rv_csr_t m
bit: 12 Integer Multiply/Divide extension
Definition: core_feature_base.h:82
CSR_MCAUSE_Type::_reserved0
rv_csr_t _reserved0
bit: 15..12 Reserved
Definition: core_feature_base.h:167
CSR_MHPMCOUNTER29
#define CSR_MHPMCOUNTER29
Definition: riscv_encoding.h:708
CSR_MISA_Type::_reserved5
rv_csr_t _reserved5
bit: 24..29 Reserved
Definition: core_feature_base.h:98
CSR_MFIOCFGINFO_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:404
CSR_MHPMEVENT28
#define CSR_MHPMEVENT28
Definition: riscv_encoding.h:736
__AMOADD_W
__STATIC_FORCEINLINE int32_t __AMOADD_W(volatile int32_t *addr, int32_t value)
Atomic Add with 32bit value.
Definition: core_feature_base.h:1658
CSR_MSTATUS
#define CSR_MSTATUS
Definition: riscv_encoding.h:566
CSR_MFIOCFGINFO_Type::fio_bpa
rv_csr_t fio_bpa
FIO base address.
Definition: core_feature_base.h:402
__LB
__STATIC_FORCEINLINE uint8_t __LB(volatile void *addr)
Load 8bit value from address (8 bit)
Definition: core_feature_base.h:1509
CSR_MSUBM_Type::_reserved0
rv_csr_t _reserved0
bit: 0..5 Reserved
Definition: core_feature_base.h:205
CSR_MHPMCOUNTER30
#define CSR_MHPMCOUNTER30
Definition: riscv_encoding.h:709
CSR_MSTATUS_Type::sd
rv_csr_t sd
bit: Dirty status for XS or FS
Definition: core_feature_base.h:140
CSR_MISA_Type::_reserved2
rv_csr_t _reserved2
bit: 14 Reserved
Definition: core_feature_base.h:84
__RISCV_XLEN
#define __RISCV_XLEN
Refer to the width of an integer register in bits(either 32 or 64)
Definition: core_feature_base.h:48
CSR_MSTATUS_Type::_reserved2
rv_csr_t _reserved2
bit: 4 Reserved
Definition: core_feature_base.h:129
CSR_MISA_Type::q
rv_csr_t q
bit: 16 Quad-precision floating-point extension
Definition: core_feature_base.h:86
CSR_MSTATUS_Type::sie
rv_csr_t sie
bit: 1 supervisor interrupt enable flag
Definition: core_feature_base.h:126
CSR_MILMCTL_Type::ilm_ecc_excp_en
rv_csr_t ilm_ecc_excp_en
ILM ECC exception enable.
Definition: core_feature_base.h:301
__AMOMIN_W
__STATIC_FORCEINLINE int32_t __AMOMIN_W(volatile int32_t *addr, int32_t value)
Atomic signed MIN with 32bit value.
Definition: core_feature_base.h:1770
CSR_MSUBM_Type::_reserved1
rv_csr_t _reserved1
bit: 10..31 Reserved
Definition: core_feature_base.h:211
CSR_MMISCCTRL_Type::_reserved3
rv_csr_t _reserved3
bit: 10..31 Reserved
Definition: core_feature_base.h:242
__set_medeleg
__STATIC_FORCEINLINE void __set_medeleg(unsigned long mask)
Set exceptions delegation to S mode.
Definition: core_feature_base.h:1452
CSR_MCOUNTINHIBIT_Type::_reserved1
rv_csr_t _reserved1
bit: 3..31 Reserved
Definition: core_feature_base.h:194
CSR_MILMCTL_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:306
CSR_MICFGINFO_Type::_reserved0
rv_csr_t _reserved0
Definition: core_feature_base.h:354
CSR_MSAVESTATUS_Type
Union type to access MSAVESTATUS CSR register.
Definition: core_feature_base.h:275
__set_hpm_counter
__STATIC_FORCEINLINE void __set_hpm_counter(unsigned long idx, uint64_t value)
Set value for selected high performance monitor counter.
Definition: core_feature_base.h:1112
CSR_MSUBM_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:214
CSR_MISA_Type::v
rv_csr_t v
bit: 21 Tentatively reserved for Vector extension
Definition: core_feature_base.h:91
CSR_MECCLOCK_Type::d
rv_csr_t d
Type used for csr data access.
Definition: core_feature_base.h:415
CSR_MHPMEVENT4
#define CSR_MHPMEVENT4
Definition: riscv_encoding.h:712
CSR_MCFGINFO_Type::dlm
rv_csr_t dlm
DLM present.
Definition: core_feature_base.h:337
CSR_MDCFGINFO_Type::lm_xonly
rv_csr_t lm_xonly
DLM Execute only permission.
Definition: core_feature_base.h:374
__SW
__STATIC_FORCEINLINE void __SW(volatile void *addr, uint32_t val)
Write 32bit value to address (32 bit)
Definition: core_feature_base.h:1589
CSR_MCAUSE_Type::interrupt
rv_csr_t interrupt
bit: 31 trap type.
Definition: core_feature_base.h:177
CSR_MECCCODE_Type::ramid
rv_csr_t ramid
Indicate 2bit ECC error, software can clear these bits.
Definition: core_feature_base.h:425
CSR_MPPICFGINFO_Type
Union type to access MPPICFG_INFO CSR register.
Definition: core_feature_base.h:384
CSR_MDCAUSE_Type::_reserved0
rv_csr_t _reserved0
bit: 2..XLEN-1 Reserved
Definition: core_feature_base.h:223
CSR_MHPMCOUNTER25H
#define CSR_MHPMCOUNTER25H
Definition: riscv_encoding.h:845
__ASM
#define __ASM
Pass information from the compiler to the assembler.
Definition: nmsis_gcc.h:55
__get_rv_instret
__STATIC_FORCEINLINE uint64_t __get_rv_instret(void)
Read whole 64 bits value of machine instruction-retired counter.
Definition: core_feature_base.h:704
WFI_DEEP_SLEEP
@ WFI_DEEP_SLEEP
Deep sleep mode, the core_clk and core_ano_clk will poweroff.
Definition: core_feature_base.h:884
CSR_MSAVESTATUS_Type::_reserved0
rv_csr_t _reserved0
bit: 3..5 Reserved
Definition: core_feature_base.h:279
CSR_MISA_Type::e
rv_csr_t e
bit: 4 RV32E base ISA
Definition: core_feature_base.h:74
CSR_MILMCTL_Type
Union type to access MILM_CTL CSR register.
Definition: core_feature_base.h:297
__FENCE_I
__STATIC_FORCEINLINE void __FENCE_I(void)
Fence.i Instruction.
Definition: core_feature_base.h:1475
CSR_MICFGINFO_Type::lm_size
rv_csr_t lm_size
ILM size, need to be 2^n size.
Definition: core_feature_base.h:355
rv_csr_t
unsigned long rv_csr_t
Type of Control and Status Register(CSR), depends on the XLEN defined in RISC-V.
Definition: core_feature_base.h:55
CSR_MCFGINFO_Type::ecc
rv_csr_t ecc
ECC present.
Definition: core_feature_base.h:330
CSR_MCFGINFO_Type::nice
rv_csr_t nice
NICE present.
Definition: core_feature_base.h:335
CSR_MHPMCOUNTER10
#define CSR_MHPMCOUNTER10
Definition: riscv_encoding.h:689
CSR_MHPMEVENT23
#define CSR_MHPMEVENT23
Definition: riscv_encoding.h:731
CSR_MHPMCOUNTER18
#define CSR_MHPMCOUNTER18
Definition: riscv_encoding.h:697
CSR_WFE
#define CSR_WFE
Definition: riscv_encoding.h:961
CSR_MDCFGINFO_Type::lsize
rv_csr_t lsize
D-Cache line size.
Definition: core_feature_base.h:370
CSR_MCAUSE_Type::mpp
rv_csr_t mpp
bit: 29..28 Privilede mode flag before enter interrupt
Definition: core_feature_base.h:171
__disable_mhpm_counter
__STATIC_FORCEINLINE void __disable_mhpm_counter(unsigned long idx)
Disable selected hardware performance monitor counter.
Definition: core_feature_base.h:967
CSR_MHPMCOUNTER6H
#define CSR_MHPMCOUNTER6H
Definition: riscv_encoding.h:826
CSR_MISA_Type::n
rv_csr_t n
bit: 13 User-level interrupts supported
Definition: core_feature_base.h:83
CSR_MPPICFGINFO_Type::_reserved0
rv_csr_t _reserved0
Reserved.
Definition: core_feature_base.h:386
CSR_MHPMCOUNTER26
#define CSR_MHPMCOUNTER26
Definition: riscv_encoding.h:705
CSR_MMISCCTRL_Type::nmi_cause
rv_csr_t nmi_cause
bit: 9 mnvec control and nmi mcase exccode
Definition: core_feature_base.h:238
CSR_MSTATUS_Type::mie
rv_csr_t mie
bit: 3 Machine mode interrupt enable flag
Definition: core_feature_base.h:128
CSR_MHPMEVENT21
#define CSR_MHPMEVENT21
Definition: riscv_encoding.h:729
CSR_MISA_Type::x
rv_csr_t x
bit: 23 Non-standard extensions present
Definition: core_feature_base.h:93
CSR_MCACHECTL_Type::ic_rwdecc
rv_csr_t ic_rwdecc
Control I-Cache Data Ram ECC code injection.
Definition: core_feature_base.h:260
CSR_MISA_Type::i
rv_csr_t i
bit: 8 RV32I/64I/128I base ISA
Definition: core_feature_base.h:78
CSR_MISA_Type::_resreved3
rv_csr_t _resreved3
bit: 17 Reserved
Definition: core_feature_base.h:87
CSR_MEPC
#define CSR_MEPC
Definition: riscv_encoding.h:580