From: Jacob Lifshay Date: Thu, 9 Jul 2020 05:14:31 +0000 (-0700) Subject: working on instruction model X-Git-Tag: v0.2.0~39 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0368e431e7bacfc00c29812db2921e4b2842e5f4;p=power-instruction-analyzer.git working on instruction model --- diff --git a/src/instr_models.rs b/src/instr_models.rs index c23e659..c58806e 100644 --- a/src/instr_models.rs +++ b/src/instr_models.rs @@ -313,8 +313,9 @@ create_instr_variants_cr!(mulhw, mulhw_, i32); pub fn mulhw(inputs: InstructionInput) -> InstructionResult { let ra = inputs.ra as i32 as i64; let rb = inputs.rb as i32 as i64; - let result = ((ra * rb) >> 32) as i32; - let result = result as u64; + let result = (ra * rb) >> 32; + let mut result = result as u32 as u64; + result |= result << 32; InstructionResult { rt: Some(result), ..InstructionResult::default() @@ -326,8 +327,9 @@ create_instr_variants_cr!(mulhwu, mulhwu_, i32); pub fn mulhwu(inputs: InstructionInput) -> InstructionResult { let ra = inputs.ra as u32 as u64; let rb = inputs.rb as u32 as u64; - let result = ((ra * rb) >> 32) as u32; - let result = result as u64; + let result = (ra * rb) >> 32; + let mut result = result as u32 as u64; + result |= result << 32; InstructionResult { rt: Some(result), ..InstructionResult::default()