diff --git a/cranelift/codegen/meta/src/cdsl/regs.rs b/cranelift/codegen/meta/src/cdsl/regs.rs index 60bf8f5818..e7a3464d10 100644 --- a/cranelift/codegen/meta/src/cdsl/regs.rs +++ b/cranelift/codegen/meta/src/cdsl/regs.rs @@ -43,10 +43,26 @@ impl RegBank { // Try to match without the bank prefix. assert!(name.starts_with(self.prefix)); let name_without_prefix = &name[self.prefix.len()..]; - self.names + if let Some(found) = self + .names .iter() .position(|®_name| reg_name == name_without_prefix) - .expect(&format!("invalid register name {}", name)) + { + found + } else { + // Ultimate try: try to parse a number and use this in the array, eg r15 on x86. + if let Ok(as_num) = name_without_prefix.parse::() { + assert!( + (as_num - self.first_unit) < self.units, + "trying to get {}, but bank only has {} registers!", + name, + self.units + ); + (as_num - self.first_unit) as usize + } else { + panic!("invalid register name {}", name); + } + } }; self.first_unit + (unit as u8) }