From patchwork Fri Mar 11 18:12:24 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 505 Return-Path: Delivered-To: unknown Received: from imap.gmail.com (74.125.159.109) by localhost6.localdomain6 with IMAP4-SSL; 08 Jun 2011 14:43:12 -0000 Delivered-To: patches@linaro.org Received: by 10.224.67.207 with SMTP id s15cs69384qai; Fri, 11 Mar 2011 10:12:30 -0800 (PST) Received: by 10.216.56.65 with SMTP id l43mr7094001wec.113.1299867149264; Fri, 11 Mar 2011 10:12:29 -0800 (PST) Received: from mnementh.archaic.org.uk (mnementh.archaic.org.uk [81.2.115.146]) by mx.google.com with ESMTPS id s28si8697552weq.184.2011.03.11.10.12.28 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 11 Mar 2011 10:12:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of pm215@archaic.org.uk designates 81.2.115.146 as permitted sender) client-ip=81.2.115.146; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of pm215@archaic.org.uk designates 81.2.115.146 as permitted sender) smtp.mail=pm215@archaic.org.uk Received: from pm215 by mnementh.archaic.org.uk with local (Exim 4.72) (envelope-from ) id 1Py6p9-0005kE-2B; Fri, 11 Mar 2011 18:12:27 +0000 From: Peter Maydell To: qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 5/7] target-arm: Correct ABD's handling of negative zeroes Date: Fri, 11 Mar 2011 18:12:24 +0000 Message-Id: <1299867146-22049-6-git-send-email-peter.maydell@linaro.org> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: <1299867146-22049-1-git-send-email-peter.maydell@linaro.org> References: <1299867146-22049-1-git-send-email-peter.maydell@linaro.org> Implement ABD by taking the absolute value of the difference of the operands (as the ARM ARM specifies) rather than by flipping the order of the operands to the subtract based on the results of a comparison. The latter approch gives the wrong answers for some edge cases like negative zero. Signed-off-by: Peter Maydell --- target-arm/neon_helper.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/target-arm/neon_helper.c b/target-arm/neon_helper.c index 8eb4cef..1905545 100644 --- a/target-arm/neon_helper.c +++ b/target-arm/neon_helper.c @@ -1788,9 +1788,7 @@ uint32_t HELPER(neon_abd_f32)(CPUState *env, uint32_t a, uint32_t b) { float32 f0 = make_float32(a); float32 f1 = make_float32(b); - return float32_val((float32_compare_quiet(f0, f1, NFS) == 1) - ? float32_sub(f0, f1, NFS) - : float32_sub(f1, f0, NFS)); + return float32_val(float32_abs(float32_sub(f0, f1, NFS))); } uint32_t HELPER(neon_add_f32)(CPUState *env, uint32_t a, uint32_t b)