Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp598891pxj; Tue, 18 May 2021 09:59:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw0r/qtjOfq+MkBxCWsOGlkbttNbovlfazypESrL2fzA5k7AKlNhb5tzBihb51otMwasUZ6 X-Received: by 2002:a17:907:2148:: with SMTP id rk8mr7132156ejb.270.1621357176684; Tue, 18 May 2021 09:59:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621357176; cv=none; d=google.com; s=arc-20160816; b=FMdGKDK0w+XJIexyHbFvX+69FFtCL7uRJyySxnqMQ8G5qzJhsQvyE5GKnrbzJSk3as sSsJxNgYg8BqE3Oc6m6+5fFPDRAfOpqjmu9hmgzfJb4JeRtibAgmU6AxIV+9nTXNlR5b htTln6NaQgfV/h4lyoHLg64zQVWDdno79amVuCJvU8Ge2h/BddkjsVkitYNnK8ZLzAci g+bMqDJDDBjbUz6IIRnKSsFMn84bUNvVNxyysA6H1+Mx94NFdT3Wx7HOkLC1EL1eqe52 bPnOkRBY6/fiBfzkfVcxQcTahdfe0aoPdaaX1ofdS8+t+UJHWuikNnZbBNWWsHavGsNk Jadw== 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=wtR0OAHmE819BAl5JKlhqKSTUBkwAKhcNIqZR2ArU+myrRFIbhSQkaKlKgC+dnTFDV S2YvYz5YgoFRjq4cUE1u5pgnmhvqB8AI4SPB32uZApYrieA2fwfYqXMt4FWsKqc9+uVr IeCWUqU5Eq5imDK0zlLlg2SOBLaK1+2WMXiVvebpnMJ+DZrAQQwneHc5Gv9YTXIFPxcZ kPxWPfZ/5Po0EMGUkHw0PllwUcEEaK5yE1T0oQYhqqt00CZn9nsjm6VP9R80iphHutlz srYiM7r4woLR5FA0cZscheiCkSTYF0x7XPUM6eU20Dlv/TGW+nkLm0h0vNpzXfUfPGGk 0GZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=w06DL+ey; 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 t21si17816135edd.145.2021.05.18.09.59.07; Tue, 18 May 2021 09:59:36 -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=w06DL+ey; 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 S1346516AbhEQQGG (ORCPT + 99 others); Mon, 17 May 2021 12:06:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:35552 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344603AbhEQPpE (ORCPT ); Mon, 17 May 2021 11:45:04 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4A79661D29; Mon, 17 May 2021 14:43:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621262609; bh=7oYuLHNwzc9jy8+tx7Q4sSHTjfKDMdJFbkcaYmc36R8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=w06DL+eyi+l3tC9oY8VR4OFzWaavQ26e51h7NhyaBxu1G0mq55xLA2bgniBorBskQ L0RD42WN8ySkfzf4E5IgT6QtP9yAbgf/KACp7Vvpmz/TdXeaG9sX8e05xORS0gdsHA 0uxyDej+GEw+7Kx3aRbc7U4goQd7gkvKR4OM8OHQ= 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 5.11 305/329] MIPS: Avoid DIVU in `__div64_32 is result would be zero Date: Mon, 17 May 2021 16:03:36 +0200 Message-Id: <20210517140312.406184162@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140302.043055203@linuxfoundation.org> References: <20210517140302.043055203@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)); \