Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964792AbbKSQgS (ORCPT ); Thu, 19 Nov 2015 11:36:18 -0500 Received: from unicorn.mansr.com ([81.2.72.234]:50885 "EHLO unicorn.mansr.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934177AbbKSQgQ convert rfc822-to-8bit (ORCPT ); Thu, 19 Nov 2015 11:36:16 -0500 From: =?iso-8859-1?Q?M=E5ns_Rullg=E5rd?= To: Nicolas Pitre Cc: Alexey Brodkin , Arnd Bergmann , rmk+kernel@arm.linux.org.uk, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 5/5] ARM: asm/div64.h: adjust to generic codde References: <1446503610-6942-1-git-send-email-nicolas.pitre@linaro.org> <1446503610-6942-6-git-send-email-nicolas.pitre@linaro.org> Date: Thu, 19 Nov 2015 16:36:15 +0000 In-Reply-To: <1446503610-6942-6-git-send-email-nicolas.pitre@linaro.org> (Nicolas Pitre's message of "Mon, 02 Nov 2015 17:33:30 -0500") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1747 Lines: 66 Nicolas Pitre writes: > +static inline uint64_t __arch_xprod_64(uint64_t m, uint64_t n, bool bias) > +{ > + unsigned long long res; > + unsigned int tmp = 0; > + > + if (!bias) { > + asm ( "umull %Q0, %R0, %Q1, %Q2\n\t" > + "mov %Q0, #0" > + : "=&r" (res) > + : "r" (m), "r" (n) > + : "cc"); > + } else if (!(m & ((1ULL << 63) | (1ULL << 31)))) { > + res = m; > + asm ( "umlal %Q0, %R0, %Q1, %Q2\n\t" > + "mov %Q0, #0" > + : "+&r" (res) > + : "r" (m), "r" (n) > + : "cc"); > + } else { > + asm ( "umull %Q0, %R0, %Q2, %Q3\n\t" > + "cmn %Q0, %Q2\n\t" > + "adcs %R0, %R0, %R2\n\t" > + "adc %Q0, %1, #0" > + : "=&r" (res), "+&r" (tmp) > + : "r" (m), "r" (n) Why is tmp using a +r constraint here? The register is not written, so using an input-only operand could/should result in better code. That is also what the old code did. > + : "cc"); > + } > + > + if (!(m & ((1ULL << 63) | (1ULL << 31)))) { > + asm ( "umlal %R0, %Q0, %R1, %Q2\n\t" > + "umlal %R0, %Q0, %Q1, %R2\n\t" > + "mov %R0, #0\n\t" > + "umlal %Q0, %R0, %R1, %R2" > + : "+&r" (res) > + : "r" (m), "r" (n) > + : "cc"); > + } else { > + asm ( "umlal %R0, %Q0, %R2, %Q3\n\t" > + "umlal %R0, %1, %Q2, %R3\n\t" > + "mov %R0, #0\n\t" > + "adds %Q0, %1, %Q0\n\t" > + "adc %R0, %R0, #0\n\t" > + "umlal %Q0, %R0, %R2, %R3" > + : "+&r" (res), "+&r" (tmp) > + : "r" (m), "r" (n) > + : "cc"); > + } > + > + return res; > +} -- M?ns Rullg?rd mans@mansr.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/