From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38401) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aaovq-0002FN-GB for qemu-devel@nongnu.org; Tue, 01 Mar 2016 13:22:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aaovm-0003F8-8T for qemu-devel@nongnu.org; Tue, 01 Mar 2016 13:22:02 -0500 Received: from mail-qg0-x244.google.com ([2607:f8b0:400d:c04::244]:35902) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aaovm-0003F3-3K for qemu-devel@nongnu.org; Tue, 01 Mar 2016 13:21:58 -0500 Received: by mail-qg0-x244.google.com with SMTP id 14so13087057qgg.3 for ; Tue, 01 Mar 2016 10:21:58 -0800 (PST) Sender: Richard Henderson References: <1456849468-30217-1-git-send-email-kbastian@mail.uni-paderborn.de> <1456849468-30217-7-git-send-email-kbastian@mail.uni-paderborn.de> From: Richard Henderson Message-ID: <56D5DDC2.4000801@twiddle.net> Date: Tue, 1 Mar 2016 10:21:54 -0800 MIME-Version: 1.0 In-Reply-To: <1456849468-30217-7-git-send-email-kbastian@mail.uni-paderborn.de> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 6/7] target-tricore: Add cmp.f instruction List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Bastian Koppelmann , qemu-devel@nongnu.org On 03/01/2016 08:24 AM, Bastian Koppelmann wrote: > Signed-off-by: Bastian Koppelmann > --- > target-tricore/fpu_helper.c | 29 +++++++++++++++++++++++++++++ > target-tricore/helper.h | 1 + > target-tricore/translate.c | 3 +++ > 3 files changed, 33 insertions(+) > > diff --git a/target-tricore/fpu_helper.c b/target-tricore/fpu_helper.c > index ee8b687..ceda415 100644 > --- a/target-tricore/fpu_helper.c > +++ b/target-tricore/fpu_helper.c > @@ -171,3 +171,32 @@ uint32_t helper_fdiv(CPUTriCoreState *env, uint32_t r1, uint32_t r2) > f_update_psw_flags(env, true); > return (uint32_t)f_result; > } > + > +uint32_t helper_fcmp(CPUTriCoreState *env, uint32_t r1, uint32_t r2) > +{ > + uint32_t result = 0; > + uint32_t lt, eq, uo; > + float32 arg1 = make_float32(r1); > + float32 arg2 = make_float32(r2); > + > + set_flush_inputs_to_zero(0, &env->fp_status); > + > + lt = float32_lt_quiet(arg1, arg2, &env->fp_status); > + eq = float32_eq_quiet(arg1, arg2, &env->fp_status); > + uo = float32_unordered(arg1, arg2, &env->fp_status); Do it in one step with float32_compare. You don't want _quiet; see below re psw_flags. > + env->FPU_FS = 0; > + if (float32_is_signaling_nan(arg1) || float32_is_signaling_nan(arg2)) { > + env->FPU_FI = (1 << 31); > + env->FPU_FS = 1; > + } > + > + return result; If you return flush_inputs_to_zero to 1 here, you don't have to zero it on all other fp operations. Why aren't you using the same f_update_psw_flags function? The only bit that compare can set is invalid anyway. r~