Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1475776/?format=api
{ "id": 1475776, "url": "http://patchwork.ozlabs.org/api/patches/1475776/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20210508014802.892561-57-richard.henderson@linaro.org/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20210508014802.892561-57-richard.henderson@linaro.org>", "list_archive_url": null, "date": "2021-05-08T01:47:46", "name": "[56/72] softfloat: Introduce Floatx80RoundPrec", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "2a0766653225d9b07a77aa89e747059f2c536859", "submitter": { "id": 72104, "url": "http://patchwork.ozlabs.org/api/people/72104/?format=api", "name": "Richard Henderson", "email": "richard.henderson@linaro.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20210508014802.892561-57-richard.henderson@linaro.org/mbox/", "series": [ { "id": 242770, "url": "http://patchwork.ozlabs.org/api/series/242770/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=242770", "date": "2021-05-08T01:46:53", "name": "Convert floatx80 and float128 to FloatParts", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/242770/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1475776/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1475776/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=<UNKNOWN>)", "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=pwF35ETW;\n\tdkim-atps=neutral" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 4FcWpB1Ljfz9sX1\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 8 May 2021 12:43:14 +1000 (AEST)", "from localhost ([::1]:55826 helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1lfCvw-0006Pv-6h\n\tfor incoming@patchwork.ozlabs.org; Fri, 07 May 2021 22:43:12 -0400", "from eggs.gnu.org ([2001:470:142:3::10]:41720)\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1lfC8D-0003SM-NY\n for qemu-devel@nongnu.org; Fri, 07 May 2021 21:51:49 -0400", "from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]:33477)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1lfC85-0005W8-WF\n for qemu-devel@nongnu.org; Fri, 07 May 2021 21:51:49 -0400", "by mail-pf1-x436.google.com with SMTP id h11so9339697pfn.0\n for <qemu-devel@nongnu.org>; Fri, 07 May 2021 18:51:41 -0700 (PDT)", "from localhost.localdomain ([71.212.144.24])\n by smtp.gmail.com with ESMTPSA id 204sm5861396pfw.158.2021.05.07.18.51.39\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Fri, 07 May 2021 18:51:40 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=Hiam3qpkLAIJqjlYkVn2YRf+JYbyJaD15I/9lQ8LGfg=;\n b=pwF35ETWghRMk4diUW3zuFLGAhOs/oRHzI5XQgDjkduC1eFSZOBjJ7nDq0Om7mGxL3\n UImZJ6CyUQVI/WRfAyuI6uHsUnK/Idds5TPxgmPNAtZF/i5rFWQFRmb/dHDXKwNPlTJ6\n 1M2cavABZPDQtpHnPx8S/GJ1vYsz6FIlsiDFZmZJjZYSpMzo1q3qzJyHcCraJCN1I7lw\n ZVkr9JKob5djRMBceBGAodXEWemQLC/IV8zC1iyLdAPz2DbrFaGaV888J0iJn8CDDMVY\n v4TWvyeQFfHBCMYXbxKBfYILTXN7ePoWfOwuzFvD+DkgjLNKtuX0U9uwPjEhTQMaxFrN\n fS6Q==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=Hiam3qpkLAIJqjlYkVn2YRf+JYbyJaD15I/9lQ8LGfg=;\n b=cLuqHT9/BXV7tV88l2Ml4ZGka/I2eUBM2CYy+JVdpZOKAEzT5DL8kqFFt71wYv95wZ\n l9NJBMMxb5t4HtlYfYVbgHulNgQpSlZ4AZWMMXs5yXv7Z9IBjvRddkaWzl8wGeMoYGQN\n DwxAakKP810ASsHQyuWTIKmQZstzlYFlJCS2IYiwQPzLejG7iRqDFMs9YME0cs5LlbKr\n yTC/xiX7oNzaPKja9FGDLSrEIk0cH18xq8QaSSCYAF53Ms96/Hp5hzHfS+8u7Ra29HmL\n zPjpZpd4tZXM9gmVHhBU4f8Fh4pWPk04HUa07k2IW/p04r92opPa2kWZAn79KTzLmnFY\n M5FA==", "X-Gm-Message-State": "AOAM530cquNXSjfAeJ/r5ZdEB7VP5HMm8CryyZin6P0LxIWtR1YArkdZ\n DlN3vzCmC71iyHsVnC6R+90uz7oU7pspgA==", "X-Google-Smtp-Source": "\n ABdhPJxb2SbAJCsnxG01sq+yMAvY5hdPrgl1dD0NVXlsvk1SNG55OvN0EQoHg+zA3es+L1S597kd3g==", "X-Received": "by 2002:a62:16c9:0:b029:24b:a41e:cd6 with SMTP id\n 192-20020a6216c90000b029024ba41e0cd6mr13569994pfw.52.1620438700384;\n Fri, 07 May 2021 18:51:40 -0700 (PDT)", "From": "Richard Henderson <richard.henderson@linaro.org>", "To": "qemu-devel@nongnu.org", "Subject": "[PATCH 56/72] softfloat: Introduce Floatx80RoundPrec", "Date": "Fri, 7 May 2021 18:47:46 -0700", "Message-Id": "<20210508014802.892561-57-richard.henderson@linaro.org>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20210508014802.892561-1-richard.henderson@linaro.org>", "References": "<20210508014802.892561-1-richard.henderson@linaro.org>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2607:f8b0:4864:20::436;\n envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.google.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.23", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "alex.bennee@linaro.org, david@redhat.com", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n <qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "Use an enumeration instead of raw 32/64/80 values.\n\nSigned-off-by: Richard Henderson <richard.henderson@linaro.org>\n---\n include/fpu/softfloat-helpers.h | 5 +-\n include/fpu/softfloat-types.h | 10 +++-\n include/fpu/softfloat.h | 4 +-\n fpu/softfloat.c | 32 ++++++------\n linux-user/arm/nwfpe/fpa11.c | 41 +++++++--------\n target/i386/tcg/fpu_helper.c | 79 +++++++++++++++++------------\n target/m68k/fpu_helper.c | 50 +++++++++---------\n target/m68k/softfloat.c | 90 ++++++++++++++++++++-------------\n tests/fp/fp-test.c | 5 +-\n 9 files changed, 182 insertions(+), 134 deletions(-)", "diff": "diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helpers.h\nindex 2f0674fbdd..34f4cf92ae 100644\n--- a/include/fpu/softfloat-helpers.h\n+++ b/include/fpu/softfloat-helpers.h\n@@ -69,7 +69,7 @@ static inline void set_float_exception_flags(int val, float_status *status)\n status->float_exception_flags = val;\n }\n \n-static inline void set_floatx80_rounding_precision(int val,\n+static inline void set_floatx80_rounding_precision(FloatX80RoundPrec val,\n float_status *status)\n {\n status->floatx80_rounding_precision = val;\n@@ -120,7 +120,8 @@ static inline int get_float_exception_flags(float_status *status)\n return status->float_exception_flags;\n }\n \n-static inline int get_floatx80_rounding_precision(float_status *status)\n+static inline FloatX80RoundPrec\n+get_floatx80_rounding_precision(float_status *status)\n {\n return status->floatx80_rounding_precision;\n }\ndiff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h\nindex 8a3f20fae9..1f83378c20 100644\n--- a/include/fpu/softfloat-types.h\n+++ b/include/fpu/softfloat-types.h\n@@ -152,6 +152,14 @@ enum {\n float_flag_output_denormal = 128\n };\n \n+/*\n+ * Rounding precision for floatx80.\n+ */\n+typedef enum __attribute__((__packed__)) {\n+ floatx80_precision_x,\n+ floatx80_precision_d,\n+ floatx80_precision_s,\n+} FloatX80RoundPrec;\n \n /*\n * Floating Point Status. Individual architectures may maintain\n@@ -163,7 +171,7 @@ enum {\n typedef struct float_status {\n FloatRoundMode float_rounding_mode;\n uint8_t float_exception_flags;\n- signed char floatx80_rounding_precision;\n+ FloatX80RoundPrec floatx80_rounding_precision;\n bool tininess_before_rounding;\n /* should denormalised results go to zero and set the inexact flag? */\n bool flush_to_zero;\ndiff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h\nindex 53f2c2ea3c..94f7841b9f 100644\n--- a/include/fpu/softfloat.h\n+++ b/include/fpu/softfloat.h\n@@ -1152,7 +1152,7 @@ floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status *status);\n | Floating-Point Arithmetic.\n *----------------------------------------------------------------------------*/\n \n-floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,\n+floatx80 roundAndPackFloatx80(FloatX80RoundPrec roundingPrecision, bool zSign,\n int32_t zExp, uint64_t zSig0, uint64_t zSig1,\n float_status *status);\n \n@@ -1165,7 +1165,7 @@ floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,\n | normalized.\n *----------------------------------------------------------------------------*/\n \n-floatx80 normalizeRoundAndPackFloatx80(int8_t roundingPrecision,\n+floatx80 normalizeRoundAndPackFloatx80(FloatX80RoundPrec roundingPrecision,\n bool zSign, int32_t zExp,\n uint64_t zSig0, uint64_t zSig1,\n float_status *status);\ndiff --git a/fpu/softfloat.c b/fpu/softfloat.c\nindex 6a77e35663..441b8f9dc1 100644\n--- a/fpu/softfloat.c\n+++ b/fpu/softfloat.c\n@@ -4344,10 +4344,10 @@ void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr,\n | a subnormal number, and the underflow and inexact exceptions are raised if\n | the abstract input cannot be represented exactly as a subnormal extended\n | double-precision floating-point number.\n-| If `roundingPrecision' is 32 or 64, the result is rounded to the same\n-| number of bits as single or double precision, respectively. Otherwise, the\n-| result is rounded to the full precision of the extended double-precision\n-| format.\n+| If `roundingPrecision' is floatx80_precision_s or floatx80_precision_d,\n+| the result is rounded to the same number of bits as single or double\n+| precision, respectively. Otherwise, the result is rounded to the full\n+| precision of the extended double-precision format.\n | The input significand must be normalized or smaller. If the input\n | significand is not normalized, `zExp' must be 0; in that case, the result\n | returned is a subnormal number, and it must not require rounding. The\n@@ -4355,27 +4355,29 @@ void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr,\n | Floating-Point Arithmetic.\n *----------------------------------------------------------------------------*/\n \n-floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,\n+floatx80 roundAndPackFloatx80(FloatX80RoundPrec roundingPrecision, bool zSign,\n int32_t zExp, uint64_t zSig0, uint64_t zSig1,\n float_status *status)\n {\n- int8_t roundingMode;\n+ FloatRoundMode roundingMode;\n bool roundNearestEven, increment, isTiny;\n int64_t roundIncrement, roundMask, roundBits;\n \n roundingMode = status->float_rounding_mode;\n roundNearestEven = ( roundingMode == float_round_nearest_even );\n- if ( roundingPrecision == 80 ) goto precision80;\n- if ( roundingPrecision == 64 ) {\n+ switch (roundingPrecision) {\n+ case floatx80_precision_x:\n+ goto precision80;\n+ case floatx80_precision_d:\n roundIncrement = UINT64_C(0x0000000000000400);\n roundMask = UINT64_C(0x00000000000007FF);\n- }\n- else if ( roundingPrecision == 32 ) {\n+ break;\n+ case floatx80_precision_s:\n roundIncrement = UINT64_C(0x0000008000000000);\n roundMask = UINT64_C(0x000000FFFFFFFFFF);\n- }\n- else {\n- goto precision80;\n+ break;\n+ default:\n+ g_assert_not_reached();\n }\n zSig0 |= ( zSig1 != 0 );\n switch (roundingMode) {\n@@ -4552,7 +4554,7 @@ floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,\n | normalized.\n *----------------------------------------------------------------------------*/\n \n-floatx80 normalizeRoundAndPackFloatx80(int8_t roundingPrecision,\n+floatx80 normalizeRoundAndPackFloatx80(FloatX80RoundPrec roundingPrecision,\n bool zSign, int32_t zExp,\n uint64_t zSig0, uint64_t zSig1,\n float_status *status)\n@@ -6205,7 +6207,7 @@ floatx80 floatx80_modrem(floatx80 a, floatx80 b, bool mod, uint64_t *quotient,\n }\n return\n normalizeRoundAndPackFloatx80(\n- 80, zSign, bExp + expDiff, aSig0, aSig1, status);\n+ floatx80_precision_x, zSign, bExp + expDiff, aSig0, aSig1, status);\n \n }\n \ndiff --git a/linux-user/arm/nwfpe/fpa11.c b/linux-user/arm/nwfpe/fpa11.c\nindex f6f8163eab..9a93610d24 100644\n--- a/linux-user/arm/nwfpe/fpa11.c\n+++ b/linux-user/arm/nwfpe/fpa11.c\n@@ -97,37 +97,38 @@ void SetRoundingMode(const unsigned int opcode)\n \n void SetRoundingPrecision(const unsigned int opcode)\n {\n- int rounding_precision;\n- FPA11 *fpa11 = GET_FPA11();\n+ FloatX80RoundPrec rounding_precision;\n+ FPA11 *fpa11 = GET_FPA11();\n #ifdef MAINTAIN_FPCR\n- fpa11->fpcr &= ~MASK_ROUNDING_PRECISION;\n+ fpa11->fpcr &= ~MASK_ROUNDING_PRECISION;\n #endif\n- switch (opcode & MASK_ROUNDING_PRECISION)\n- {\n- case ROUND_SINGLE:\n- rounding_precision = 32;\n+ switch (opcode & MASK_ROUNDING_PRECISION) {\n+ case ROUND_SINGLE:\n+ rounding_precision = floatx80_precision_s;\n #ifdef MAINTAIN_FPCR\n- fpa11->fpcr |= ROUND_SINGLE;\n+ fpa11->fpcr |= ROUND_SINGLE;\n #endif\n- break;\n+ break;\n \n- case ROUND_DOUBLE:\n- rounding_precision = 64;\n+ case ROUND_DOUBLE:\n+ rounding_precision = floatx80_precision_d;\n #ifdef MAINTAIN_FPCR\n- fpa11->fpcr |= ROUND_DOUBLE;\n+ fpa11->fpcr |= ROUND_DOUBLE;\n #endif\n- break;\n+ break;\n \n- case ROUND_EXTENDED:\n- rounding_precision = 80;\n+ case ROUND_EXTENDED:\n+ rounding_precision = floatx80_precision_x;\n #ifdef MAINTAIN_FPCR\n- fpa11->fpcr |= ROUND_EXTENDED;\n+ fpa11->fpcr |= ROUND_EXTENDED;\n #endif\n- break;\n+ break;\n \n- default: rounding_precision = 80;\n- }\n- set_floatx80_rounding_precision(rounding_precision, &fpa11->fp_status);\n+ default:\n+ rounding_precision = floatx80_precision_x;\n+ break;\n+ }\n+ set_floatx80_rounding_precision(rounding_precision, &fpa11->fp_status);\n }\n \n /* Emulate the instruction in the opcode. */\ndiff --git a/target/i386/tcg/fpu_helper.c b/target/i386/tcg/fpu_helper.c\nindex 60ed93520a..e495ddf1aa 100644\n--- a/target/i386/tcg/fpu_helper.c\n+++ b/target/i386/tcg/fpu_helper.c\n@@ -711,38 +711,40 @@ uint32_t helper_fnstcw(CPUX86State *env)\n \n void update_fp_status(CPUX86State *env)\n {\n- int rnd_type;\n+ FloatRoundMode rnd_mode;\n+ FloatX80RoundPrec rnd_prec;\n \n /* set rounding mode */\n switch (env->fpuc & FPU_RC_MASK) {\n default:\n case FPU_RC_NEAR:\n- rnd_type = float_round_nearest_even;\n+ rnd_mode = float_round_nearest_even;\n break;\n case FPU_RC_DOWN:\n- rnd_type = float_round_down;\n+ rnd_mode = float_round_down;\n break;\n case FPU_RC_UP:\n- rnd_type = float_round_up;\n+ rnd_mode = float_round_up;\n break;\n case FPU_RC_CHOP:\n- rnd_type = float_round_to_zero;\n+ rnd_mode = float_round_to_zero;\n break;\n }\n- set_float_rounding_mode(rnd_type, &env->fp_status);\n+ set_float_rounding_mode(rnd_mode, &env->fp_status);\n+\n switch ((env->fpuc >> 8) & 3) {\n case 0:\n- rnd_type = 32;\n+ rnd_prec = floatx80_precision_s;\n break;\n case 2:\n- rnd_type = 64;\n+ rnd_prec = floatx80_precision_d;\n break;\n case 3:\n default:\n- rnd_type = 80;\n+ rnd_prec = floatx80_precision_x;\n break;\n }\n- set_floatx80_rounding_precision(rnd_type, &env->fp_status);\n+ set_floatx80_rounding_precision(rnd_prec, &env->fp_status);\n }\n \n void helper_fldcw(CPUX86State *env, uint32_t val)\n@@ -1112,7 +1114,8 @@ void helper_f2xm1(CPUX86State *env)\n &sig2);\n /* This result is inexact. */\n sig1 |= 1;\n- ST0 = normalizeRoundAndPackFloatx80(80, sign, exp, sig0, sig1,\n+ ST0 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n+ sign, exp, sig0, sig1,\n &env->fp_status);\n }\n } else {\n@@ -1121,9 +1124,10 @@ void helper_f2xm1(CPUX86State *env)\n int32_t n, aexp, bexp;\n uint64_t asig0, asig1, asig2, bsig0, bsig1;\n FloatRoundMode save_mode = env->fp_status.float_rounding_mode;\n- signed char save_prec = env->fp_status.floatx80_rounding_precision;\n+ FloatX80RoundPrec save_prec =\n+ env->fp_status.floatx80_rounding_precision;\n env->fp_status.float_rounding_mode = float_round_nearest_even;\n- env->fp_status.floatx80_rounding_precision = 80;\n+ env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n /* Find the nearest multiple of 1/32 to the argument. */\n tmp = floatx80_scalbn(ST0, 5, &env->fp_status);\n@@ -1221,7 +1225,8 @@ void helper_f2xm1(CPUX86State *env)\n env->fp_status.float_rounding_mode = save_mode;\n /* This result is inexact. */\n asig1 |= 1;\n- ST0 = normalizeRoundAndPackFloatx80(80, asign, aexp, asig0, asig1,\n+ ST0 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n+ asign, aexp, asig0, asig1,\n &env->fp_status);\n }\n \n@@ -1339,8 +1344,9 @@ void helper_fpatan(CPUX86State *env)\n * division is exact, the result of fpatan is still inexact\n * (and underflowing where appropriate).\n */\n- signed char save_prec = env->fp_status.floatx80_rounding_precision;\n- env->fp_status.floatx80_rounding_precision = 80;\n+ FloatX80RoundPrec save_prec =\n+ env->fp_status.floatx80_rounding_precision;\n+ env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n ST1 = floatx80_div(ST1, ST0, &env->fp_status);\n env->fp_status.floatx80_rounding_precision = save_prec;\n if (!floatx80_is_zero(ST1) &&\n@@ -1359,7 +1365,8 @@ void helper_fpatan(CPUX86State *env)\n if (exp == 0) {\n normalizeFloatx80Subnormal(sig, &exp, &sig);\n }\n- ST1 = normalizeRoundAndPackFloatx80(80, sign, exp, sig - 1,\n+ ST1 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n+ sign, exp, sig - 1,\n -1, &env->fp_status);\n }\n } else {\n@@ -1415,9 +1422,10 @@ void helper_fpatan(CPUX86State *env)\n uint64_t azsig2, azsig3, axsig0, axsig1;\n floatx80 x8;\n FloatRoundMode save_mode = env->fp_status.float_rounding_mode;\n- signed char save_prec = env->fp_status.floatx80_rounding_precision;\n+ FloatX80RoundPrec save_prec =\n+ env->fp_status.floatx80_rounding_precision;\n env->fp_status.float_rounding_mode = float_round_nearest_even;\n- env->fp_status.floatx80_rounding_precision = 80;\n+ env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n if (arg0_exp == 0) {\n normalizeFloatx80Subnormal(arg0_sig, &arg0_exp, &arg0_sig);\n@@ -1486,7 +1494,8 @@ void helper_fpatan(CPUX86State *env)\n * Split x as x = t + y, where t = n/8 is the nearest\n * multiple of 1/8 to x.\n */\n- x8 = normalizeRoundAndPackFloatx80(80, false, xexp + 3, xsig0,\n+ x8 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n+ false, xexp + 3, xsig0,\n xsig1, &env->fp_status);\n n = floatx80_to_int32(x8, &env->fp_status);\n if (n == 0) {\n@@ -1607,7 +1616,7 @@ void helper_fpatan(CPUX86State *env)\n /* Compute z^2. */\n mul128To256(zsig0, zsig1, zsig0, zsig1,\n &z2sig0, &z2sig1, &z2sig2, &z2sig3);\n- z2 = normalizeRoundAndPackFloatx80(80, false,\n+ z2 = normalizeRoundAndPackFloatx80(floatx80_precision_x, false,\n zexp + zexp - 0x3ffe,\n z2sig0, z2sig1,\n &env->fp_status);\n@@ -1727,7 +1736,7 @@ void helper_fpatan(CPUX86State *env)\n }\n /* This result is inexact. */\n rsig1 |= 1;\n- ST1 = normalizeRoundAndPackFloatx80(80, rsign, rexp,\n+ ST1 = normalizeRoundAndPackFloatx80(floatx80_precision_x, rsign, rexp,\n rsig0, rsig1, &env->fp_status);\n }\n \n@@ -1928,7 +1937,8 @@ static void helper_fyl2x_common(CPUX86State *env, floatx80 arg, int32_t *exp,\n */\n mul128To256(tsig0, tsig1, tsig0, tsig1,\n &t2sig0, &t2sig1, &t2sig2, &t2sig3);\n- t2 = normalizeRoundAndPackFloatx80(80, false, texp + texp - 0x3ffe,\n+ t2 = normalizeRoundAndPackFloatx80(floatx80_precision_x, false,\n+ texp + texp - 0x3ffe,\n t2sig0, t2sig1, &env->fp_status);\n \n /* Compute the lower parts of the polynomial expansion. */\n@@ -2042,15 +2052,17 @@ void helper_fyl2xp1(CPUX86State *env)\n exp += arg1_exp - 0x3ffe;\n /* This result is inexact. */\n sig1 |= 1;\n- ST1 = normalizeRoundAndPackFloatx80(80, arg0_sign ^ arg1_sign, exp,\n+ ST1 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n+ arg0_sign ^ arg1_sign, exp,\n sig0, sig1, &env->fp_status);\n } else {\n int32_t aexp;\n uint64_t asig0, asig1, asig2;\n FloatRoundMode save_mode = env->fp_status.float_rounding_mode;\n- signed char save_prec = env->fp_status.floatx80_rounding_precision;\n+ FloatX80RoundPrec save_prec =\n+ env->fp_status.floatx80_rounding_precision;\n env->fp_status.float_rounding_mode = float_round_nearest_even;\n- env->fp_status.floatx80_rounding_precision = 80;\n+ env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n helper_fyl2x_common(env, ST0, &aexp, &asig0, &asig1);\n /*\n@@ -2065,7 +2077,8 @@ void helper_fyl2xp1(CPUX86State *env)\n /* This result is inexact. */\n asig1 |= 1;\n env->fp_status.float_rounding_mode = save_mode;\n- ST1 = normalizeRoundAndPackFloatx80(80, arg0_sign ^ arg1_sign, aexp,\n+ ST1 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n+ arg0_sign ^ arg1_sign, aexp,\n asig0, asig1, &env->fp_status);\n env->fp_status.floatx80_rounding_precision = save_prec;\n }\n@@ -2149,9 +2162,10 @@ void helper_fyl2x(CPUX86State *env)\n int32_t int_exp;\n floatx80 arg0_m1;\n FloatRoundMode save_mode = env->fp_status.float_rounding_mode;\n- signed char save_prec = env->fp_status.floatx80_rounding_precision;\n+ FloatX80RoundPrec save_prec =\n+ env->fp_status.floatx80_rounding_precision;\n env->fp_status.float_rounding_mode = float_round_nearest_even;\n- env->fp_status.floatx80_rounding_precision = 80;\n+ env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n if (arg0_exp == 0) {\n normalizeFloatx80Subnormal(arg0_sig, &arg0_exp, &arg0_sig);\n@@ -2208,7 +2222,8 @@ void helper_fyl2x(CPUX86State *env)\n /* This result is inexact. */\n asig1 |= 1;\n env->fp_status.float_rounding_mode = save_mode;\n- ST1 = normalizeRoundAndPackFloatx80(80, asign ^ arg1_sign, aexp,\n+ ST1 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n+ asign ^ arg1_sign, aexp,\n asig0, asig1, &env->fp_status);\n }\n \n@@ -2290,12 +2305,12 @@ void helper_fscale(CPUX86State *env)\n }\n } else {\n int n;\n- signed char save = env->fp_status.floatx80_rounding_precision;\n+ FloatX80RoundPrec save = env->fp_status.floatx80_rounding_precision;\n uint8_t save_flags = get_float_exception_flags(&env->fp_status);\n set_float_exception_flags(0, &env->fp_status);\n n = floatx80_to_int32_round_to_zero(ST1, &env->fp_status);\n set_float_exception_flags(save_flags, &env->fp_status);\n- env->fp_status.floatx80_rounding_precision = 80;\n+ env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n ST0 = floatx80_scalbn(ST0, n, &env->fp_status);\n env->fp_status.floatx80_rounding_precision = save;\n }\ndiff --git a/target/m68k/fpu_helper.c b/target/m68k/fpu_helper.c\nindex 797000e748..fdc4937e29 100644\n--- a/target/m68k/fpu_helper.c\n+++ b/target/m68k/fpu_helper.c\n@@ -94,13 +94,13 @@ static void m68k_restore_precision_mode(CPUM68KState *env)\n {\n switch (env->fpcr & FPCR_PREC_MASK) {\n case FPCR_PREC_X: /* extended */\n- set_floatx80_rounding_precision(80, &env->fp_status);\n+ set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_status);\n break;\n case FPCR_PREC_S: /* single */\n- set_floatx80_rounding_precision(32, &env->fp_status);\n+ set_floatx80_rounding_precision(floatx80_precision_s, &env->fp_status);\n break;\n case FPCR_PREC_D: /* double */\n- set_floatx80_rounding_precision(64, &env->fp_status);\n+ set_floatx80_rounding_precision(floatx80_precision_d, &env->fp_status);\n break;\n case FPCR_PREC_U: /* undefined */\n default:\n@@ -111,9 +111,9 @@ static void m68k_restore_precision_mode(CPUM68KState *env)\n static void cf_restore_precision_mode(CPUM68KState *env)\n {\n if (env->fpcr & FPCR_PREC_S) { /* single */\n- set_floatx80_rounding_precision(32, &env->fp_status);\n+ set_floatx80_rounding_precision(floatx80_precision_s, &env->fp_status);\n } else { /* double */\n- set_floatx80_rounding_precision(64, &env->fp_status);\n+ set_floatx80_rounding_precision(floatx80_precision_d, &env->fp_status);\n }\n }\n \n@@ -166,8 +166,8 @@ void HELPER(set_fpcr)(CPUM68KState *env, uint32_t val)\n \n #define PREC_BEGIN(prec) \\\n do { \\\n- int old; \\\n- old = get_floatx80_rounding_precision(&env->fp_status); \\\n+ FloatX80RoundPrec old = \\\n+ get_floatx80_rounding_precision(&env->fp_status); \\\n set_floatx80_rounding_precision(prec, &env->fp_status) \\\n \n #define PREC_END() \\\n@@ -176,14 +176,14 @@ void HELPER(set_fpcr)(CPUM68KState *env, uint32_t val)\n \n void HELPER(fsround)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_round(val->d, &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fdround)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_round(val->d, &env->fp_status);\n PREC_END();\n }\n@@ -195,14 +195,14 @@ void HELPER(fsqrt)(CPUM68KState *env, FPReg *res, FPReg *val)\n \n void HELPER(fssqrt)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_sqrt(val->d, &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fdsqrt)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_sqrt(val->d, &env->fp_status);\n PREC_END();\n }\n@@ -214,14 +214,14 @@ void HELPER(fabs)(CPUM68KState *env, FPReg *res, FPReg *val)\n \n void HELPER(fsabs)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_round(floatx80_abs(val->d), &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fdabs)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_round(floatx80_abs(val->d), &env->fp_status);\n PREC_END();\n }\n@@ -233,14 +233,14 @@ void HELPER(fneg)(CPUM68KState *env, FPReg *res, FPReg *val)\n \n void HELPER(fsneg)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_round(floatx80_chs(val->d), &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fdneg)(CPUM68KState *env, FPReg *res, FPReg *val)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_round(floatx80_chs(val->d), &env->fp_status);\n PREC_END();\n }\n@@ -252,14 +252,14 @@ void HELPER(fadd)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n \n void HELPER(fsadd)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_add(val0->d, val1->d, &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fdadd)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_add(val0->d, val1->d, &env->fp_status);\n PREC_END();\n }\n@@ -271,14 +271,14 @@ void HELPER(fsub)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n \n void HELPER(fssub)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_sub(val1->d, val0->d, &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fdsub)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_sub(val1->d, val0->d, &env->fp_status);\n PREC_END();\n }\n@@ -290,14 +290,14 @@ void HELPER(fmul)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n \n void HELPER(fsmul)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_mul(val0->d, val1->d, &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fdmul)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_mul(val0->d, val1->d, &env->fp_status);\n PREC_END();\n }\n@@ -307,7 +307,7 @@ void HELPER(fsglmul)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n FloatRoundMode rounding_mode = get_float_rounding_mode(&env->fp_status);\n floatx80 a, b;\n \n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n set_float_rounding_mode(float_round_to_zero, &env->fp_status);\n a = floatx80_round(val0->d, &env->fp_status);\n b = floatx80_round(val1->d, &env->fp_status);\n@@ -323,14 +323,14 @@ void HELPER(fdiv)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n \n void HELPER(fsdiv)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n res->d = floatx80_div(val1->d, val0->d, &env->fp_status);\n PREC_END();\n }\n \n void HELPER(fddiv)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n {\n- PREC_BEGIN(64);\n+ PREC_BEGIN(floatx80_precision_d);\n res->d = floatx80_div(val1->d, val0->d, &env->fp_status);\n PREC_END();\n }\n@@ -340,7 +340,7 @@ void HELPER(fsgldiv)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)\n FloatRoundMode rounding_mode = get_float_rounding_mode(&env->fp_status);\n floatx80 a, b;\n \n- PREC_BEGIN(32);\n+ PREC_BEGIN(floatx80_precision_s);\n set_float_rounding_mode(float_round_to_zero, &env->fp_status);\n a = floatx80_round(val1->d, &env->fp_status);\n b = floatx80_round(val0->d, &env->fp_status);\ndiff --git a/target/m68k/softfloat.c b/target/m68k/softfloat.c\nindex b6d0ed7acf..02dcc03d15 100644\n--- a/target/m68k/softfloat.c\n+++ b/target/m68k/softfloat.c\n@@ -227,7 +227,8 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig, fSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, j, k;\n floatx80 fp0, fp1, fp2, fp3, f, logof2, klog2, saveu;\n@@ -270,7 +271,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \n@@ -426,7 +427,8 @@ floatx80 floatx80_logn(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig, fSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, j, k, adjk;\n floatx80 fp0, fp1, fp2, fp3, f, logof2, klog2, saveu;\n@@ -469,7 +471,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \n@@ -594,7 +596,8 @@ floatx80 floatx80_log10(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n floatx80 fp0, fp1;\n \n@@ -626,7 +629,7 @@ floatx80 floatx80_log10(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n fp0 = floatx80_logn(a, status);\n fp1 = packFloatx80(0, 0x3FFD, UINT64_C(0xDE5BD8A937287195)); /* INV_L10 */\n@@ -651,7 +654,8 @@ floatx80 floatx80_log2(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n floatx80 fp0, fp1;\n \n@@ -686,7 +690,7 @@ floatx80 floatx80_log2(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n if (aSig == one_sig) { /* X is 2^k */\n status->float_rounding_mode = user_rnd_mode;\n@@ -718,7 +722,8 @@ floatx80 floatx80_etox(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, n, j, k, m, m1;\n floatx80 fp0, fp1, fp2, fp3, l2, scale, adjscale;\n@@ -746,7 +751,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n adjflag = 0;\n \n@@ -902,7 +907,8 @@ floatx80 floatx80_twotox(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, n, j, l, m, m1;\n floatx80 fp0, fp1, fp2, fp3, adjfact, fact1, fact2;\n@@ -929,7 +935,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n fp0 = a;\n \n@@ -1052,7 +1058,8 @@ floatx80 floatx80_tentox(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, n, j, l, m, m1;\n floatx80 fp0, fp1, fp2, fp3, adjfact, fact1, fact2;\n@@ -1079,7 +1086,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n fp0 = a;\n \n@@ -1207,7 +1214,8 @@ floatx80 floatx80_tan(floatx80 a, float_status *status)\n int32_t aExp, xExp;\n uint64_t aSig, xSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, l, n, j;\n floatx80 fp0, fp1, fp2, fp3, fp4, fp5, invtwopi, twopi1, twopi2;\n@@ -1233,7 +1241,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \n@@ -1417,7 +1425,8 @@ floatx80 floatx80_sin(floatx80 a, float_status *status)\n int32_t aExp, xExp;\n uint64_t aSig, xSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, l, n, j;\n floatx80 fp0, fp1, fp2, fp3, fp4, fp5, x, invtwopi, twopi1, twopi2;\n@@ -1443,7 +1452,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \n@@ -1656,7 +1665,8 @@ floatx80 floatx80_cos(floatx80 a, float_status *status)\n int32_t aExp, xExp;\n uint64_t aSig, xSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, l, n, j;\n floatx80 fp0, fp1, fp2, fp3, fp4, fp5, x, invtwopi, twopi1, twopi2;\n@@ -1682,7 +1692,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \n@@ -1893,7 +1903,8 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, tbl_index;\n floatx80 fp0, fp1, fp2, fp3, xsave;\n@@ -1920,7 +1931,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n if (compact < 0x3FFB8000 || compact > 0x4002FFFF) {\n /* |X| >= 16 or |X| < 1/16 */\n@@ -2090,7 +2101,8 @@ floatx80 floatx80_asin(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact;\n floatx80 fp0, fp1, fp2, one;\n@@ -2124,7 +2136,7 @@ floatx80 floatx80_asin(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n one = packFloatx80(0, one_exp, one_sig);\n fp0 = a;\n@@ -2155,7 +2167,8 @@ floatx80 floatx80_acos(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact;\n floatx80 fp0, fp1, one;\n@@ -2193,7 +2206,7 @@ floatx80 floatx80_acos(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n one = packFloatx80(0, one_exp, one_sig);\n fp0 = a;\n@@ -2224,7 +2237,8 @@ floatx80 floatx80_atanh(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact;\n floatx80 fp0, fp1, fp2, one;\n@@ -2257,7 +2271,7 @@ floatx80 floatx80_atanh(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n one = packFloatx80(0, one_exp, one_sig);\n fp2 = packFloatx80(aSign, 0x3FFE, one_sig); /* SIGN(X) * (1/2) */\n@@ -2289,7 +2303,8 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact, n, j, m, m1;\n floatx80 fp0, fp1, fp2, fp3, l2, sc, onebysc;\n@@ -2316,7 +2331,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n if (aExp >= 0x3FFD) { /* |X| >= 1/4 */\n compact = floatx80_make_compact(aExp, aSig);\n@@ -2541,7 +2556,8 @@ floatx80 floatx80_tanh(floatx80 a, float_status *status)\n int32_t aExp, vExp;\n uint64_t aSig, vSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact;\n floatx80 fp0, fp1;\n@@ -2565,7 +2581,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \n@@ -2656,7 +2672,8 @@ floatx80 floatx80_sinh(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact;\n floatx80 fp0, fp1, fp2;\n@@ -2681,7 +2698,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \n@@ -2744,7 +2761,8 @@ floatx80 floatx80_cosh(floatx80 a, float_status *status)\n int32_t aExp;\n uint64_t aSig;\n \n- int8_t user_rnd_mode, user_rnd_prec;\n+ FloatRoundMode user_rnd_mode;\n+ FloatX80RoundPrec user_rnd_prec;\n \n int32_t compact;\n floatx80 fp0, fp1;\n@@ -2767,7 +2785,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *status)\n user_rnd_mode = status->float_rounding_mode;\n user_rnd_prec = status->floatx80_rounding_precision;\n status->float_rounding_mode = float_round_nearest_even;\n- status->floatx80_rounding_precision = 80;\n+ status->floatx80_rounding_precision = floatx80_precision_x;\n \n compact = floatx80_make_compact(aExp, aSig);\n \ndiff --git a/tests/fp/fp-test.c b/tests/fp/fp-test.c\nindex ff131afbde..1be3a9788a 100644\n--- a/tests/fp/fp-test.c\n+++ b/tests/fp/fp-test.c\n@@ -963,18 +963,21 @@ static void QEMU_NORETURN run_test(void)\n verCases_usesExact = !!(attrs & FUNC_ARG_EXACT);\n \n for (k = 0; k < 3; k++) {\n+ FloatX80RoundPrec qsf_prec80 = floatx80_precision_s;\n int prec80 = 32;\n int l;\n \n if (k == 1) {\n prec80 = 64;\n+ qsf_prec80 = floatx80_precision_d;\n } else if (k == 2) {\n prec80 = 80;\n+ qsf_prec80 = floatx80_precision_x;\n }\n \n verCases_roundingPrecision = 0;\n slow_extF80_roundingPrecision = prec80;\n- qsf.floatx80_rounding_precision = prec80;\n+ qsf.floatx80_rounding_precision = qsf_prec80;\n \n if (attrs & FUNC_EFF_ROUNDINGPRECISION) {\n verCases_roundingPrecision = prec80;\n", "prefixes": [ "56/72" ] }