From 0799600686a918c06ffad72221ba3e3c961d3164 Mon Sep 17 00:00:00 2001 From: Tony Gutierrez Date: Mon, 21 Nov 2016 15:35:56 -0500 Subject: [PATCH] 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. --- src/arch/x86/isa/microops/mediaop.isa | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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;