5858
5959static const RiscvInfo kEmptyRiscvInfo ;
6060
61- static void HandleRiscVIsaLine (StringView line , RiscvFeatures * const features ) {
62- for (size_t i = 0 ; i < RISCV_LAST_ ; ++ i ) {
61+ static void HandleRiscVIsaLineOrdered (StringView line ,
62+ RiscvFeatures * const features ) {
63+ for (size_t i = 0 ; i < RISCV_FIRST_UNORDERED_ ; ++ i ) {
6364 StringView flag = str (kCpuInfoFlags [i ]);
6465 int index_of_flag = CpuFeatures_StringView_IndexOf (line , flag );
6566 bool is_set = index_of_flag != -1 ;
@@ -69,6 +70,28 @@ static void HandleRiscVIsaLine(StringView line, RiscvFeatures* const features) {
6970 }
7071}
7172
73+ static void HandleRiscVIsaLineUnordered (StringView line ,
74+ RiscvFeatures * const features ) {
75+ for (size_t i = RISCV_FIRST_UNORDERED_ ; i < RISCV_LAST_ ; ++ i ) {
76+ bool is_set = CpuFeatures_StringView_HasWord (line , kCpuInfoFlags [i ], '_' );
77+ kSetters [i ](features , is_set );
78+ }
79+ }
80+
81+ static void HandleRiscVIsaLine (StringView line , RiscvFeatures * const features ) {
82+ int idx_underscore = CpuFeatures_StringView_IndexOfChar (line , '_' );
83+ if (idx_underscore == -1 ) {
84+ HandleRiscVIsaLineOrdered (line , features );
85+ } else {
86+ StringView ordered =
87+ CpuFeatures_StringView_PopBack (line , line .size - idx_underscore );
88+ StringView unordered =
89+ CpuFeatures_StringView_PopFront (line , idx_underscore );
90+ HandleRiscVIsaLineOrdered (ordered , features );
91+ HandleRiscVIsaLineUnordered (unordered , features );
92+ }
93+ }
94+
7295static bool HandleRiscVLine (const LineResult result , RiscvInfo * const info ) {
7396 StringView line = result .line ;
7497 StringView key , value ;
0 commit comments