Skip to content

Commit 011be43

Browse files
committed
Add impl FromStr for NvvmArch.
It can be used in `NvvmOption::from_str`, and will also be used in a subsequent commit in compiletests.
1 parent 2934ded commit 011be43

File tree

1 file changed

+47
-41
lines changed

1 file changed

+47
-41
lines changed

crates/nvvm/src/lib.rs

Lines changed: 47 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -243,46 +243,10 @@ impl FromStr for NvvmOption {
243243
}
244244
_ if s.starts_with("-arch=") => {
245245
let slice = &s[6..];
246-
if !slice.starts_with("compute_") {
247-
return Err(format!("unknown -arch value: {slice}"));
246+
match NvvmArch::from_str(slice) {
247+
Ok(arch) => Self::Arch(arch),
248+
Err(_) => return Err(format!("unknown -arch value: {slice}")),
248249
}
249-
let arch_num = &slice[8..];
250-
let arch = match arch_num {
251-
"35" => NvvmArch::Compute35,
252-
"37" => NvvmArch::Compute37,
253-
"50" => NvvmArch::Compute50,
254-
"52" => NvvmArch::Compute52,
255-
"53" => NvvmArch::Compute53,
256-
"60" => NvvmArch::Compute60,
257-
"61" => NvvmArch::Compute61,
258-
"62" => NvvmArch::Compute62,
259-
"70" => NvvmArch::Compute70,
260-
"72" => NvvmArch::Compute72,
261-
"75" => NvvmArch::Compute75,
262-
"80" => NvvmArch::Compute80,
263-
"86" => NvvmArch::Compute86,
264-
"87" => NvvmArch::Compute87,
265-
"89" => NvvmArch::Compute89,
266-
"90" => NvvmArch::Compute90,
267-
"90a" => NvvmArch::Compute90a,
268-
"100" => NvvmArch::Compute100,
269-
"100f" => NvvmArch::Compute100f,
270-
"100a" => NvvmArch::Compute100a,
271-
"101" => NvvmArch::Compute101,
272-
"101f" => NvvmArch::Compute101f,
273-
"101a" => NvvmArch::Compute101a,
274-
"103" => NvvmArch::Compute103,
275-
"103f" => NvvmArch::Compute103f,
276-
"103a" => NvvmArch::Compute103a,
277-
"120" => NvvmArch::Compute120,
278-
"120f" => NvvmArch::Compute120f,
279-
"120a" => NvvmArch::Compute120a,
280-
"121" => NvvmArch::Compute121,
281-
"121f" => NvvmArch::Compute121f,
282-
"121a" => NvvmArch::Compute121a,
283-
_ => return Err(format!("unknown -arch=compute_NN value: {arch_num}")),
284-
};
285-
Self::Arch(arch)
286250
}
287251
_ => return Err(format!("unknown option: {s}")),
288252
})
@@ -340,6 +304,48 @@ impl Display for NvvmArch {
340304
}
341305
}
342306

307+
impl FromStr for NvvmArch {
308+
type Err = &'static str;
309+
310+
fn from_str(s: &str) -> Result<Self, Self::Err> {
311+
Ok(match s {
312+
"compute_35" => NvvmArch::Compute35,
313+
"compute_37" => NvvmArch::Compute37,
314+
"compute_50" => NvvmArch::Compute50,
315+
"compute_52" => NvvmArch::Compute52,
316+
"compute_53" => NvvmArch::Compute53,
317+
"compute_60" => NvvmArch::Compute60,
318+
"compute_61" => NvvmArch::Compute61,
319+
"compute_62" => NvvmArch::Compute62,
320+
"compute_70" => NvvmArch::Compute70,
321+
"compute_72" => NvvmArch::Compute72,
322+
"compute_75" => NvvmArch::Compute75,
323+
"compute_80" => NvvmArch::Compute80,
324+
"compute_86" => NvvmArch::Compute86,
325+
"compute_87" => NvvmArch::Compute87,
326+
"compute_89" => NvvmArch::Compute89,
327+
"compute_90" => NvvmArch::Compute90,
328+
"compute_90a" => NvvmArch::Compute90a,
329+
"compute_100" => NvvmArch::Compute100,
330+
"compute_100f" => NvvmArch::Compute100f,
331+
"compute_100a" => NvvmArch::Compute100a,
332+
"compute_101" => NvvmArch::Compute101,
333+
"compute_101f" => NvvmArch::Compute101f,
334+
"compute_101a" => NvvmArch::Compute101a,
335+
"compute_103" => NvvmArch::Compute103,
336+
"compute_103f" => NvvmArch::Compute103f,
337+
"compute_103a" => NvvmArch::Compute103a,
338+
"compute_120" => NvvmArch::Compute120,
339+
"compute_120f" => NvvmArch::Compute120f,
340+
"compute_120a" => NvvmArch::Compute120a,
341+
"compute_121" => NvvmArch::Compute121,
342+
"compute_121f" => NvvmArch::Compute121f,
343+
"compute_121a" => NvvmArch::Compute121a,
344+
_ => return Err("unknown compile target"),
345+
})
346+
}
347+
}
348+
343349
impl Default for NvvmArch {
344350
fn default() -> Self {
345351
Self::Compute52
@@ -1116,8 +1122,8 @@ mod tests {
11161122
err("blah", "unknown option: blah");
11171123
err("-aardvark", "unknown option: -aardvark");
11181124
err("-arch=compute75", "unknown -arch value: compute75");
1119-
err("-arch=compute_10", "unknown -arch=compute_NN value: 10");
1120-
err("-arch=compute_100x", "unknown -arch=compute_NN value: 100x");
1125+
err("-arch=compute_10", "unknown -arch value: compute_10");
1126+
err("-arch=compute_100x", "unknown -arch value: compute_100x");
11211127
err("-opt=3", "-opt=3 is the default");
11221128
err("-opt=99", "unknown -opt value: 99");
11231129
}

0 commit comments

Comments
 (0)