From patchwork Mon Mar 31 21:03:55 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Musta X-Patchwork-Id: 335587 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 95EB11400D2 for ; Tue, 1 Apr 2014 08:05:32 +1100 (EST) Received: from localhost ([::1]:51317 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUjOc-0004Wf-8S for incoming@patchwork.ozlabs.org; Mon, 31 Mar 2014 17:05:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48973) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUjNg-0004BS-Kq for qemu-devel@nongnu.org; Mon, 31 Mar 2014 17:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUjNX-0003hQ-7R for qemu-devel@nongnu.org; Mon, 31 Mar 2014 17:04:32 -0400 Received: from mail-qg0-x22a.google.com ([2607:f8b0:400d:c04::22a]:53030) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUjNX-0003hM-2p; Mon, 31 Mar 2014 17:04:23 -0400 Received: by mail-qg0-f42.google.com with SMTP id q107so8172582qgd.29 for ; Mon, 31 Mar 2014 14:04:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=BGq2HEXUpNHItmCu2iLpyuW8B4v0syQkMuVZoTW7CH4=; b=aYLeA7wE9Y0RfQgymqcqEGImh5KlTyYdyd1tc3dePm3zdO/LmGievjrnxGYzZ2lx86 cjvHxwB0kcTo4wwbtqp4SHHWLTYy3rDxTlaUCTx38RFIiCfNQuiyfBYFVkNxSAVx1c6b A0DAVYDo1okZdcRRXwnnNy0VSiDjZf2tqwxFGWaJB6RKoZRXLSxsh7Ig+rrJjwibein2 hdZoOhx7mPgxQkOQjjsSJZJUPH2MIjbk6DQeHN9DzFBvruRZIIrBnUXZR3L8n3jTfgny +4osfwqbOt0wFhhgmySg5+K4AcVwyP7hlwy+NWJo8nqNXNC8/qj7GS21hh/kK8vfG/Rn wUEA== X-Received: by 10.229.116.193 with SMTP id n1mr30746587qcq.10.1396299862625; Mon, 31 Mar 2014 14:04:22 -0700 (PDT) Received: from tmusta-sc.rchland.ibm.com (rchp4.rochester.ibm.com. [129.42.161.36]) by mx.google.com with ESMTPSA id w67sm14626836qge.12.2014.03.31.14.04.21 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 31 Mar 2014 14:04:22 -0700 (PDT) From: Tom Musta To: qemu-devel@nongnu.org Date: Mon, 31 Mar 2014 16:03:55 -0500 Message-Id: <1396299843-7313-2-git-send-email-tommusta@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1396299843-7313-1-git-send-email-tommusta@gmail.com> References: <1396299843-7313-1-git-send-email-tommusta@gmail.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c04::22a Cc: Tom Musta , qemu-ppc@nongnu.org Subject: [Qemu-devel] [V2 PATCH 1/9] softfloat: Introduce float32_to_uint64_round_to_zero X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This change adds the float32_to_uint64_round_to_zero function to the softfloat library. This function fills out the complement of float32 to INT round-to-zero conversion rountines, where INT is {int32_t, uint32_t, int64_t, uint64_t}. This contribution can be licensed under either the softfloat-2a or -2b license. Signed-off-by: Tom Musta Tested-by: Tom Musta Reviewed-by: Peter Maydell --- V2: Simplified code per Peter Maydell's review. fpu/softfloat.c | 20 ++++++++++++++++++++ include/fpu/softfloat.h | 1 + 2 files changed, 21 insertions(+), 0 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 5f02c16..e00a6fb 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1628,6 +1628,26 @@ uint64 float32_to_uint64(float32 a STATUS_PARAM) /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point value +| `a' to the 64-bit unsigned integer format. The conversion is +| performed according to the IEC/IEEE Standard for Binary Floating-Point +| Arithmetic, except that the conversion is always rounded toward zero. If +| `a' is a NaN, the largest unsigned integer is returned. Otherwise, if the +| conversion overflows, the largest unsigned integer is returned. If the +| 'a' is negative, the result is rounded and zero is returned; values that do +| not round to zero will raise the inexact flag. +*----------------------------------------------------------------------------*/ + +uint64 float32_to_uint64_round_to_zero(float32 a STATUS_PARAM) +{ + signed char current_rounding_mode = STATUS(float_rounding_mode); + set_float_rounding_mode(float_round_to_zero STATUS_VAR); + int64_t v = float32_to_uint64(a STATUS_VAR); + set_float_rounding_mode(current_rounding_mode STATUS_VAR); + return v; +} + +/*---------------------------------------------------------------------------- +| Returns the result of converting the single-precision floating-point value | `a' to the 64-bit two's complement integer format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic, except that the conversion is always rounded toward zero. If diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index db878c1..4b3090c 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -342,6 +342,7 @@ uint32 float32_to_uint32( float32 STATUS_PARAM ); uint32 float32_to_uint32_round_to_zero( float32 STATUS_PARAM ); int64 float32_to_int64( float32 STATUS_PARAM ); uint64 float32_to_uint64(float32 STATUS_PARAM); +uint64 float32_to_uint64_round_to_zero(float32 STATUS_PARAM); int64 float32_to_int64_round_to_zero( float32 STATUS_PARAM ); float64 float32_to_float64( float32 STATUS_PARAM ); floatx80 float32_to_floatx80( float32 STATUS_PARAM );