get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/1475776/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "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"
    ]
}