get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2234607,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2234607/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260507221717.486023-6-richard.henderson@linaro.org/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.2/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": "<20260507221717.486023-6-richard.henderson@linaro.org>",
    "list_archive_url": null,
    "date": "2026-05-07T22:17:04",
    "name": "[05/18] fpu: Use {get,set}_float_rounding_mode everywhere",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "487f24d045d78e198e8d31bf70545f3d8eea45c0",
    "submitter": {
        "id": 72104,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/72104/?format=api",
        "name": "Richard Henderson",
        "email": "richard.henderson@linaro.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260507221717.486023-6-richard.henderson@linaro.org/mbox/",
    "series": [
        {
            "id": 503289,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/503289/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=503289",
            "date": "2026-05-07T22:16:59",
            "name": "fpu: Compress float_status",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/503289/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2234607/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2234607/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@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=rchNHnis;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gBRTv234kz1yCg\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 08 May 2026 08:18:27 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wL72D-0000pc-Uh; Thu, 07 May 2026 18:17:33 -0400",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.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 1wL72C-0000pK-NK\n for qemu-devel@nongnu.org; Thu, 07 May 2026 18:17:32 -0400",
            "from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e])\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 1wL728-0003CG-6r\n for qemu-devel@nongnu.org; Thu, 07 May 2026 18:17:32 -0400",
            "by mail-oa1-x2e.google.com with SMTP id\n 586e51a60fabf-4350cd5b97fso752258fac.0\n for <qemu-devel@nongnu.org>; Thu, 07 May 2026 15:17:27 -0700 (PDT)",
            "from stoup.attlocal.net ([2600:381:c938:6375:9641:bbb2:a93a:bb4c])\n by smtp.gmail.com with ESMTPSA id\n 586e51a60fabf-435573e7254sm45037fac.14.2026.05.07.15.17.24\n for <qemu-devel@nongnu.org>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 07 May 2026 15:17:25 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1778192247; x=1778797047; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:from:to:cc:subject:date:message-id\n :reply-to; bh=OwpeqApJglP8xIDD4j7dnh1qLWRBcld5JpmqbfZRzf0=;\n b=rchNHnisYnD8EMzPhNWdERcududku1vcTn0i0EJRdn2BJplUgbPQQcaD38xivT/jHc\n 2/e4ueObaM49Ro3IMwv+r7A7A7zH3NQZ9NiHr0ubo2wOX1DZDP3Y4C1mgZXN0140QzkM\n MhwEVh33G9bIvs7oH9NBkyrz1TtBICIJxX/pFGkJN4HryF9GXY2oRWC6HUXW3Hy6aApk\n wPbvFFGZsNgc4dHNHSZ4VmsgTHk6eObSW1pJk++Z6Pcj5HgC1fSTS3vCv97x+oX/hNOU\n wqWDRbaOnyWcIeqrSdLTPoPXhi5yepuxNeLUy2QdsXYVxFsQDBw3hkS+2nt2K9Zwfs4j\n U29Q==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1778192247; x=1778797047;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=OwpeqApJglP8xIDD4j7dnh1qLWRBcld5JpmqbfZRzf0=;\n b=gl2nDItl2VGtpAYEAAmSocuhL+/yzdMK+pI9clGCRWpl3XBEH3GzpUareRg3VlbUrZ\n N5g9SbCh41vLKDCVOtMF+hKQ8e/zXvzsvNROTch0pggYEOOEJ1DW9Ou77CtP4HNFWj3H\n R4e7ojdRXi6U/h+4H3AaavSe5WarPqAk+aiJAJ0ph4RTp8QqoRvg1CYy020Z6zfM79UA\n MHi4/fnF5A1Pw2JrZ3blGTIS5DldnzSiFGYq8gidE3Dd0qJQJv/ooq+vXDJMI3PbyBbP\n TAi0gL9edY3LeDXJ/NcvwI5Zo+HP4nvxVT1/w5obBgIz2AoW2f05Lf+gay1s6P0cTjY0\n wPPg==",
        "X-Gm-Message-State": "AOJu0Yzcb5FSllnQ2X9stpJVRK9ORFaCPun4lWqz8M5B3NAlt8iP5CWI\n YBnJWIVYW5y3kR7+EFoU3D3djyGUW7is6qrhX0FdRJaEhBO3JfkbgrpHKaPbEx+QLFs/olKDN5j\n WsYlz",
        "X-Gm-Gg": "AeBDievvbLNwC3qe2UU+gZGSTVvUu6mdaegjtHPy53RsNnO9rZYoj1ov60YBCapQZE2\n sB83lnGf/d9sR8W2VTVGddr5zO/zOtE4/iF/3SnBlBkJZi+CS3Ujjj02mt2nRKgrU0t2pyMJjAO\n xAKhe+IlECro1huD1sLTsHiUM72Yqb9eu+zsitM0KzlX8ZGABRH49EjlzrHdaLc0SSKmWA1jUWn\n VqIISRMR6ZUtBxI8/ziVzL/8EIh3VNUTqn032364R4Rnzq+B0OQ/LV3xwVYVayL0naenBYZlf1S\n t7INYGCAnlTztg/4tzj8e1FJ05uToYJQiJ2XaJrwx6aH7WPLJc6hm71Q0YmVS/UC1hpf+pQET/9\n xpZcFPkjpbTKF3n6OL0Sf6CnLEqP7cWKaT2PoWs2AQG+6EJfxgsL/qo729su/AHXCwIP91k0xYs\n ipntxd5u2CD5IKQ2lQutvk4pph+6l4whoE3nOUKX7gXCexCg==",
        "X-Received": "by 2002:a05:6871:891:b0:42f:d9dc:2cc with SMTP id\n 586e51a60fabf-434f5cd3d04mr6808846fac.1.1778192246346;\n Thu, 07 May 2026 15:17:26 -0700 (PDT)",
        "From": "Richard Henderson <richard.henderson@linaro.org>",
        "To": "qemu-devel@nongnu.org",
        "Subject": "[PATCH 05/18] fpu: Use {get,set}_float_rounding_mode everywhere",
        "Date": "Thu,  7 May 2026 17:17:04 -0500",
        "Message-ID": "<20260507221717.486023-6-richard.henderson@linaro.org>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<20260507221717.486023-1-richard.henderson@linaro.org>",
        "References": "<20260507221717.486023-1-richard.henderson@linaro.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=2001:4860:4864:20::2e;\n envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2e.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.29",
        "Precedence": "list",
        "List-Id": "qemu development <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>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "Signed-off-by: Richard Henderson <richard.henderson@linaro.org>\n---\n target/i386/ops_sse.h         |  24 ++---\n fpu/softfloat.c               |  88 +++++++++---------\n target/alpha/fpu_helper.c     |   2 +-\n target/arm/tcg/vfp_helper.c   |   8 +-\n target/hexagon/fma_emu.c      |   6 +-\n target/i386/tcg/fpu_helper.c  |  28 +++---\n target/m68k/softfloat.c       | 170 +++++++++++++++++-----------------\n target/ppc/fpu_helper.c       |  14 +--\n target/riscv/vector_helper.c  |   6 +-\n target/s390x/tcg/fpu_helper.c |   4 +-\n tests/fp/fp-bench.c           |   2 +-\n tests/fp/fp-test.c            |   2 +-\n fpu/softfloat-parts.c.inc     |   8 +-\n tests/fp/wrap.c.inc           |  12 +--\n 14 files changed, 185 insertions(+), 189 deletions(-)",
    "diff": "diff --git a/target/i386/ops_sse.h b/target/i386/ops_sse.h\nindex 99c4728ec8..5176a9f9e3 100644\n--- a/target/i386/ops_sse.h\n+++ b/target/i386/ops_sse.h\n@@ -601,7 +601,7 @@ void glue(helper_cvtph2ps, SUFFIX)(CPUX86State *env, Reg *d, Reg *s)\n void glue(helper_cvtps2ph, SUFFIX)(CPUX86State *env, Reg *d, Reg *s, int mode)\n {\n     int i;\n-    FloatRoundMode prev_rounding_mode = env->sse_status.float_rounding_mode;\n+    FloatRoundMode prev_rounding_mode = get_float_rounding_mode(&env->sse_status);\n     if (!(mode & (1 << 2))) {\n         set_x86_rounding_mode(mode & 3, &env->sse_status);\n     }\n@@ -613,7 +613,7 @@ void glue(helper_cvtps2ph, SUFFIX)(CPUX86State *env, Reg *d, Reg *s, int mode)\n         d->Q(i) = 0;\n     }\n \n-    env->sse_status.float_rounding_mode = prev_rounding_mode;\n+    set_float_rounding_mode(prev_rounding_mode, &env->sse_status);\n }\n #endif\n \n@@ -1715,10 +1715,9 @@ void glue(helper_roundps, SUFFIX)(CPUX86State *env, Reg *d, Reg *s,\n                                   uint32_t mode)\n {\n     int old_flags = get_float_exception_flags(&env->sse_status);\n-    signed char prev_rounding_mode;\n+    FloatRoundMode prev_rounding_mode = get_float_rounding_mode(&env->sse_status);\n     int i;\n \n-    prev_rounding_mode = env->sse_status.float_rounding_mode;\n     if (!(mode & (1 << 2))) {\n         set_x86_rounding_mode(mode & 3, &env->sse_status);\n     }\n@@ -1732,17 +1731,16 @@ void glue(helper_roundps, SUFFIX)(CPUX86State *env, Reg *d, Reg *s,\n                                   ~float_flag_inexact,\n                                   &env->sse_status);\n     }\n-    env->sse_status.float_rounding_mode = prev_rounding_mode;\n+    set_float_rounding_mode(prev_rounding_mode, &env->sse_status);\n }\n \n void glue(helper_roundpd, SUFFIX)(CPUX86State *env, Reg *d, Reg *s,\n                                   uint32_t mode)\n {\n     int old_flags = get_float_exception_flags(&env->sse_status);\n-    signed char prev_rounding_mode;\n+    FloatRoundMode prev_rounding_mode = get_float_rounding_mode(&env->sse_status);\n     int i;\n \n-    prev_rounding_mode = env->sse_status.float_rounding_mode;\n     if (!(mode & (1 << 2))) {\n         set_x86_rounding_mode(mode & 3, &env->sse_status);\n     }\n@@ -1756,7 +1754,7 @@ void glue(helper_roundpd, SUFFIX)(CPUX86State *env, Reg *d, Reg *s,\n                                   ~float_flag_inexact,\n                                   &env->sse_status);\n     }\n-    env->sse_status.float_rounding_mode = prev_rounding_mode;\n+    set_float_rounding_mode(prev_rounding_mode, &env->sse_status);\n }\n \n #if SHIFT == 1\n@@ -1764,10 +1762,9 @@ void glue(helper_roundss, SUFFIX)(CPUX86State *env, Reg *d, Reg *v, Reg *s,\n                                   uint32_t mode)\n {\n     int old_flags = get_float_exception_flags(&env->sse_status);\n-    signed char prev_rounding_mode;\n+    FloatRoundMode prev_rounding_mode = get_float_rounding_mode(&env->sse_status);\n     int i;\n \n-    prev_rounding_mode = env->sse_status.float_rounding_mode;\n     if (!(mode & (1 << 2))) {\n         set_x86_rounding_mode(mode & 3, &env->sse_status);\n     }\n@@ -1782,17 +1779,16 @@ void glue(helper_roundss, SUFFIX)(CPUX86State *env, Reg *d, Reg *v, Reg *s,\n                                   ~float_flag_inexact,\n                                   &env->sse_status);\n     }\n-    env->sse_status.float_rounding_mode = prev_rounding_mode;\n+    set_float_rounding_mode(prev_rounding_mode, &env->sse_status);\n }\n \n void glue(helper_roundsd, SUFFIX)(CPUX86State *env, Reg *d, Reg *v, Reg *s,\n                                   uint32_t mode)\n {\n     int old_flags = get_float_exception_flags(&env->sse_status);\n-    signed char prev_rounding_mode;\n+    FloatRoundMode prev_rounding_mode = get_float_rounding_mode(&env->sse_status);\n     int i;\n \n-    prev_rounding_mode = env->sse_status.float_rounding_mode;\n     if (!(mode & (1 << 2))) {\n         set_x86_rounding_mode(mode & 3, &env->sse_status);\n     }\n@@ -1807,7 +1803,7 @@ void glue(helper_roundsd, SUFFIX)(CPUX86State *env, Reg *d, Reg *v, Reg *s,\n                                   ~float_flag_inexact,\n                                   &env->sse_status);\n     }\n-    env->sse_status.float_rounding_mode = prev_rounding_mode;\n+    set_float_rounding_mode(prev_rounding_mode, &env->sse_status);\n }\n #endif\n \ndiff --git a/fpu/softfloat.c b/fpu/softfloat.c\nindex 9fc0b83cd1..231b308b50 100644\n--- a/fpu/softfloat.c\n+++ b/fpu/softfloat.c\n@@ -234,7 +234,7 @@ static inline bool can_use_fpu(const float_status *s)\n         return false;\n     }\n     return likely(s->float_exception_flags & float_flag_inexact &&\n-                  s->float_rounding_mode == float_round_nearest_even);\n+                  get_float_rounding_mode(s) == float_round_nearest_even);\n }\n \n /*\n@@ -2791,7 +2791,7 @@ float16 float16_round_to_int(float16 a, float_status *s)\n {\n     FloatParts64 p = float16_unpack_canonical(a, s);\n \n-    p = parts64_round_to_int(&p, s->float_rounding_mode, 0, s,\n+    p = parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s,\n                              &float16_params);\n     return float16_round_pack_canonical(&p, s);\n }\n@@ -2800,7 +2800,7 @@ float32 float32_round_to_int(float32 a, float_status *s)\n {\n     FloatParts64 p = float32_unpack_canonical(a, s);\n \n-    p = parts64_round_to_int(&p, s->float_rounding_mode, 0, s,\n+    p = parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s,\n                              &float32_params);\n     return float32_round_pack_canonical(&p, s);\n }\n@@ -2809,7 +2809,7 @@ float64 float64_round_to_int(float64 a, float_status *s)\n {\n     FloatParts64 p = float64_unpack_canonical(a, s);\n \n-    p = parts64_round_to_int(&p, s->float_rounding_mode, 0, s,\n+    p = parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s,\n                              &float64_params);\n     return float64_round_pack_canonical(&p, s);\n }\n@@ -2818,7 +2818,7 @@ bfloat16 bfloat16_round_to_int(bfloat16 a, float_status *s)\n {\n     FloatParts64 p = bfloat16_unpack_canonical(a, s);\n \n-    p = parts64_round_to_int(&p, s->float_rounding_mode, 0, s,\n+    p = parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s,\n                              &bfloat16_params);\n     return bfloat16_round_pack_canonical(&p, s);\n }\n@@ -2827,7 +2827,7 @@ float128 float128_round_to_int(float128 a, float_status *s)\n {\n     FloatParts128 p = float128_unpack_canonical(a, s);\n \n-    p = parts128_round_to_int(&p, s->float_rounding_mode, 0, s,\n+    p = parts128_round_to_int(&p, get_float_rounding_mode(s), 0, s,\n                               &float128_params);\n     return float128_round_pack_canonical(&p, s);\n }\n@@ -2840,7 +2840,7 @@ floatx80 floatx80_round_to_int(floatx80 a, float_status *status)\n         return floatx80_default_nan(status);\n     }\n \n-    p = parts128_round_to_int(&p, status->float_rounding_mode, 0, status,\n+    p = parts128_round_to_int(&p, get_float_rounding_mode(status), 0, status,\n                               &floatx80_params[status->floatx80_rounding_precision]);\n     return floatx80_round_pack_canonical(&p, status);\n }\n@@ -3038,77 +3038,77 @@ static int64_t floatx80_to_int64_scalbn(floatx80 a, FloatRoundMode rmode,\n \n int8_t float16_to_int8(float16 a, float_status *s)\n {\n-    return float16_to_int8_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_int8_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int16_t float16_to_int16(float16 a, float_status *s)\n {\n-    return float16_to_int16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int32_t float16_to_int32(float16 a, float_status *s)\n {\n-    return float16_to_int32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int64_t float16_to_int64(float16 a, float_status *s)\n {\n-    return float16_to_int64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int16_t float32_to_int16(float32 a, float_status *s)\n {\n-    return float32_to_int16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float32_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int32_t float32_to_int32(float32 a, float_status *s)\n {\n-    return float32_to_int32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float32_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int64_t float32_to_int64(float32 a, float_status *s)\n {\n-    return float32_to_int64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float32_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int16_t float64_to_int16(float64 a, float_status *s)\n {\n-    return float64_to_int16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float64_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int32_t float64_to_int32(float64 a, float_status *s)\n {\n-    return float64_to_int32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float64_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int64_t float64_to_int64(float64 a, float_status *s)\n {\n-    return float64_to_int64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float64_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int32_t float128_to_int32(float128 a, float_status *s)\n {\n-    return float128_to_int32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float128_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int64_t float128_to_int64(float128 a, float_status *s)\n {\n-    return float128_to_int64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float128_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n Int128 float128_to_int128(float128 a, float_status *s)\n {\n-    return float128_to_int128_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float128_to_int128_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int32_t floatx80_to_int32(floatx80 a, float_status *s)\n {\n-    return floatx80_to_int32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return floatx80_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int64_t floatx80_to_int64(floatx80 a, float_status *s)\n {\n-    return floatx80_to_int64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return floatx80_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int16_t float16_to_int16_round_to_zero(float16 a, float_status *s)\n@@ -3183,22 +3183,22 @@ int64_t floatx80_to_int64_round_to_zero(floatx80 a, float_status *s)\n \n int8_t bfloat16_to_int8(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_int8_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_int8_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int16_t bfloat16_to_int16(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_int16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int32_t bfloat16_to_int32(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_int32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int64_t bfloat16_to_int64(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_int64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n int8_t bfloat16_to_int8_round_to_zero(bfloat16 a, float_status *s)\n@@ -3477,67 +3477,67 @@ static Int128 float128_to_uint128_scalbn(float128 a, FloatRoundMode rmode,\n \n uint8_t float16_to_uint8(float16 a, float_status *s)\n {\n-    return float16_to_uint8_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_uint8_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint16_t float16_to_uint16(float16 a, float_status *s)\n {\n-    return float16_to_uint16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint32_t float16_to_uint32(float16 a, float_status *s)\n {\n-    return float16_to_uint32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint64_t float16_to_uint64(float16 a, float_status *s)\n {\n-    return float16_to_uint64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float16_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint16_t float32_to_uint16(float32 a, float_status *s)\n {\n-    return float32_to_uint16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float32_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint32_t float32_to_uint32(float32 a, float_status *s)\n {\n-    return float32_to_uint32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float32_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint64_t float32_to_uint64(float32 a, float_status *s)\n {\n-    return float32_to_uint64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float32_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint16_t float64_to_uint16(float64 a, float_status *s)\n {\n-    return float64_to_uint16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float64_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint32_t float64_to_uint32(float64 a, float_status *s)\n {\n-    return float64_to_uint32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float64_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint64_t float64_to_uint64(float64 a, float_status *s)\n {\n-    return float64_to_uint64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float64_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint32_t float128_to_uint32(float128 a, float_status *s)\n {\n-    return float128_to_uint32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float128_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint64_t float128_to_uint64(float128 a, float_status *s)\n {\n-    return float128_to_uint64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float128_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n Int128 float128_to_uint128(float128 a, float_status *s)\n {\n-    return float128_to_uint128_scalbn(a, s->float_rounding_mode, 0, s);\n+    return float128_to_uint128_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint16_t float16_to_uint16_round_to_zero(float16 a, float_status *s)\n@@ -3602,22 +3602,22 @@ Int128 float128_to_uint128_round_to_zero(float128 a, float_status *s)\n \n uint8_t bfloat16_to_uint8(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_uint8_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_uint8_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint16_t bfloat16_to_uint16(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_uint16_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint32_t bfloat16_to_uint32(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_uint32_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint64_t bfloat16_to_uint64(bfloat16 a, float_status *s)\n {\n-    return bfloat16_to_uint64_scalbn(a, s->float_rounding_mode, 0, s);\n+    return bfloat16_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s);\n }\n \n uint8_t bfloat16_to_uint8_round_to_zero(bfloat16 a, float_status *s)\n@@ -4866,7 +4866,7 @@ floatx80 roundAndPackFloatx80(FloatX80RoundPrec roundingPrecision, bool zSign,\n     bool roundNearestEven, increment, isTiny;\n     int64_t roundIncrement, roundMask, roundBits;\n \n-    roundingMode = status->float_rounding_mode;\n+    roundingMode = get_float_rounding_mode(status);\n     roundNearestEven = ( roundingMode == float_round_nearest_even );\n     switch (roundingPrecision) {\n     case floatx80_precision_x:\ndiff --git a/target/alpha/fpu_helper.c b/target/alpha/fpu_helper.c\nindex 9af77777da..0ced53c54e 100644\n--- a/target/alpha/fpu_helper.c\n+++ b/target/alpha/fpu_helper.c\n@@ -485,7 +485,7 @@ static uint64_t do_cvttq(CPUAlphaState *env, uint64_t a, int roundmode)\n \n uint64_t helper_cvttq(CPUAlphaState *env, uint64_t a)\n {\n-    return do_cvttq(env, a, FP_STATUS.float_rounding_mode);\n+    return do_cvttq(env, a, get_float_rounding_mode(&FP_STATUS));\n }\n \n uint64_t helper_cvttq_c(CPUAlphaState *env, uint64_t a)\ndiff --git a/target/arm/tcg/vfp_helper.c b/target/arm/tcg/vfp_helper.c\nindex e692bc568b..5839e82449 100644\n--- a/target/arm/tcg/vfp_helper.c\n+++ b/target/arm/tcg/vfp_helper.c\n@@ -423,10 +423,10 @@ ftype HELPER(vfp_##name##to##p)(uint##isz##_t  x, uint32_t shift,      \\\n                                                      float_status *fpst) \\\n     {                                                                  \\\n         ftype ret;                                                     \\\n-        FloatRoundMode oldmode = fpst->float_rounding_mode;            \\\n-        fpst->float_rounding_mode = float_round_nearest_even;          \\\n+        FloatRoundMode oldmode = get_float_rounding_mode(fpst);        \\\n+        set_float_rounding_mode(float_round_nearest_even, fpst);       \\\n         ret = itype##_to_##float##fsz##_scalbn(x, -shift, fpst);       \\\n-        fpst->float_rounding_mode = oldmode;                           \\\n+        set_float_rounding_mode(oldmode, fpst);                        \\\n         return ret;                                                    \\\n     }\n \n@@ -663,7 +663,7 @@ static uint64_t call_recip_estimate(int *exp, int exp_off, uint64_t frac,\n \n static bool round_to_inf(float_status *fpst, bool sign_bit)\n {\n-    switch (fpst->float_rounding_mode) {\n+    switch (get_float_rounding_mode(fpst)) {\n     case float_round_nearest_even: /* Round to Nearest */\n         return true;\n     case float_round_up: /* Round to +Inf */\ndiff --git a/target/hexagon/fma_emu.c b/target/hexagon/fma_emu.c\nindex c557141f11..a90f5c87b6 100644\n--- a/target/hexagon/fma_emu.c\n+++ b/target/hexagon/fma_emu.c\n@@ -315,7 +315,7 @@ static float64 accum_round_float64(Accum a, float_status *fp_status)\n     if ((int128_gethi(a.mant) == 0) && (int128_getlo(a.mant) == 0)\n         && ((a.guard | a.round | a.sticky) == 0)) {\n         /* result zero */\n-        switch (fp_status->float_rounding_mode) {\n+        switch (get_float_rounding_mode(fp_status)) {\n         case float_round_down:\n             return zero_float64(1);\n         default:\n@@ -362,7 +362,7 @@ static float64 accum_round_float64(Accum a, float_status *fp_status)\n     /* OK, we're relatively canonical... now we need to round */\n     if (a.guard || a.round || a.sticky) {\n         float_raise(float_flag_inexact, fp_status);\n-        switch (fp_status->float_rounding_mode) {\n+        switch (get_float_rounding_mode(fp_status)) {\n         case float_round_to_zero:\n             /* Chop and we're done */\n             break;\n@@ -401,7 +401,7 @@ static float64 accum_round_float64(Accum a, float_status *fp_status)\n         /* Yep, inf result */\n         float_raise(float_flag_overflow, fp_status);\n         float_raise(float_flag_inexact, fp_status);\n-        switch (fp_status->float_rounding_mode) {\n+        switch (get_float_rounding_mode(fp_status)) {\n         case float_round_to_zero:\n             return maxfinite_float64(a.sign);\n         case float_round_up:\ndiff --git a/target/i386/tcg/fpu_helper.c b/target/i386/tcg/fpu_helper.c\nindex 37c83ded38..7b0b0dd520 100644\n--- a/target/i386/tcg/fpu_helper.c\n+++ b/target/i386/tcg/fpu_helper.c\n@@ -1183,10 +1183,10 @@ void helper_f2xm1(CPUX86State *env)\n         bool asign, bsign;\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+        FloatRoundMode save_mode = get_float_rounding_mode(&env->fp_status);\n         FloatX80RoundPrec save_prec =\n             env->fp_status.floatx80_rounding_precision;\n-        env->fp_status.float_rounding_mode = float_round_nearest_even;\n+        set_float_rounding_mode(float_round_nearest_even, &env->fp_status);\n         env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n         /* Find the nearest multiple of 1/32 to the argument.  */\n@@ -1202,7 +1202,7 @@ void helper_f2xm1(CPUX86State *env)\n              */\n             ST0 = f2xm1_table[n].t;\n             set_float_exception_flags(float_flag_inexact, &env->fp_status);\n-            env->fp_status.float_rounding_mode = save_mode;\n+            set_float_rounding_mode(save_mode, &env->fp_status);\n         } else {\n             /*\n              * Compute the lower parts of a polynomial expansion for\n@@ -1282,7 +1282,7 @@ void helper_f2xm1(CPUX86State *env)\n                     asign = bsign;\n                 }\n             }\n-            env->fp_status.float_rounding_mode = save_mode;\n+            set_float_rounding_mode(save_mode, &env->fp_status);\n             /* This result is inexact.  */\n             asig1 |= 1;\n             ST0 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n@@ -1483,10 +1483,10 @@ void helper_fpatan(CPUX86State *env)\n             uint64_t azsig0, azsig1;\n             uint64_t azsig2, azsig3, axsig0, axsig1;\n             floatx80 x8;\n-            FloatRoundMode save_mode = env->fp_status.float_rounding_mode;\n+            FloatRoundMode save_mode = get_float_rounding_mode(&env->fp_status);\n             FloatX80RoundPrec save_prec =\n                 env->fp_status.floatx80_rounding_precision;\n-            env->fp_status.float_rounding_mode = float_round_nearest_even;\n+            set_float_rounding_mode(float_round_nearest_even, &env->fp_status);\n             env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n             if (arg0_exp == 0) {\n@@ -1793,7 +1793,7 @@ void helper_fpatan(CPUX86State *env)\n                 }\n             }\n \n-            env->fp_status.float_rounding_mode = save_mode;\n+            set_float_rounding_mode(save_mode, &env->fp_status);\n             env->fp_status.floatx80_rounding_precision = save_prec;\n         }\n         /* This result is inexact.  */\n@@ -2121,10 +2121,10 @@ void helper_fyl2xp1(CPUX86State *env)\n     } else {\n         int32_t aexp;\n         uint64_t asig0, asig1, asig2;\n-        FloatRoundMode save_mode = env->fp_status.float_rounding_mode;\n+        FloatRoundMode save_mode = get_float_rounding_mode(&env->fp_status);\n         FloatX80RoundPrec save_prec =\n             env->fp_status.floatx80_rounding_precision;\n-        env->fp_status.float_rounding_mode = float_round_nearest_even;\n+        set_float_rounding_mode(float_round_nearest_even, &env->fp_status);\n         env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n         helper_fyl2x_common(env, ST0, &aexp, &asig0, &asig1);\n@@ -2139,7 +2139,7 @@ void helper_fyl2xp1(CPUX86State *env)\n         aexp += arg1_exp - 0x3ffe;\n         /* This result is inexact.  */\n         asig1 |= 1;\n-        env->fp_status.float_rounding_mode = save_mode;\n+        set_float_rounding_mode(save_mode, &env->fp_status);\n         ST1 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n                                             arg0_sign ^ arg1_sign, aexp,\n                                             asig0, asig1, &env->fp_status);\n@@ -2224,10 +2224,10 @@ void helper_fyl2x(CPUX86State *env)\n     } else {\n         int32_t int_exp;\n         floatx80 arg0_m1;\n-        FloatRoundMode save_mode = env->fp_status.float_rounding_mode;\n+        FloatRoundMode save_mode = get_float_rounding_mode(&env->fp_status);\n         FloatX80RoundPrec save_prec =\n             env->fp_status.floatx80_rounding_precision;\n-        env->fp_status.float_rounding_mode = float_round_nearest_even;\n+        set_float_rounding_mode(float_round_nearest_even, &env->fp_status);\n         env->fp_status.floatx80_rounding_precision = floatx80_precision_x;\n \n         if (arg0_exp == 0) {\n@@ -2245,7 +2245,7 @@ void helper_fyl2x(CPUX86State *env)\n                                floatx80_one, &env->fp_status);\n         if (floatx80_is_zero(arg0_m1)) {\n             /* Exact power of 2; multiply by ST1.  */\n-            env->fp_status.float_rounding_mode = save_mode;\n+            set_float_rounding_mode(save_mode, &env->fp_status);\n             ST1 = floatx80_mul(int32_to_floatx80(int_exp, &env->fp_status),\n                                ST1, &env->fp_status);\n         } else {\n@@ -2284,7 +2284,7 @@ void helper_fyl2x(CPUX86State *env)\n             aexp += arg1_exp - 0x3ffe;\n             /* This result is inexact.  */\n             asig1 |= 1;\n-            env->fp_status.float_rounding_mode = save_mode;\n+            set_float_rounding_mode(save_mode, &env->fp_status);\n             ST1 = normalizeRoundAndPackFloatx80(floatx80_precision_x,\n                                                 asign ^ arg1_sign, aexp,\n                                                 asig0, asig1, &env->fp_status);\ndiff --git a/target/m68k/softfloat.c b/target/m68k/softfloat.c\nindex d1f150e641..51706f6db8 100644\n--- a/target/m68k/softfloat.c\n+++ b/target/m68k/softfloat.c\n@@ -266,9 +266,9 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *status)\n         return floatx80_move(a, status);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n@@ -336,7 +336,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *status)\n                            status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */\n         fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_add(fp0, klog2, status);\n@@ -402,7 +402,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *status)\n         fp0 = floatx80_mul(fp0, fp1,\n                            status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_add(fp0, saveu, status);\n@@ -464,9 +464,9 @@ floatx80 floatx80_logn(floatx80 a, float_status *status)\n         return floatx80_default_nan(status);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n@@ -523,7 +523,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status)\n                            status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */\n         fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_add(fp0, klog2, status);\n@@ -569,7 +569,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status)\n         fp0 = floatx80_mul(fp0, fp1,\n                            status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_add(fp0, saveu, status);\n@@ -620,15 +620,15 @@ floatx80 floatx80_log10(floatx80 a, float_status *status)\n         return floatx80_default_nan(status);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\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 \n-    status->float_rounding_mode = user_rnd_mode;\n+    set_float_rounding_mode(user_rnd_mode, status);\n     status->floatx80_rounding_precision = user_rnd_prec;\n \n     a = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L10 */\n@@ -679,13 +679,13 @@ floatx80 floatx80_log2(floatx80 a, float_status *status)\n         return floatx80_default_nan(status);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\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+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = int32_to_floatx80(aExp - 0x3FFF, status);\n@@ -693,7 +693,7 @@ floatx80 floatx80_log2(floatx80 a, float_status *status)\n         fp0 = floatx80_logn(a, status);\n         fp1 = packFloatx80(0, 0x3FFF, UINT64_C(0xB8AA3B295C17F0BC)); /* INV_L2 */\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L2 */\n@@ -739,9 +739,9 @@ floatx80 floatx80_etox(floatx80 a, float_status *status)\n         return packFloatx80(0, one_exp, one_sig);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     adjflag = 0;\n@@ -817,7 +817,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status)\n                 fp0 = floatx80_mul(fp0, adjscale, status);\n             }\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_mul(fp0, scale, status);\n@@ -827,7 +827,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status)\n             return a;\n         } else { /* |X| >= 16380 log2 */\n             if (compact > 0x400CB27C) { /* |X| >= 16480 log2 */\n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n                 if (aSign) {\n                     a = roundAndPackFloatx80(\n@@ -876,7 +876,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status)\n             }\n         }\n     } else { /* |X| < 2^(-65) */\n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_add(a, float32_to_floatx80(make_float32(0x3F800000),\n@@ -922,9 +922,9 @@ floatx80 floatx80_twotox(floatx80 a, float_status *status)\n         return packFloatx80(0, one_exp, one_sig);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     fp0 = a;\n@@ -934,7 +934,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *status)\n     if (compact < 0x3FB98000 || compact > 0x400D80C0) {\n         /* |X| > 16480 or |X| < 2^(-70) */\n         if (compact > 0x3FFF8000) { /* |X| > 16480 */\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             if (aSign) {\n@@ -945,7 +945,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *status)\n                                             0, 0x8000, aSig, 0, status);\n             }\n         } else { /* |X| < 2^(-70) */\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_add(fp0, float32_to_floatx80(\n@@ -1027,7 +1027,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *status)\n         fp0 = floatx80_add(fp0, fact2, status);\n         fp0 = floatx80_add(fp0, fact1, status);\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_mul(fp0, adjfact, status);\n@@ -1072,9 +1072,9 @@ floatx80 floatx80_tentox(floatx80 a, float_status *status)\n         return packFloatx80(0, one_exp, one_sig);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     fp0 = a;\n@@ -1084,7 +1084,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *status)\n     if (compact < 0x3FB98000 || compact > 0x400B9B07) {\n         /* |X| > 16480 LOG2/LOG10 or |X| < 2^(-70) */\n         if (compact > 0x3FFF8000) { /* |X| > 16480 */\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             if (aSign) {\n@@ -1095,7 +1095,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *status)\n                                             0, 0x8000, aSig, 0, status);\n             }\n         } else { /* |X| < 2^(-70) */\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_add(fp0, float32_to_floatx80(\n@@ -1182,7 +1182,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *status)\n         fp0 = floatx80_add(fp0, fact2, status);\n         fp0 = floatx80_add(fp0, fact1, status);\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_mul(fp0, adjfact, status);\n@@ -1227,9 +1227,9 @@ floatx80 floatx80_tan(floatx80 a, float_status *status)\n         return packFloatx80(aSign, 0, 0);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n@@ -1294,7 +1294,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *status)\n             fp1 = floatx80_add(fp1, fp3, status); /* FP1 is r := (A-R)+a */\n             goto loop;\n         } else {\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_move(a, status);\n@@ -1354,7 +1354,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *status)\n             xSign ^= 1;\n             fp1 = packFloatx80(xSign, xExp, xSig);\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_div(fp0, fp1, status);\n@@ -1392,7 +1392,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *status)\n                                make_float32(0x3F800000), status),\n                                status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_div(fp0, fp1, status);\n@@ -1438,9 +1438,9 @@ floatx80 floatx80_sin(floatx80 a, float_status *status)\n         return packFloatx80(aSign, 0, 0);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n@@ -1509,7 +1509,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *status)\n             fp0 = float32_to_floatx80(make_float32(0x3F800000),\n                                       status); /* 1 */\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             /* SINTINY */\n@@ -1582,7 +1582,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *status)\n             x = packFloatx80(xSign, xExp, xSig);\n             fp0 = floatx80_mul(fp0, x, status);\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status);\n@@ -1632,7 +1632,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *status)\n             fp0 = floatx80_mul(fp0, x, status); /* R'*S */\n             fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_add(fp0, x, status);\n@@ -1678,9 +1678,9 @@ floatx80 floatx80_cos(floatx80 a, float_status *status)\n         return packFloatx80(0, one_exp, one_sig);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n@@ -1748,7 +1748,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *status)\n             /* SINSM */\n             fp0 = float32_to_floatx80(make_float32(0x3F800000), status); /* 1 */\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             /* COSTINY */\n@@ -1822,7 +1822,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *status)\n             x = packFloatx80(xSign, xExp, xSig);\n             fp0 = floatx80_mul(fp0, x, status);\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status);\n@@ -1870,7 +1870,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *status)\n             fp0 = floatx80_mul(fp0, x, status); /* R'*S */\n             fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_add(fp0, x, status);\n@@ -1917,9 +1917,9 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n \n     compact = floatx80_make_compact(aExp, aSig);\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     if (compact < 0x3FFB8000 || compact > 0x4002FFFF) {\n@@ -1929,7 +1929,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n                 fp0 = packFloatx80(aSign, piby2_exp, pi_sig);\n                 fp1 = packFloatx80(aSign, 0x0001, one_sig);\n \n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_sub(fp0, fp1, status);\n@@ -1969,7 +1969,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n                 fp0 = floatx80_add(fp0, xsave, status);\n                 fp1 = packFloatx80(aSign, piby2_exp, pi_sig);\n \n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_add(fp0, fp1, status);\n@@ -1980,7 +1980,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n             }\n         } else { /* |X| < 1/16 */\n             if (compact < 0x3FD78000) { /* |X| < 2^(-40) */\n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_move(a, status);\n@@ -2020,7 +2020,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n                 /* X*Y*([B1+Z*(B3+Z*B5)]+[Y*(B2+Z*(B4+Z*B6))]) */\n                 fp0 = floatx80_mul(fp0, fp1, status);\n \n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_add(fp0, xsave, status);\n@@ -2069,7 +2069,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *status)\n         fp1 = floatx80_mul(fp1, fp2, status); /* A1*U*V*(A2+V*(A3+V)) */\n         fp0 = floatx80_add(fp0, fp1, status); /* ATAN(U) */\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_add(fp0, fp3, status); /* ATAN(X) */\n@@ -2122,9 +2122,9 @@ floatx80 floatx80_asin(floatx80 a, float_status *status)\n \n     } /* |X| < 1 */\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     one = packFloatx80(0, one_exp, one_sig);\n@@ -2136,7 +2136,7 @@ floatx80 floatx80_asin(floatx80 a, float_status *status)\n     fp1 = floatx80_sqrt(fp1, status);       /* SQRT((1+X)*(1-X)) */\n     fp0 = floatx80_div(fp0, fp1, status);   /* X/SQRT((1+X)*(1-X)) */\n \n-    status->float_rounding_mode = user_rnd_mode;\n+    set_float_rounding_mode(user_rnd_mode, status);\n     status->floatx80_rounding_precision = user_rnd_prec;\n \n     a = floatx80_atan(fp0, status);         /* ATAN(X/SQRT((1+X)*(1-X))) */\n@@ -2192,9 +2192,9 @@ floatx80 floatx80_acos(floatx80 a, float_status *status)\n         }\n     } /* |X| < 1 */\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     one = packFloatx80(0, one_exp, one_sig);\n@@ -2206,7 +2206,7 @@ floatx80 floatx80_acos(floatx80 a, float_status *status)\n     fp0 = floatx80_sqrt(fp0, status);       /* SQRT((1-X)/(1+X)) */\n     fp0 = floatx80_atan(fp0, status);       /* ATAN(SQRT((1-X)/(1+X))) */\n \n-    status->float_rounding_mode = user_rnd_mode;\n+    set_float_rounding_mode(user_rnd_mode, status);\n     status->floatx80_rounding_precision = user_rnd_prec;\n \n     a = floatx80_add(fp0, fp0, status);     /* 2 * ATAN(SQRT((1-X)/(1+X))) */\n@@ -2256,9 +2256,9 @@ floatx80 floatx80_atanh(floatx80 a, float_status *status)\n         }\n     } /* |X| < 1 */\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     one = packFloatx80(0, one_exp, one_sig);\n@@ -2270,7 +2270,7 @@ floatx80 floatx80_atanh(floatx80 a, float_status *status)\n     fp0 = floatx80_div(fp0, fp1, status); /* Z = 2Y/(1-Y) */\n     fp0 = floatx80_lognp1(fp0, status); /* LOG1P(Z) */\n \n-    status->float_rounding_mode = user_rnd_mode;\n+    set_float_rounding_mode(user_rnd_mode, status);\n     status->floatx80_rounding_precision = user_rnd_prec;\n \n     a = floatx80_mul(fp0, fp2,\n@@ -2315,9 +2315,9 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n         return packFloatx80(aSign, 0, 0);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     if (aExp >= 0x3FFD) { /* |X| >= 1/4 */\n@@ -2410,7 +2410,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n \n             sc = packFloatx80(0, m + 0x3FFF, one_sig);\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_mul(fp0, sc, status);\n@@ -2423,7 +2423,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n                 fp0 = float32_to_floatx80(make_float32(0xBF800000),\n                       status); /* -1 */\n \n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_add(fp0, float32_to_floatx80(\n@@ -2434,7 +2434,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n \n                 return a;\n             } else {\n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 return floatx80_etox(a, status);\n@@ -2495,7 +2495,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n             fp1 = floatx80_add(fp1, fp2, status); /* Q */\n             fp0 = floatx80_add(fp0, fp1, status); /* S*B1+Q */\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_add(fp0, a, status);\n@@ -2513,14 +2513,14 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *status)\n                                    status);\n                 fp0 = floatx80_add(fp0, sc, status);\n \n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_mul(fp0, float64_to_floatx80(\n                                  make_float64(0x3730000000000000), status),\n                                  status);\n             } else {\n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_add(fp0, sc, status);\n@@ -2565,9 +2565,9 @@ floatx80 floatx80_tanh(floatx80 a, float_status *status)\n         return packFloatx80(aSign, 0, 0);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n@@ -2576,7 +2576,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *status)\n         /* TANHBORS */\n         if (compact < 0x3FFF8000) {\n             /* TANHSM */\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_move(a, status);\n@@ -2593,7 +2593,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *status)\n                 sign &= 0x80000000;\n                 sign ^= 0x80800000; /* -SIGN(X)*EPS */\n \n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_add(fp0, float32_to_floatx80(make_float32(sign),\n@@ -2615,7 +2615,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *status)\n                 fp0 = float32_to_floatx80(make_float32(sign | 0x3F800000),\n                                           status); /* SIGN */\n \n-                status->float_rounding_mode = user_rnd_mode;\n+                set_float_rounding_mode(user_rnd_mode, status);\n                 status->floatx80_rounding_precision = user_rnd_prec;\n \n                 a = floatx80_add(fp1, fp0, status);\n@@ -2638,7 +2638,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *status)\n \n         fp1 = packFloatx80(vSign ^ aSign, vExp, vSig);\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_div(fp0, fp1, status);\n@@ -2681,9 +2681,9 @@ floatx80 floatx80_sinh(floatx80 a, float_status *status)\n         return packFloatx80(aSign, 0, 0);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n@@ -2691,7 +2691,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *status)\n     if (compact > 0x400CB167) {\n         /* SINHBIG */\n         if (compact > 0x400CB2B3) {\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             return roundAndPackFloatx80(status->floatx80_rounding_precision,\n@@ -2707,7 +2707,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *status)\n             fp0 = floatx80_etox(fp0, status);\n             fp2 = packFloatx80(aSign, 0x7FFB, one_sig);\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_mul(fp0, fp2, status);\n@@ -2727,7 +2727,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *status)\n \n         fact = packFloat32(aSign, 0x7E, 0);\n \n-        status->float_rounding_mode = user_rnd_mode;\n+        set_float_rounding_mode(user_rnd_mode, status);\n         status->floatx80_rounding_precision = user_rnd_prec;\n \n         a = floatx80_mul(fp0, float32_to_floatx80(fact, status), status);\n@@ -2767,16 +2767,16 @@ floatx80 floatx80_cosh(floatx80 a, float_status *status)\n         return packFloatx80(0, one_exp, one_sig);\n     }\n \n-    user_rnd_mode = status->float_rounding_mode;\n+    user_rnd_mode = get_float_rounding_mode(status);\n     user_rnd_prec = status->floatx80_rounding_precision;\n-    status->float_rounding_mode = float_round_nearest_even;\n+    set_float_rounding_mode(float_round_nearest_even, status);\n     status->floatx80_rounding_precision = floatx80_precision_x;\n \n     compact = floatx80_make_compact(aExp, aSig);\n \n     if (compact > 0x400CB167) {\n         if (compact > 0x400CB2B3) {\n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n             return roundAndPackFloatx80(status->floatx80_rounding_precision, 0,\n                                         0x8000, one_sig, 0, status);\n@@ -2791,7 +2791,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *status)\n             fp0 = floatx80_etox(fp0, status);\n             fp1 = packFloatx80(0, 0x7FFB, one_sig);\n \n-            status->float_rounding_mode = user_rnd_mode;\n+            set_float_rounding_mode(user_rnd_mode, status);\n             status->floatx80_rounding_precision = user_rnd_prec;\n \n             a = floatx80_mul(fp0, fp1, status);\n@@ -2809,7 +2809,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *status)\n     fp1 = float32_to_floatx80(make_float32(0x3E800000), status); /* 1/4 */\n     fp1 = floatx80_div(fp1, fp0, status); /* 1/(2*EXP(|X|)) */\n \n-    status->float_rounding_mode = user_rnd_mode;\n+    set_float_rounding_mode(user_rnd_mode, status);\n     status->floatx80_rounding_precision = user_rnd_prec;\n \n     a = floatx80_add(fp0, fp1, status);\ndiff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c\nindex 850aca6ed1..c1bdde9e10 100644\n--- a/target/ppc/fpu_helper.c\n+++ b/target/ppc/fpu_helper.c\n@@ -1616,7 +1616,7 @@ void helper_xsaddqp(CPUPPCState *env, uint32_t opcode,\n \n     tstat = env->fp_status;\n     if (unlikely(Rc(opcode) != 0)) {\n-        tstat.float_rounding_mode = float_round_to_odd;\n+        set_float_rounding_mode(float_round_to_odd, &tstat);\n     }\n \n     set_float_exception_flags(0, &tstat);\n@@ -1688,7 +1688,7 @@ void helper_xsmulqp(CPUPPCState *env, uint32_t opcode,\n     helper_reset_fpstatus(env);\n     tstat = env->fp_status;\n     if (unlikely(Rc(opcode) != 0)) {\n-        tstat.float_rounding_mode = float_round_to_odd;\n+        set_float_rounding_mode(float_round_to_odd, &tstat);\n     }\n \n     set_float_exception_flags(0, &tstat);\n@@ -1762,7 +1762,7 @@ void helper_xsdivqp(CPUPPCState *env, uint32_t opcode,\n     helper_reset_fpstatus(env);\n     tstat = env->fp_status;\n     if (unlikely(Rc(opcode) != 0)) {\n-        tstat.float_rounding_mode = float_round_to_odd;\n+        set_float_rounding_mode(float_round_to_odd, &tstat);\n     }\n \n     set_float_exception_flags(0, &tstat);\n@@ -2095,7 +2095,7 @@ void helper_##op(CPUPPCState *env, ppc_vsr_t *xt, ppc_vsr_t *s1, ppc_vsr_t *s2,\\\n     float_status tstat = env->fp_status;                                       \\\n     set_float_exception_flags(0, &tstat);                                      \\\n     if (ro) {                                                                  \\\n-        tstat.float_rounding_mode = float_round_to_odd;                        \\\n+        set_float_rounding_mode(float_round_to_odd, &tstat);                   \\\n     }                                                                          \\\n     t.f128 = float128_muladd(s1->f128, s3->f128, s2->f128, maddflgs, &tstat);  \\\n     env->fp_status.float_exception_flags |= tstat.float_exception_flags;       \\\n@@ -2706,7 +2706,7 @@ void helper_XSCVQPDP(CPUPPCState *env, uint32_t ro, ppc_vsr_t *xt,\n \n     tstat = env->fp_status;\n     if (ro != 0) {\n-        tstat.float_rounding_mode = float_round_to_odd;\n+        set_float_rounding_mode(float_round_to_odd, &tstat);\n     }\n \n     t.VsrD(0) = float128_to_float64(xb->f128, &tstat);\n@@ -3306,7 +3306,7 @@ void helper_xssqrtqp(CPUPPCState *env, uint32_t opcode,\n \n     tstat = env->fp_status;\n     if (unlikely(Rc(opcode) != 0)) {\n-        tstat.float_rounding_mode = float_round_to_odd;\n+        set_float_rounding_mode(float_round_to_odd, &tstat);\n     }\n \n     set_float_exception_flags(0, &tstat);\n@@ -3332,7 +3332,7 @@ void helper_xssubqp(CPUPPCState *env, uint32_t opcode,\n \n     tstat = env->fp_status;\n     if (unlikely(Rc(opcode) != 0)) {\n-        tstat.float_rounding_mode = float_round_to_odd;\n+        set_float_rounding_mode(float_round_to_odd, &tstat);\n     }\n \n     set_float_exception_flags(0, &tstat);\ndiff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c\nindex 5a3554dd71..c826702bf8 100644\n--- a/target/riscv/vector_helper.c\n+++ b/target/riscv/vector_helper.c\n@@ -4270,9 +4270,9 @@ static uint64_t frec7(uint64_t f, int exp_size, int frac_size,\n             s->float_exception_flags |= (float_flag_inexact |\n                                          float_flag_overflow);\n \n-            if ((s->float_rounding_mode == float_round_to_zero) ||\n-                ((s->float_rounding_mode == float_round_down) && !sign) ||\n-                ((s->float_rounding_mode == float_round_up) && sign)) {\n+            if ((get_float_rounding_mode(s) == float_round_to_zero) ||\n+                ((get_float_rounding_mode(s) == float_round_down) && !sign) ||\n+                ((get_float_rounding_mode(s) == float_round_up) && sign)) {\n                 /* Return greatest/negative finite value. */\n                 return (sign << (exp_size + frac_size)) |\n                        (MAKE_64BIT_MASK(frac_size, exp_size) - 1);\ndiff --git a/target/s390x/tcg/fpu_helper.c b/target/s390x/tcg/fpu_helper.c\nindex 33e0f6100d..6ca0b7162b 100644\n--- a/target/s390x/tcg/fpu_helper.c\n+++ b/target/s390x/tcg/fpu_helper.c\n@@ -62,7 +62,7 @@ static int s390_get_bfp_rounding_mode(CPUS390XState *env, int m3)\n     switch (m3) {\n     case 0:\n         /* current mode */\n-        return env->fpu_status.float_rounding_mode;\n+        return get_float_rounding_mode(&env->fpu_status);\n     case 1:\n         /* round to nearest with ties away from 0 */\n         return float_round_ties_away;\n@@ -634,7 +634,7 @@ uint32_t HELPER(cxb)(CPUS390XState *env, Int128 a, Int128 b)\n \n int s390_swap_bfp_rounding_mode(CPUS390XState *env, int m3)\n {\n-    int ret = env->fpu_status.float_rounding_mode;\n+    int ret = get_float_rounding_mode(&env->fpu_status);\n \n     set_float_rounding_mode(s390_get_bfp_rounding_mode(env, m3),\n                             &env->fpu_status);\ndiff --git a/tests/fp/fp-bench.c b/tests/fp/fp-bench.c\nindex d90f542ea2..2b6f66817e 100644\n--- a/tests/fp/fp-bench.c\n+++ b/tests/fp/fp-bench.c\n@@ -615,7 +615,7 @@ static void set_soft_precision(enum rounding rounding)\n     default:\n         g_assert_not_reached();\n     }\n-    soft_status.float_rounding_mode = mode;\n+    set_float_rounding_mode(mode, &soft_status);\n }\n \n static void parse_args(int argc, char *argv[])\ndiff --git a/tests/fp/fp-test.c b/tests/fp/fp-test.c\nindex c619e5dbf7..fdb0cccf14 100644\n--- a/tests/fp/fp-test.c\n+++ b/tests/fp/fp-test.c\n@@ -967,7 +967,7 @@ void run_test(void)\n \n             verCases_roundingCode = 0;\n             slowfloat_roundingMode = rmode;\n-            qsf.float_rounding_mode = sf_rounding_to_qemu(rmode);\n+            set_float_rounding_mode(sf_rounding_to_qemu(rmode), &qsf);\n \n             if (attrs & (FUNC_ARG_ROUNDINGMODE | FUNC_EFF_ROUNDINGMODE)) {\n                 /* print rounding mode if the op is affected by it */\ndiff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc\nindex 8253d480f5..ab9445ade8 100644\n--- a/fpu/softfloat-parts.c.inc\n+++ b/fpu/softfloat-parts.c.inc\n@@ -300,7 +300,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, float_status *s,\n     int exp;\n     FloatExceptionFlags flags = 0;\n \n-    switch (s->float_rounding_mode) {\n+    switch (get_float_rounding_mode(s)) {\n     case float_round_nearest_even_max:\n         overflow_norm = true;\n         /* fall through */\n@@ -441,7 +441,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, float_status *s,\n \n         if (p->frac_lo & round_mask) {\n             /* Need to recompute round-to-even/round-to-odd. */\n-            switch (s->float_rounding_mode) {\n+            switch (get_float_rounding_mode(s)) {\n             case float_round_nearest_even:\n                 if (N > 64 && frac_lsb == 0) {\n                     inc = ((p->frac_hi & 1) ||\n@@ -568,7 +568,7 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig,\n \n         if (ab_mask == float_cmask_zero) {\n             /* 0 - 0 */\n-            a.sign = s->float_rounding_mode == float_round_down;\n+            a.sign = get_float_rounding_mode(s) == float_round_down;\n             return a;\n         }\n \n@@ -772,7 +772,7 @@ FloatPartsN partsN(muladd)(const FloatPartsN *a, const FloatPartsN *b,\n  return_sub_zero:\n     /* 0 - 0 == -0 for round_down, +0 otherwise. */\n     return (FloatPartsN){\n-        .sign = s->float_rounding_mode == float_round_down,\n+        .sign = get_float_rounding_mode(s) == float_round_down,\n         .cls = float_class_zero\n     };\n \ndiff --git a/tests/fp/wrap.c.inc b/tests/fp/wrap.c.inc\nindex 9ff884c140..a67b390e5a 100644\n--- a/tests/fp/wrap.c.inc\n+++ b/tests/fp/wrap.c.inc\n@@ -168,7 +168,7 @@ WRAP_SF_TO_128(qemu_f64_to_f128M, float64_to_float128, float64)\n     {                                                                   \\\n         type *ap = (type *)&a;                                          \\\n                                                                         \\\n-        qsf.float_rounding_mode = sf_rounding_to_qemu(round);           \\\n+        set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf);      \\\n         return func(*ap, &qsf);                                         \\\n     }\n \n@@ -328,7 +328,7 @@ WRAP_INT_TO_80(qemu_i64_to_extF80M, int64_to_floatx80, int64_t)\n         floatx80 a;                                                     \\\n                                                                         \\\n         a = soft_to_qemu80(*ap);                                        \\\n-        qsf.float_rounding_mode = sf_rounding_to_qemu(round);           \\\n+        set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf);      \\\n         return func(a, &qsf);                                           \\\n     }\n \n@@ -360,7 +360,7 @@ WRAP_80_TO_INT_MINMAG(qemu_extF80M_to_i64_r_minMag,\n         float128 a;                                                     \\\n                                                                         \\\n         a = soft_to_qemu128(*ap);                                       \\\n-        qsf.float_rounding_mode = sf_rounding_to_qemu(round);           \\\n+        set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf);      \\\n         return func(a, &qsf);                                           \\\n     }\n \n@@ -414,7 +414,7 @@ WRAP_INT_TO_128(qemu_i64_to_f128M, int64_to_float128, int64_t)\n         type *ap = (type *)&a;                                          \\\n         type ret;                                                       \\\n                                                                         \\\n-        qsf.float_rounding_mode = sf_rounding_to_qemu(round);           \\\n+        set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf);      \\\n         ret = func(*ap, &qsf);                                          \\\n         return *(type##_t *)&ret;                                       \\\n     }\n@@ -431,7 +431,7 @@ static void qemu_extF80M_roundToInt(const extFloat80_t *ap, uint_fast8_t round,\n     floatx80 ret;\n \n     a = soft_to_qemu80(*ap);\n-    qsf.float_rounding_mode = sf_rounding_to_qemu(round);\n+    set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf);\n     ret = floatx80_round_to_int(a, &qsf);\n     *res = qemu_to_soft80(ret);\n }\n@@ -443,7 +443,7 @@ static void qemu_f128M_roundToInt(const float128_t *ap, uint_fast8_t round,\n     float128 ret;\n \n     a = soft_to_qemu128(*ap);\n-    qsf.float_rounding_mode = sf_rounding_to_qemu(round);\n+    set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf);\n     ret = float128_round_to_int(a, &qsf);\n     *res = qemu_to_soft128(ret);\n }\n",
    "prefixes": [
        "05/18"
    ]
}