aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2021-12-01 19:28:45 -0800
committerGitHub <noreply@github.com>2021-12-01 19:28:45 -0800
commita9b3babb8f27c063213d6189f4862269756a1a0c (patch)
treec36cfc1ba880741d4594d15eabad0b987c59d9b9
parent6507ccc30f29948a81661048e8a0ac3ae8e9a436 (diff)
parenta00445c8e04db6c96dabccf23c04ab2e4571ca2b (diff)
downloadspike-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.cc26
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());
}
}