[Libre-soc-bugs] [Bug 432] mulld pseudocode overflow calculation incorrect
bugzilla-daemon at libre-soc.org
bugzilla-daemon at libre-soc.org
Wed Jul 15 15:54:33 BST 2020
https://bugs.libre-soc.org/show_bug.cgi?id=432
--- Comment #4 from Jacob Lifshay <programmerjake at gmail.com> ---
sec 3.3.9.1 of powerisa v3.1:
If OE=1 then OV and OV32 are set to 1 if the product can-
not be represented in 64 bits.
so, it doesn't explicitly say u64 or i64
however, I did include test cases in power-instruction-analyzer which wouldn't
overflow according to the buggy pseudocode but are still marked as overflowing
in the mulld instruction model:
-1i64 * -0x8000_0000_0000_0000i64
2i64 * -0x8000_0000_0000_0000i64
instruction model code:
https://salsa.debian.org/Kazan-team/power-instruction-analyzer/-/blob/fa9a4d450614adcdda9ec08dca40423492dcdbbd/src/instr_models.rs#L341
pub fn mulldo(inputs: InstructionInput) -> InstructionResult {
let ra = inputs.ra as i64;
let rb = inputs.rb as i64;
let result = ra.wrapping_mul(rb) as u64;
let overflow = ra.checked_mul(rb).is_none();
InstructionResult {
rt: Some(result),
overflow: Some(OverflowFlags::from_overflow(overflow)),
..InstructionResult::default()
}
}
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the libre-soc-bugs
mailing list