From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33645) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aqjF3-0001MW-3Q for qemu-devel@nongnu.org; Thu, 14 Apr 2016 11:31:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aqjEy-0003O0-Uk for qemu-devel@nongnu.org; Thu, 14 Apr 2016 11:31:37 -0400 Message-ID: <570FB7C7.7090404@imgtec.com> Date: Thu, 14 Apr 2016 16:31:19 +0100 From: Leon Alrae MIME-Version: 1.0 References: <1460465891-6142-1-git-send-email-aleksandar.markovic@rt-rk.com> <1460465891-6142-2-git-send-email-aleksandar.markovic@rt-rk.com> In-Reply-To: <1460465891-6142-2-git-send-email-aleksandar.markovic@rt-rk.com> Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4 1/9] softfloat: Implement run-time-configurable meaning of signaling NaN bit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Aleksandar Markovic , qemu-devel@nongnu.org Cc: proljc@gmail.com, kbastian@mail.uni-paderborn.de, mark.cave-ayland@ilande.co.uk, agraf@suse.de, blauwirbel@gmail.com, jcmvbkbc@gmail.com, aleksandar.markovic@imgtec.com, qemu-arm@nongnu.org, qemu-ppc@nongnu.org, petar.jovanovic@imgtec.com, pbonzini@redhat.com, miodrag.dinic@imgtec.com, edgar.iglesias@gmail.com, gxt@mprc.pku.edu.cn, afaerber@suse.de, aurelien@aurel32.net, rth@twiddle.net, maciej.rozycki@imgtec.com On 12/04/2016 13:58, Aleksandar Markovic wrote: > @@ -3200,11 +3200,17 @@ FLOAT_RINT(rint_d, 64) > #define FLOAT_CLASS_POSITIVE_ZERO 0x200 > > #define FLOAT_CLASS(name, bits) \ > -uint ## bits ## _t helper_float_ ## name (uint ## bits ## _t arg) \ > +uint ## bits ## _t helper_float_ ## name (CPUMIPSState *env, \ > + uint ## bits ## _t arg, uint32_t is_msa) \ > { \ > - if (float ## bits ## _is_signaling_nan(arg)) { \ > + float_status* fst; \ > + \ > + fst = (is_msa == 1) ? \ > + &env->active_tc.msa_fp_status : &env->active_fpu.fp_status; \ > + \ > + if (float ## bits ## _is_signaling_nan(arg, fst)) { \ > return FLOAT_CLASS_SIGNALING_NAN; \ > - } else if (float ## bits ## _is_quiet_nan(arg)) { \ > + } else if (float ## bits ## _is_quiet_nan(arg, fst)) { \ > return FLOAT_CLASS_QUIET_NAN; \ > } else if (float ## bits ## _is_neg(arg)) { \ > if (float ## bits ## _is_infinity(arg)) { \ Let's make it a common function which takes float_status passed from FPU and MSA helpers and avoid is_msa: #define FLOAT_CLASS(name, bits) \ -uint ## bits ## _t helper_float_ ## name (uint ## bits ## _t arg) \ +uint ## bits ## _t float_ ## name (uint ## bits ## _t arg, \ + float_status *fst) \ { \ - if (float ## bits ## _is_signaling_nan(arg)) { \ + if (float ## bits ## _is_signaling_nan(arg, fst)) { \ return FLOAT_CLASS_SIGNALING_NAN; \ - } else if (float ## bits ## _is_quiet_nan(arg)) { \ + } else if (float ## bits ## _is_quiet_nan(arg, fst)) { \ return FLOAT_CLASS_QUIET_NAN; \ } else if (float ## bits ## _is_neg(arg)) { \ if (float ## bits ## _is_infinity(arg)) { \ @@ -3227,6 +3228,12 @@ uint ## bits ## _t helper_float_ ## name (uint ## bits ## _t arg) \ return FLOAT_CLASS_POSITIVE_NORMAL; \ } \ } \ +} \ + \ +uint ## bits ## _t helper_float_ ## name (CPUMIPSState *env, \ + uint ## bits ## _t arg) \ +{ \ + return float_ ## name(arg, &env->active_fpu.fp_status); \ } FLOAT_CLASS(class_s, 32) And in MSA: + float_status *status = &env->active_tc.msa_fp_status; if (df == DF_WORD) { - pwd->w[0] = helper_float_class_s(pws->w[0]); - pwd->w[1] = helper_float_class_s(pws->w[1]); - pwd->w[2] = helper_float_class_s(pws->w[2]); - pwd->w[3] = helper_float_class_s(pws->w[3]); + pwd->w[0] = float_class_s(pws->w[0], status); + pwd->w[1] = float_class_s(pws->w[1], status); + pwd->w[2] = float_class_s(pws->w[2], status); + pwd->w[3] = float_class_s(pws->w[3], status); } else { - pwd->d[0] = helper_float_class_d(pws->d[0]); - pwd->d[1] = helper_float_class_d(pws->d[1]); + pwd->d[0] = float_class_d(pws->d[0], status); + pwd->d[1] = float_class_d(pws->d[1], status); } Thanks, Leon