Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp384874pxj; Thu, 20 May 2021 11:33:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyx34HzJdhk4Kll/9ysIf6IHHyrURwCDA+ddhsu/mqmqk1XKJWuL2WGdCrX+NXm5hk5E3Yj X-Received: by 2002:a17:906:454b:: with SMTP id s11mr5988253ejq.3.1621535599873; Thu, 20 May 2021 11:33:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621535599; cv=none; d=google.com; s=arc-20160816; b=gWfXgqbA0gXLkWK4H7KIY9k5ExHrBO/dRL6zulqqQA8glMK76HadCKrlaRcIGpBXlk V10Iu3frn5licwkQ3E7AtuNeYOUgO+qeVU4bzHfDFkI26n3Dlf6+6vd6aPkP9xnxvfn9 AOZM+PQBk/FR/xD7xC6DB3Rc/29g4MUWQ9y7cc+nUsmGDV8Qa9PDnnYAzJywMpz2O/iz qWvmRdULt7BpwtEnvmFHyQmRe+GyB7W/RAgISe5HRQwfar+YtlxAOKmB3/LV7nSBjyeD XuFk0u2s1R5XtcVhT8TzUzJUkBSBc9B/Ka69Jc6PvIYKlfMsXaZxrLURvXtktQQTj75s +WHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=l3zXB7z1H35nnTT54pwXWfkMGkBdwPmSKjNio+Xf6No=; b=skpt3Cp1GLlNXMGU6ywVcYjiRG5l9YOoAxefa6hzymgJ8tsNcfFiAP72ZoPZL+ELA2 +xesJqekKcsBGrH76OVT9wp0NUmw6uOiLLuBOMndbJpFYmUyob6fHfTgt4CEWuNGmtgO Q59X3pc0PWXY1RiAvwtDgUPFRgjo82aPxiLdP81at5PfYsThPFDut8TrtpHqe5Ph/kmf aODj+I53ePzdjsIiqeiGeBhlY1aASRIw0hPOj6epNVihraDdQ6Nu4TngiuGqgakxXTLa QhK2HNQGarrvGsdg+y5rCbTedpNBVhMUiWdR59D+l1SCPvi6zIh4Z3Vyb/RPHttu1GrR RB6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=b6mwFzHk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ka15si3393439ejc.148.2021.05.20.11.32.56; Thu, 20 May 2021 11:33:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=b6mwFzHk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236026AbhETKVl (ORCPT + 99 others); Thu, 20 May 2021 06:21:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:42436 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235042AbhETKLL (ORCPT ); Thu, 20 May 2021 06:11:11 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8A0D86143B; Thu, 20 May 2021 09:43:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621503805; bh=7oYuLHNwzc9jy8+tx7Q4sSHTjfKDMdJFbkcaYmc36R8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b6mwFzHk7+60FQoRlOu+/Hf1ct5YN6cqN7Rq+O7DXmM3x+oyObeuEnMrKK8XXevdF L8VID+JyQSXux0+nTcUMAd7XGx7CzRUOvUja1wHM9+E1M9r/vrBV91Au/XMFIjX0j5 LAF2mdDQHqcDd1QMP63ZGJQQugnbzR2ganh7BpW4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Maciej W. Rozycki" , Thomas Bogendoerfer Subject: [PATCH 4.19 387/425] MIPS: Avoid DIVU in `__div64_32 is result would be zero Date: Thu, 20 May 2021 11:22:36 +0200 Message-Id: <20210520092144.122187111@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210520092131.308959589@linuxfoundation.org> References: <20210520092131.308959589@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Maciej W. Rozycki commit c1d337d45ec0a802299688e17d568c4e3a585895 upstream. We already check the high part of the divident against zero to avoid the costly DIVU instruction in that case, needed to reduce the high part of the divident, so we may well check against the divisor instead and set the high part of the quotient to zero right away. We need to treat the high part the divident in that case though as the remainder that would be calculated by the DIVU instruction we avoided. This has passed correctness verification with test_div64 and reduced the module's average execution time down to 1.0445s and 0.2619s from 1.0668s and 0.2629s respectively for an R3400 CPU @40MHz and a 5Kc CPU @160MHz. Signed-off-by: Maciej W. Rozycki Signed-off-by: Thomas Bogendoerfer Signed-off-by: Greg Kroah-Hartman --- arch/mips/include/asm/div64.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --- a/arch/mips/include/asm/div64.h +++ b/arch/mips/include/asm/div64.h @@ -68,9 +68,11 @@ \ __high = __div >> 32; \ __low = __div; \ - __upper = __high; \ \ - if (__high) { \ + if (__high < __radix) { \ + __upper = __high; \ + __high = 0; \ + } else { \ __asm__("divu $0, %z1, %z2" \ : "=x" (__modquot) \ : "Jr" (__high), "Jr" (__radix)); \