From: Jacob Lifshay Date: Wed, 17 May 2023 04:53:45 +0000 (-0700) Subject: fix bug in fcvttg OpenPower and saturating conversion X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c75dd28e637f6f555d5c6116576924812b0b9f9a;p=libreriscv.git fix bug in fcvttg OpenPower and saturating conversion --- diff --git a/openpower/sv/int_fp_mv/moves_and_conversions.mdwn b/openpower/sv/int_fp_mv/moves_and_conversions.mdwn index 94fd1f7fc..c735a6944 100644 --- a/openpower/sv/int_fp_mv/moves_and_conversions.mdwn +++ b/openpower/sv/int_fp_mv/moves_and_conversions.mdwn @@ -512,9 +512,9 @@ Section 7.1 of the ECMAScript / JavaScript else if bfp_COMPARE_LT(rnd, range_min) then result <- si64_CONVERT_FROM_BFP(range_min) else if IT[1] = 1 then # Unsigned 32/64-bit - result <- ui64_CONVERT_FROM_BFP(range_max) + result <- ui64_CONVERT_FROM_BFP(rnd) else # Signed 32/64-bit - result <- si64_CONVERT_FROM_BFP(range_max) + result <- si64_CONVERT_FROM_BFP(rnd) case(2, 3): # Java/Saturating semantics if IsNaN(rnd) then result <- [0] * 64 @@ -523,9 +523,9 @@ Section 7.1 of the ECMAScript / JavaScript else if bfp_COMPARE_LT(rnd, range_min) then result <- si64_CONVERT_FROM_BFP(range_min) else if IT[1] = 1 then # Unsigned 32/64-bit - result <- ui64_CONVERT_FROM_BFP(range_max) + result <- ui64_CONVERT_FROM_BFP(rnd) else # Signed 32/64-bit - result <- si64_CONVERT_FROM_BFP(range_max) + result <- si64_CONVERT_FROM_BFP(rnd) default: # JavaScript semantics # CVM = 6, 7 are illegal instructions # using a 128-bit intermediate works here because the largest type @@ -677,9 +677,9 @@ Special Registers altered: else if bfp_COMPARE_LT(rnd, range_min) then result <- si64_CONVERT_FROM_BFP(range_min) else if IT[1] = 1 then # Unsigned 32/64-bit - result <- ui64_CONVERT_FROM_BFP(range_max) + result <- ui64_CONVERT_FROM_BFP(rnd) else # Signed 32/64-bit - result <- si64_CONVERT_FROM_BFP(range_max) + result <- si64_CONVERT_FROM_BFP(rnd) case(2, 3): # Java/Saturating semantics if IsNaN(rnd) then result <- [0] * 64 @@ -688,9 +688,9 @@ Special Registers altered: else if bfp_COMPARE_LT(rnd, range_min) then result <- si64_CONVERT_FROM_BFP(range_min) else if IT[1] = 1 then # Unsigned 32/64-bit - result <- ui64_CONVERT_FROM_BFP(range_max) + result <- ui64_CONVERT_FROM_BFP(rnd) else # Signed 32/64-bit - result <- si64_CONVERT_FROM_BFP(range_max) + result <- si64_CONVERT_FROM_BFP(rnd) default: # JavaScript semantics # CVM = 6, 7 are illegal instructions # using a 128-bit intermediate works here because the largest type