diff options
author | Andrew Waterman <andrew@sifive.com> | 2021-12-01 19:28:45 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-01 19:28:45 -0800 |
commit | a9b3babb8f27c063213d6189f4862269756a1a0c (patch) | |
tree | c36cfc1ba880741d4594d15eabad0b987c59d9b9 | |
parent | 6507ccc30f29948a81661048e8a0ac3ae8e9a436 (diff) | |
parent | a00445c8e04db6c96dabccf23c04ab2e4571ca2b (diff) | |
download | spike-a9b3babb8f27c063213d6189f4862269756a1a0c.zip spike-a9b3babb8f27c063213d6189f4862269756a1a0c.tar.gz spike-a9b3babb8f27c063213d6189f4862269756a1a0c.tar.bz2 |
Merge pull request #871 from a4lg/string-handling
Improve string handling (ISA string)
-rw-r--r-- | riscv/processor.cc | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc index dd3d3fb..a7b4a5b 100644 --- a/riscv/processor.cc +++ b/riscv/processor.cc @@ -117,12 +117,17 @@ static bool check_pow2(int val) return ((val & (val - 1))) == 0; } -void processor_t::parse_varch_string(const char* s) +static std::string strtolower(const char* str) { - std::string str, tmp; - for (const char *r = s; *r; r++) - str += std::tolower(*r); + std::string res; + for (const char *r = str; *r; r++) + res += std::tolower(*r); + return res; +} +void processor_t::parse_varch_string(const char* s) +{ + std::string str = strtolower(s); size_t pos = 0; size_t len = str.length(); int vlen = 0; @@ -165,14 +170,6 @@ void processor_t::parse_varch_string(const char* s) VU.vstart_alu = vstart_alu; } -static std::string strtolower(const char* str) -{ - std::string res; - for (const char *r = str; *r; r++) - res += std::tolower(*r); - return res; -} - void processor_t::parse_priv_string(const char* str) { std::string lowercase = strtolower(str); @@ -224,7 +221,8 @@ void processor_t::parse_isa_string(const char* str) if (isa_string[4] != 'i') bad_isa_string(str, "'I' extension is required"); - auto p = isa_string.begin(); + const char* isa_str = isa_string.c_str(); + auto p = isa_str; for (p += 4; islower(*p) && !strchr("zsx", *p); ++p) { while (*all_subsets && (*p != *all_subsets)) ++all_subsets; @@ -336,7 +334,7 @@ void processor_t::parse_isa_string(const char* str) p = end; } if (*p) { - bad_isa_string(str, ("can't parse: " + std::string(p, isa_string.end())).c_str()); + bad_isa_string(str, ("can't parse: " + std::string(p)).c_str()); } } |