From nobody Wed Aug 26 11:49:33 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779297561746563.3976551222706; Wed, 20 May 2026 10:19:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ8-0001TR-JO; Wed, 20 May 2026 13:18:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wPkZ6-0001QI-5o for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:40 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ0-0001x4-TV for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:39 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-366375c4076so1991966a91.3 for ; Wed, 20 May 2026 10:18:34 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297513; x=1779902313; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+dIEeehv80CK8xO9ylejpJt2WMFMMHvjzFTzV0srVG0=; b=Nelbznqs6D8CT5xGHK+7YBj+EHzZEfglRKTpzkTsGqfze2OFCiq8SZ5mmNyj4MxSn+ zrMld+QXiAM87kop0n9t6iyORLXZDeJQ1cW6P4QPyWOZXBCRBD4p2OmUNBtfyrxWSkXp LiEzC5DTbTHhzmE2AtWVdZY0rNs/G679yKYXZlYeNerasohBjkiWjrx8Qs/JdEJW29ix 0r7jzO7j1txRhTqZGpuGwlE5hnb9d9OvSbZi/HShRbVYVrkxFpNdFddx8FcD0ZpuqkXS UtMLEkyVwL6DflsH5zqd1IjIo/az+BNo57zz+At6CvFrtMYM5l+76o4l60Vq+lLhXc5s AoTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297513; x=1779902313; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+dIEeehv80CK8xO9ylejpJt2WMFMMHvjzFTzV0srVG0=; b=KGypLz3VkwUyqy++ivk0cg9SRuLoHAtDqd6UgxhdwW9xB2ADFXiJMo2Wnx2y+epIpX NQeaSxOnT8sa4Dgi2S0RTQMNjfWhloheNa08koylMMgJm9QJMo+4HcgzAdvEwa57zYRs 23sWqmPakgMzQ3AwxbFVp3Tq2eS1e3jOMNAwuAPH8UQ6SGK9ZrjHb+RpScbrmZItf5mn nhwJgX6Ijm+bHhHi1f5F5ysg9hoYSBGlZwRdj8y/4vMq2jfr2o7OE5M+eDlx1vHlf4Ev a9olCR3pto8x32QkcMc7NXCkKPZNYESbMXFuMizDCZTgTd5VTRsMGdusfzSBBjd8VFfQ ZfAA== X-Gm-Message-State: AOJu0YwiTZPu/rQ30qeTjtRYTw/8PBPDw4BgWEaTXlTXUm7qpQ+7pVHA OMcE7NMj+I1K5j/jKux3WLSYZwwDQcDD+PV61IZxFiDPVuIZWASkgLVpGToABBjMo1ZhpDOz421 H1hzCoMc= X-Gm-Gg: Acq92OGHwe5/QpIrg/5KG0g5mPDBsHGLT57hcgzp+Oj0QSl6wQxQAhZZSmjAOHRlmVS 4xt+RaRjKCn5Rm07JjQjVH6ZpQknn/0lPtMsM1/OSJvfe4zMmfGtZ9DNkSzuxVicqwgpUXCPRIs Ga/ig2NLXNDLuQz37Dqgvwvkwu41pM8IjLG1PEFRJj4Y8IwTodRxEdzZUgZa9JKJNlGBaGM+gh8 ofUlhbWCOKSvWHWBOhifw2OiE8I8PmatLJW9uW5/gh0K2SbYi4alyzyot+wk/51B/DVnrczACzM AhTph84A68tllsRBdJjYzdF4siVT6jwp7MmshcgtqwWkd1ei+eMkojdZM2VFnq9Pp6WxluqyFVg 27+g6KyOG+49s5XspvoEMtvBV33elwKRib0jXB81zpao68PZ8NxRvIAE0Drb1okWBPGC/1oCV68 RAJietF8u8cDmm9qQOmAC+5cgo6xC8LTFMD0D81YM= X-Received: by 2002:a17:90b:4c49:b0:369:bddb:79bd with SMTP id 98e67ed59e1d1-369bddb8547mr13771020a91.25.1779297513151; Wed, 20 May 2026 10:18:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 15/30] fpu: Use of {get, set}_floatx80_rounding_precision everywhere Date: Wed, 20 May 2026 10:18:05 -0700 Message-ID: <20260520171820.848839-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1779297563015154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 10 +- target/i386/tcg/fpu_helper.c | 37 ++++--- target/m68k/softfloat.c | 208 ++++++++++++++++++----------------- tests/fp/fp-test.c | 2 +- 4 files changed, 130 insertions(+), 127 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index d99543cc60..d2a9f97089 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1515,7 +1515,7 @@ float128 float128_round_pack_canonical(FloatParts128 = *p, float_status *s) bool floatx80_unpack_canonical(FloatParts128 *p, floatx80 f, float_status = *s) { /* Ensure rounding precision is set before beginning. */ - switch (s->floatx80_rounding_precision) { + switch (get_floatx80_rounding_precision(s)) { case floatx80_precision_x: case floatx80_precision_d: case floatx80_precision_s: @@ -1550,14 +1550,14 @@ bool floatx80_unpack_canonical(FloatParts128 *p, fl= oatx80 f, float_status *s) =20 floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s) { - const FloatFmt *fmt =3D &floatx80_params[s->floatx80_rounding_precisio= n]; + const FloatFmt *fmt =3D &floatx80_params[get_floatx80_rounding_precisi= on(s)]; uint64_t frac; int exp; =20 switch (p->cls) { case float_class_normal: case float_class_denormal: - if (s->floatx80_rounding_precision =3D=3D floatx80_precision_x) { + if (get_floatx80_rounding_precision(s) =3D=3D floatx80_precision_x= ) { parts128_uncanon_normal(p, s, fmt, false); frac =3D p->frac_hi; exp =3D p->exp; @@ -2853,7 +2853,7 @@ floatx80 floatx80_round_to_int(floatx80 a, float_stat= us *status) } =20 p =3D parts128_round_to_int(&p, get_float_rounding_mode(status), 0, st= atus, - &floatx80_params[status->floatx80_rounding_p= recision]); + &floatx80_params[get_floatx80_rounding_preci= sion(status)]); return floatx80_round_pack_canonical(&p, status); } =20 @@ -4503,7 +4503,7 @@ floatx80 floatx80_sqrt(floatx80 a, float_status *s) if (!floatx80_unpack_canonical(&p, a, s)) { return floatx80_default_nan(s); } - parts128_sqrt(&p, s, &floatx80_params[s->floatx80_rounding_precision]); + parts128_sqrt(&p, s, &floatx80_params[get_floatx80_rounding_precision(= s)]); return floatx80_round_pack_canonical(&p, s); } =20 diff --git a/target/i386/tcg/fpu_helper.c b/target/i386/tcg/fpu_helper.c index 7b0b0dd520..978eb1411b 100644 --- a/target/i386/tcg/fpu_helper.c +++ b/target/i386/tcg/fpu_helper.c @@ -1185,9 +1185,9 @@ void helper_f2xm1(CPUX86State *env) uint64_t asig0, asig1, asig2, bsig0, bsig1; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); =20 /* Find the nearest multiple of 1/32 to the argument. */ tmp =3D floatx80_scalbn(ST0, 5, &env->fp_status); @@ -1290,7 +1290,7 @@ void helper_f2xm1(CPUX86State *env) &env->fp_status); } =20 - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } merge_exception_flags(env, old_flags); } @@ -1406,10 +1406,10 @@ void helper_fpatan(CPUX86State *env) * (and underflowing where appropriate). */ FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + get_floatx80_rounding_precision(&env->fp_status); + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); ST1 =3D floatx80_div(ST1, ST0, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); if (!floatx80_is_zero(ST1) && !(get_float_exception_flags(&env->fp_status) & float_flag_inexact)) { @@ -1485,9 +1485,10 @@ void helper_fpatan(CPUX86State *env) floatx80 x8; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_= status); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_sta= tus); - env->fp_status.floatx80_rounding_precision =3D floatx80_precis= ion_x; + set_floatx80_rounding_precision(floatx80_precision_x, + &env->fp_status); =20 if (arg0_exp =3D=3D 0) { normalizeFloatx80Subnormal(arg0_sig, &arg0_exp, &arg0_sig); @@ -1794,7 +1795,7 @@ void helper_fpatan(CPUX86State *env) } =20 set_float_rounding_mode(save_mode, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } /* This result is inexact. */ rsig1 |=3D 1; @@ -2123,9 +2124,9 @@ void helper_fyl2xp1(CPUX86State *env) uint64_t asig0, asig1, asig2; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); =20 helper_fyl2x_common(env, ST0, &aexp, &asig0, &asig1); /* @@ -2143,7 +2144,7 @@ void helper_fyl2xp1(CPUX86State *env) ST1 =3D normalizeRoundAndPackFloatx80(floatx80_precision_x, arg0_sign ^ arg1_sign, aexp, asig0, asig1, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } fpop(env); merge_exception_flags(env, old_flags); @@ -2226,9 +2227,9 @@ void helper_fyl2x(CPUX86State *env) floatx80 arg0_m1; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); =20 if (arg0_exp =3D=3D 0) { normalizeFloatx80Subnormal(arg0_sig, &arg0_exp, &arg0_sig); @@ -2290,7 +2291,7 @@ void helper_fyl2x(CPUX86State *env) asig0, asig1, &env->fp_sta= tus); } =20 - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } fpop(env); merge_exception_flags(env, old_flags); @@ -2368,14 +2369,14 @@ void helper_fscale(CPUX86State *env) } } else { int n; - FloatX80RoundPrec save =3D env->fp_status.floatx80_rounding_precis= ion; + FloatX80RoundPrec save =3D get_floatx80_rounding_precision(&env->f= p_status); int save_flags =3D get_float_exception_flags(&env->fp_status); set_float_exception_flags(0, &env->fp_status); n =3D floatx80_to_int32_round_to_zero(ST1, &env->fp_status); set_float_exception_flags(save_flags, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); ST0 =3D floatx80_scalbn(ST0, n, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save; + set_floatx80_rounding_precision(save, &env->fp_status); } merge_exception_flags(env, old_flags); } diff --git a/target/m68k/softfloat.c b/target/m68k/softfloat.c index 51706f6db8..f5d683bcc5 100644 --- a/target/m68k/softfloat.c +++ b/target/m68k/softfloat.c @@ -72,7 +72,8 @@ floatx80 floatx80_getman(floatx80 a, float_status *status) normalizeFloatx80Subnormal(aSig, &aExp, &aSig); } =20 - return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status), + aSign, 0x3FFF, aSig, 0, status); } =20 @@ -160,7 +161,7 @@ floatx80 floatx80_scale(floatx80 a, floatx80 b, float_s= tatus *status) =20 if (0x400F < bExp) { aExp =3D bSign ? -0x6001 : 0xE000; - return roundAndPackFloatx80(status->floatx80_rounding_precision, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status= ), aSign, aExp, aSig, 0, status); } =20 @@ -168,7 +169,7 @@ floatx80 floatx80_scale(floatx80 a, floatx80 b, float_s= tatus *status) bSig >>=3D shiftCount; aExp =3D bSign ? (aExp - bSig) : (aExp + bSig); =20 - return roundAndPackFloatx80(status->floatx80_rounding_precision, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status), aSign, aExp, aSig, 0, status); } =20 @@ -192,10 +193,11 @@ floatx80 floatx80_move(floatx80 a, float_status *stat= us) if (aSig =3D=3D 0) { return a; } - normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision, + normalizeRoundAndPackFloatx80(get_floatx80_rounding_precision(stat= us), aSign, aExp, aSig, 0, status); } - return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status), + aSign, aExp, aSig, 0, status); } =20 @@ -267,9 +269,9 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -337,7 +339,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) fp0 =3D floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U= ) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, klog2, status); =20 @@ -403,7 +405,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4= )]) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, saveu, status); =20 @@ -465,9 +467,9 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -524,7 +526,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) fp0 =3D floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U= ) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, klog2, status); =20 @@ -570,7 +572,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4= )]) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, saveu, status); =20 @@ -621,15 +623,15 @@ floatx80 floatx80_log10(floatx80 a, float_status *sta= tus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 fp0 =3D floatx80_logn(a, status); fp1 =3D packFloatx80(0, 0x3FFD, UINT64_C(0xDE5BD8A937287195)); /* INV_= L10 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L10 */ =20 @@ -680,13 +682,13 @@ floatx80 floatx80_log2(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 if (aSig =3D=3D one_sig) { /* X is 2^k */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D int32_to_floatx80(aExp - 0x3FFF, status); } else { @@ -694,7 +696,7 @@ floatx80 floatx80_log2(floatx80 a, float_status *status) fp1 =3D packFloatx80(0, 0x3FFF, UINT64_C(0xB8AA3B295C17F0BC)); /* = INV_L2 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L2 */ } @@ -740,9 +742,9 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 adjflag =3D 0; =20 @@ -818,7 +820,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) } =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, scale, status); =20 @@ -828,15 +830,13 @@ floatx80 floatx80_etox(floatx80 a, float_status *stat= us) } else { /* |X| >=3D 16380 log2 */ if (compact > 0x400CB27C) { /* |X| >=3D 16480 log2 */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); if (aSign) { - a =3D roundAndPackFloatx80( - status->floatx80_rounding_preci= sion, - 0, -0x1000, aSig, 0, status); + a =3D roundAndPackFloatx80(get_floatx80_rounding_preci= sion(status), + 0, -0x1000, aSig, 0, status); } else { - a =3D roundAndPackFloatx80( - status->floatx80_rounding_preci= sion, - 0, 0x8000, aSig, 0, status); + a =3D roundAndPackFloatx80(get_floatx80_rounding_preci= sion(status), + 0, 0x8000, aSig, 0, status); } float_raise(float_flag_inexact, status); =20 @@ -877,7 +877,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) } } else { /* |X| < 2^(-65) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(a, float32_to_floatx80(make_float32(0x3F800000), status), status); /* 1 + X */ @@ -923,9 +923,9 @@ floatx80 floatx80_twotox(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 fp0 =3D a; =20 @@ -935,18 +935,18 @@ floatx80 floatx80_twotox(floatx80 a, float_status *st= atus) /* |X| > 16480 or |X| < 2^(-70) */ if (compact > 0x3FFF8000) { /* |X| > 16480 */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 if (aSign) { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, -0x1000, aSig, 0, status); } else { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, 0x8000, aSig, 0, status); } } else { /* |X| < 2^(-70) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80( make_float32(0x3F800000), status), @@ -1028,7 +1028,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fact1, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, adjfact, status); =20 @@ -1073,9 +1073,9 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 fp0 =3D a; =20 @@ -1085,18 +1085,18 @@ floatx80 floatx80_tentox(floatx80 a, float_status *= status) /* |X| > 16480 LOG2/LOG10 or |X| < 2^(-70) */ if (compact > 0x3FFF8000) { /* |X| > 16480 */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 if (aSign) { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, -0x1000, aSig, 0, status); } else { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, 0x8000, aSig, 0, status); } } else { /* |X| < 2^(-70) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80( make_float32(0x3F800000), status), @@ -1183,7 +1183,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fact1, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, adjfact, status); =20 @@ -1228,9 +1228,9 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -1295,7 +1295,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) goto loop; } else { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_move(a, status); =20 @@ -1355,7 +1355,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) fp1 =3D packFloatx80(xSign, xExp, xSig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_div(fp0, fp1, status); =20 @@ -1393,7 +1393,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_div(fp0, fp1, status); =20 @@ -1439,9 +1439,9 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -1510,7 +1510,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) status); /* 1 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 /* SINTINY */ a =3D floatx80_move(a, status); @@ -1583,7 +1583,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, x, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80(posneg1, status), = status); =20 @@ -1633,7 +1633,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, x, status); =20 @@ -1679,9 +1679,9 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -1749,7 +1749,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) fp0 =3D float32_to_floatx80(make_float32(0x3F800000), status);= /* 1 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 /* COSTINY */ a =3D floatx80_sub(fp0, float32_to_floatx80( @@ -1823,7 +1823,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, x, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80(posneg1, status), = status); =20 @@ -1871,7 +1871,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, x, status); =20 @@ -1918,9 +1918,9 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) compact =3D floatx80_make_compact(aExp, aSig); =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 if (compact < 0x3FFB8000 || compact > 0x4002FFFF) { /* |X| >=3D 16 or |X| < 1/16 */ @@ -1930,7 +1930,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(aSign, 0x0001, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_sub(fp0, fp1, status); =20 @@ -1970,7 +1970,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(aSign, piby2_exp, pi_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp1, status); =20 @@ -1981,7 +1981,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) } else { /* |X| < 1/16 */ if (compact < 0x3FD78000) { /* |X| < 2^(-40) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_move(a, status); =20 @@ -2021,7 +2021,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp0 =3D floatx80_mul(fp0, fp1, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, xsave, status); =20 @@ -2070,7 +2070,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp0 =3D floatx80_add(fp0, fp1, status); /* ATAN(U) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp3, status); /* ATAN(X) */ =20 @@ -2123,9 +2123,9 @@ floatx80 floatx80_asin(floatx80 a, float_status *stat= us) } /* |X| < 1 */ =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 one =3D packFloatx80(0, one_exp, one_sig); fp0 =3D a; @@ -2137,7 +2137,7 @@ floatx80 floatx80_asin(floatx80 a, float_status *stat= us) fp0 =3D floatx80_div(fp0, fp1, status); /* X/SQRT((1+X)*(1-X)) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_atan(fp0, status); /* ATAN(X/SQRT((1+X)*(1-X)))= */ =20 @@ -2171,7 +2171,8 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) } if (aExp =3D=3D 0 && aSig =3D=3D 0) { float_raise(float_flag_inexact, status); - return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status= ), + 0, piby2_exp, pi_sig, 0, status); } =20 @@ -2193,9 +2194,9 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) } /* |X| < 1 */ =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 one =3D packFloatx80(0, one_exp, one_sig); fp0 =3D a; @@ -2207,7 +2208,7 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) fp0 =3D floatx80_atan(fp0, status); /* ATAN(SQRT((1-X)/(1+X))) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp0, status); /* 2 * ATAN(SQRT((1-X)/(1+X)= )) */ =20 @@ -2257,9 +2258,9 @@ floatx80 floatx80_atanh(floatx80 a, float_status *sta= tus) } /* |X| < 1 */ =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 one =3D packFloatx80(0, one_exp, one_sig); fp2 =3D packFloatx80(aSign, 0x3FFE, one_sig); /* SIGN(X) * (1/2) */ @@ -2271,7 +2272,7 @@ floatx80 floatx80_atanh(floatx80 a, float_status *sta= tus) fp0 =3D floatx80_lognp1(fp0, status); /* LOG1P(Z) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp2, status); /* ATANH(X) =3D SIGN(X) * (1/2) * LOG1P(Z) */ @@ -2316,9 +2317,9 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 if (aExp >=3D 0x3FFD) { /* |X| >=3D 1/4 */ compact =3D floatx80_make_compact(aExp, aSig); @@ -2411,7 +2412,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) sc =3D packFloatx80(0, m + 0x3FFF, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, sc, status); =20 @@ -2424,7 +2425,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) status); /* -1 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80( make_float32(0x00800000), status), @@ -2435,7 +2436,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) return a; } else { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 return floatx80_etox(a, status); } @@ -2496,7 +2497,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fp1, status); /* S*B1+Q */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, a, status); =20 @@ -2514,14 +2515,14 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *= status) fp0 =3D floatx80_add(fp0, sc, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, float64_to_floatx80( make_float64(0x3730000000000000), status), status); } else { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, sc, status); } @@ -2566,9 +2567,9 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -2577,7 +2578,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) if (compact < 0x3FFF8000) { /* TANHSM */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_move(a, status); =20 @@ -2594,7 +2595,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) sign ^=3D 0x80800000; /* -SIGN(X)*EPS */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80(make_float32(s= ign), status), status); @@ -2616,7 +2617,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) status); /* SIGN */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp1, fp0, status); =20 @@ -2639,7 +2640,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(vSign ^ aSign, vExp, vSig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_div(fp0, fp1, status); =20 @@ -2682,9 +2683,9 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -2692,9 +2693,9 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) /* SINHBIG */ if (compact > 0x400CB2B3) { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 - return roundAndPackFloatx80(status->floatx80_rounding_precisio= n, + return roundAndPackFloatx80(get_floatx80_rounding_precision(st= atus), aSign, 0x8000, aSig, 0, status); } else { fp0 =3D floatx80_abs(a); /* Y =3D |X| */ @@ -2708,7 +2709,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) fp2 =3D packFloatx80(aSign, 0x7FFB, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp2, status); =20 @@ -2728,7 +2729,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) fact =3D packFloat32(aSign, 0x7E, 0); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, float32_to_floatx80(fact, status), status); =20 @@ -2768,17 +2769,18 @@ floatx80 floatx80_cosh(floatx80 a, float_status *st= atus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 if (compact > 0x400CB167) { if (compact > 0x400CB2B3) { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; - return roundAndPackFloatx80(status->floatx80_rounding_precisio= n, 0, + set_floatx80_rounding_precision(user_rnd_prec, status); + return roundAndPackFloatx80(get_floatx80_rounding_precision(st= atus), + 0, 0x8000, one_sig, 0, status); } else { fp0 =3D packFloatx80(0, aExp, aSig); @@ -2792,7 +2794,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(0, 0x7FFB, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp1, status); =20 @@ -2810,7 +2812,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *stat= us) fp1 =3D floatx80_div(fp1, fp0, status); /* 1/(2*EXP(|X|)) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp1, status); =20 diff --git a/tests/fp/fp-test.c b/tests/fp/fp-test.c index fdb0cccf14..326a1201f3 100644 --- a/tests/fp/fp-test.c +++ b/tests/fp/fp-test.c @@ -996,7 +996,7 @@ void run_test(void) =20 verCases_roundingPrecision =3D 0; slow_extF80_roundingPrecision =3D prec80; - qsf.floatx80_rounding_precision =3D qsf_prec80; + set_floatx80_rounding_precision(qsf_prec80, &qsf); =20 if (attrs & FUNC_EFF_ROUNDINGPRECISION) { verCases_roundingPrecision =3D prec80; --=20 2.43.0