From 966b9076fb3303b6e5191222c63229700f30a00e Mon Sep 17 00:00:00 2001 From: Aina Niemetz Date: Fri, 9 Sep 2022 08:24:53 -0700 Subject: [PATCH] rounder: Fix invalid creation of zero-size bit-vector. Fixes #8. This fixes an issue where the rounder attempts to generate a bit-vector of size 0 in fixedPositionRound() when converting an FP to an unsigned BV of size 1. --- core/rounder.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/rounder.h b/core/rounder.h index 99749fa..1eeefd4 100644 --- a/core/rounder.h +++ b/core/rounder.h @@ -223,8 +223,13 @@ namespace symfpu { ubv roundedSignificand(conditionalIncrement(roundUp, extractedSignificand)); ubv overflowBit(roundedSignificand.extract(targetWidth, targetWidth) & ubv(roundUp)); - ubv carryUpMask((overflowBit | ubv(knownLeadingOne)).append(ubv::zero(targetWidth - 1))); // Cheaper than conditional shift - + // Cheaper than conditional shift + ubv carryUpMask(overflowBit | ubv(knownLeadingOne)); + if (targetWidth > 1) + { + carryUpMask = carryUpMask.append(ubv::zero(targetWidth - 1)); + } + // Build result significandRounderResult result(roundedSignificand.extract(targetWidth-1,0) | carryUpMask, overflowBit.isAllOnes());