From 22ead3ea5680382cc3bc2977c831282160e516d1 Mon Sep 17 00:00:00 2001 From: Andrzej Janik Date: Wed, 9 Dec 2020 21:27:22 +0100 Subject: [PATCH] Fix bugs --- ptx/src/translate.rs | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/ptx/src/translate.rs b/ptx/src/translate.rs index 7f1695e..dac31a5 100644 --- a/ptx/src/translate.rs +++ b/ptx/src/translate.rs @@ -4792,11 +4792,17 @@ impl SpecialRegistersMap { id } hash_map::Entry::Vacant(e) => { - let numeric_id = *current_id; - *current_id += 1; - e.insert(numeric_id); - self.id_to_reg.insert(numeric_id, new); - numeric_id + drop(e); + match self.reg_to_id.entry(new) { + hash_map::Entry::Occupied(e) => *e.get(), + hash_map::Entry::Vacant(e) => { + let numeric_id = *current_id; + *current_id += 1; + e.insert(numeric_id); + self.id_to_reg.insert(numeric_id, new); + numeric_id + } + } } } } @@ -5162,7 +5168,19 @@ impl ExpandedStatement { offset_src: constant_src, }) } - Statement::RepackVector(_) => todo!(), + Statement::RepackVector(repack) => { + let packed = f(repack.packed, !repack.is_extract); + let unpacked = repack + .unpacked + .iter() + .map(|id| f(*id, repack.is_extract)) + .collect(); + Statement::RepackVector(RepackVectorDetails { + packed, + unpacked, + ..repack + }) + } } } }