From patchwork Sun Mar 13 19:50:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 63773 Delivered-To: patch@linaro.org Received: by 10.112.199.169 with SMTP id jl9csp2134752lbc; Sun, 13 Mar 2016 12:50:45 -0700 (PDT) X-Received: by 10.98.75.212 with SMTP id d81mr24536384pfj.148.1457898645362; Sun, 13 Mar 2016 12:50:45 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q201si31933075pfq.39.2016.03.13.12.50.44; Sun, 13 Mar 2016 12:50:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dkim=pass header.i=@cavium-com.20150623.gappssmtp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752874AbcCMTug (ORCPT + 30 others); Sun, 13 Mar 2016 15:50:36 -0400 Received: from mail-pa0-f46.google.com ([209.85.220.46]:35465 "EHLO mail-pa0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751931AbcCMTu1 (ORCPT ); Sun, 13 Mar 2016 15:50:27 -0400 Received: by mail-pa0-f46.google.com with SMTP id td3so113408804pab.2 for ; Sun, 13 Mar 2016 12:50:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cavium-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Uhvl9IRPF7XGCnblQiSZ/8D9dhPt2d3VouelSC/ua9M=; b=OucSLi+ysjAnEWmRRjGDunLXU2sZgnxEb2yGEQFCnnD59TjPXbNZtN3o8mZ+v3q8Va /kMYw/yrs6yK/8DGCEWfddivZlIraY/vTIitpZPueOPK69BfIlbkwh0AatSOdDaJGNjL 35jPaG01VN+4FM42jDXykh8qrrsPAgzCoYR3nHMhFEtwud+9Uu0eSWiT03YkCXRBPNyX xxSlQUuIxj1yZvE+I2sVQKUN0uXsiTDf1sTjVtgL0ArX6vmhsDOOV3wtIMxuM4ucpboI klFhYsAfJGTirYTDPmU8Rzcjs6s3/Zno152yELu8Uu5WTIx7sSUiH4zVUPJJXaFxt1sG 4hDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Uhvl9IRPF7XGCnblQiSZ/8D9dhPt2d3VouelSC/ua9M=; b=D2uQry3bF+M+1ebSYYqf5YmSd1g2Hwgttj8XU87T9p7sT1FOfc6LeOWLcaQL94rvSl aQDWn3P+M6gDq1zgmcM5lKb1FezFjBRgxMcUVIfZTpw4qAimVP4t4wjkmDKYypw9X7QY m6w3zz4uqitDS8HfhCailh+JBAtCghzStfKtQHzUUtFJ8837vdSZ1Au3QEOEExL+hhEA o98q+CNtHV4bJNUGh4XQxlj9cdJ0dPsjTpmFgv/JYywBS+C96xOmDN/7KwWy/CdbXE3K aXPGMOOZii5p+457l53Duq9qdQymq0wjIydusT4p3C4CTN6stFTUHacgll9PzgAaFsK3 Y4VQ== X-Gm-Message-State: AD7BkJIE9nhRCzn1GG55Pc6b6J0NmQoc6L7zQdCvMhueO6/lyzY71OZ/bWmDv2lKFl6ljg== X-Received: by 10.67.21.167 with SMTP id hl7mr32086370pad.16.1457898626384; Sun, 13 Mar 2016 12:50:26 -0700 (PDT) Received: from localhost.localdomain ([64.2.3.194]) by smtp.gmail.com with ESMTPSA id 17sm26768994pfs.40.2016.03.13.12.50.25 (version=TLS1 cipher=AES128-SHA bits=128/128); Sun, 13 Mar 2016 12:50:25 -0700 (PDT) Received: from localhost.localdomain (apinskidesktop [127.0.0.1]) by localhost.localdomain (8.14.3/8.14.3/Debian-9.4) with ESMTP id u2DJoOvm001923 (version=TLSv1/SSLv3 cipher=DHE-DSS-AES256-SHA bits=256 verify=NO); Sun, 13 Mar 2016 12:50:24 -0700 Received: (from apinski@localhost) by localhost.localdomain (8.14.3/8.14.3/Submit) id u2DJoOta001922; Sun, 13 Mar 2016 12:50:24 -0700 From: Andrew Pinski To: pinskia@gmail.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Andrew Pinski Subject: [PATCH 1/2] ARM64:VDSO: Improve gettimeofday, don't use udiv Date: Sun, 13 Mar 2016 12:50:19 -0700 Message-Id: <1457898620-1867-2-git-send-email-apinski@cavium.com> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1457898620-1867-1-git-send-email-apinski@cavium.com> References: <1457898620-1867-1-git-send-email-apinski@cavium.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On many cores, udiv with a large value is slow, expand instead the division out to be what GCC would have generated for the divide by 1000. On ThunderX, the speeds up gettimeofday by 5%. Signed-off-by: Andrew Pinski --- arch/arm64/kernel/vdso/gettimeofday.S | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-) -- 1.7.2.5 diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S index efa79e8..e5caef9 100644 --- a/arch/arm64/kernel/vdso/gettimeofday.S +++ b/arch/arm64/kernel/vdso/gettimeofday.S @@ -64,10 +64,22 @@ ENTRY(__kernel_gettimeofday) bl __do_get_tspec seqcnt_check w9, 1b - /* Convert ns to us. */ - mov x13, #1000 - lsl x13, x13, x12 - udiv x11, x11, x13 + /* Undo the shift. */ + lsr x11, x11, x12 + + /* Convert ns to us (division by 1000 by using multiply high). + * This is how GCC converts the division by 1000 into. + * This is faster than divide on most cores. + */ + mov x13, 63439 + movk x13, 0xe353, lsl 16 + lsr x11, x11, 3 + movk x13, 0x9ba5, lsl 32 + movk x13, 0x20c4, lsl 48 + /* x13 = 0x20c49ba5e353f7cf */ + umulh x11, x11, x13 + lsr x11, x11, 4 + stp x10, x11, [x0, #TVAL_TV_SEC] 2: /* If tz is NULL, return 0. */