From: Jacob Lifshay Date: Wed, 17 May 2023 04:52:52 +0000 (-0700) Subject: fix bug in fcvttg OpenPower and saturating conversion X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=69283dc8df78f2739f6297599583708a13e56690;p=openpower-isa.git fix bug in fcvttg OpenPower and saturating conversion --- diff --git a/openpower/isa/fpcvt.mdwn b/openpower/isa/fpcvt.mdwn index 68fb0bf3..0d2b859f 100644 --- a/openpower/isa/fpcvt.mdwn +++ b/openpower/isa/fpcvt.mdwn @@ -147,9 +147,9 @@ Pseudo-code: 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 @@ -158,9 +158,9 @@ Pseudo-code: 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 @@ -262,9 +262,9 @@ Pseudo-code: 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 @@ -273,9 +273,9 @@ Pseudo-code: 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