From: Gabe Black Date: Wed, 5 Aug 2009 10:06:01 +0000 (-0700) Subject: X86: Make sure immediate values are truncated properly. X-Git-Tag: Calvin_Submission~164 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e2e0ae576a3f0425cd7092d9115debefa64d7476;p=gem5.git X86: Make sure immediate values are truncated properly. Register values will be "picked" which will assure they don't have junk beyond the part we're using. Immediate values don't go through a similar process, so we should truncate them explicitly. --- diff --git a/src/arch/x86/isa/microops/regop.isa b/src/arch/x86/isa/microops/regop.isa index e0228ec0e..f2a574954 100644 --- a/src/arch/x86/isa/microops/regop.isa +++ b/src/arch/x86/isa/microops/regop.isa @@ -525,7 +525,7 @@ let {{ uint64_t hiResult; uint64_t psrc1_h = psrc1 / shifter; uint64_t psrc1_l = psrc1 & mask(halfSize); - uint64_t psrc2_h = op2 / shifter; + uint64_t psrc2_h = (op2 / shifter) & mask(halfSize); uint64_t psrc2_l = op2 & mask(halfSize); hiResult = ((psrc1_l * psrc2_h + psrc1_h * psrc2_l + ((psrc1_l * psrc2_l) / shifter)) /shifter) + @@ -545,7 +545,7 @@ let {{ uint64_t shifter = (1ULL << halfSize); uint64_t psrc1_h = psrc1 / shifter; uint64_t psrc1_l = psrc1 & mask(halfSize); - uint64_t psrc2_h = op2 / shifter; + uint64_t psrc2_h = (op2 / shifter) & mask(halfSize); uint64_t psrc2_l = op2 & mask(halfSize); ProdHi = ((psrc1_l * psrc2_h + psrc1_h * psrc2_l + ((psrc1_l * psrc2_l) / shifter)) / shifter) +