From e956c744d4b3f54d4b8dcfe0b4cc2bf5640a8ccb Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Tue, 16 May 2023 21:52:52 -0700 Subject: [PATCH] fix bug in fcvttg OpenPower and saturating conversion --- openpower/isa/fpcvt.mdwn | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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 -- 2.30.2