From: Tony Gutierrez Date: Mon, 21 Nov 2016 20:35:56 +0000 (-0500) Subject: x86: fix issue with casting in Cvtf2i X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0799600686a918c06ffad72221ba3e3c961d3164;p=gem5.git x86: fix issue with casting in Cvtf2i UBSAN flags this operation because it detects that arg is being cast directly to an unsigned type, argBits. this patch fixes this by first casting the value to a signed int type, then reintrepreting the raw bits of the signed int into argBits. --- diff --git a/src/arch/x86/isa/microops/mediaop.isa b/src/arch/x86/isa/microops/mediaop.isa index cdb3b4899..63e22a23f 100644 --- a/src/arch/x86/isa/microops/mediaop.isa +++ b/src/arch/x86/isa/microops/mediaop.isa @@ -1220,9 +1220,11 @@ let {{ } if (destSize == 4) { - argBits = (uint32_t)arg; + int32_t i_arg = (int32_t)arg; + argBits = *((uint32_t*)&i_arg); } else { - argBits = (uint64_t)arg; + int64_t i_arg = (int64_t)arg; + argBits = *((uint64_t*)&i_arg); } int destHiIndex = destStart + (i + 1) * destSizeBits - 1; int destLoIndex = destStart + (i + 0) * destSizeBits;