From patchwork Tue Apr 29 09:16:44 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Nevill X-Patchwork-Id: 29317 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ob0-f198.google.com (mail-ob0-f198.google.com [209.85.214.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id BA81B203F4 for ; Tue, 29 Apr 2014 09:16:48 +0000 (UTC) Received: by mail-ob0-f198.google.com with SMTP id wn1sf46800913obc.1 for ; Tue, 29 Apr 2014 02:16:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:message-id:subject:from:reply-to:to :cc:date:organization:mime-version:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-unsubscribe:content-type :content-transfer-encoding; bh=QGz+qs9m8G1IL2jgNobR4H1KS62yLIB7Pebadd0oTwU=; b=MIJE46ZOgPhvtkEbcNMpctROXNdOeZcpTU7t2JYHin9VlmeIpNYwggwSfE8GMQlPUm Sb+ly+Zbqi9sOgkBUh9WkwPCQyVkTpX/xnlBkTDXgmjmqNF3tY0Pq+mkuj+OWBLBEZNY /cNlwQ/jC02xpAlg2EQxgiVPuiegtOdZP0xKAko67MXvg9MZxWSNhYNyuQnOU3GiC/4Y tdQ3iKV4rCSBiJZ3xAOdkVwqq2KR5Z4tpPEDXYo5yyls836MTqFKhWdXvjUQBngYvqSO ywfmIZiX+nDWSVaUvMlfR5UXIBmJVkZh2z8w2tav1ftM9xKWij1QXgZkHMH5M7MSENFv bK9A== X-Gm-Message-State: ALoCoQlsJG85oCyW6j0GorIT6kKT62rCEomIumkru/7QVMaLMddvkcVuwS1eap09Mi99wTb8PhPx X-Received: by 10.182.213.37 with SMTP id np5mr15682710obc.36.1398763008207; Tue, 29 Apr 2014 02:16:48 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.85.40 with SMTP id m37ls10053qgd.18.gmail; Tue, 29 Apr 2014 02:16:48 -0700 (PDT) X-Received: by 10.52.126.107 with SMTP id mx11mr27771vdb.41.1398763008080; Tue, 29 Apr 2014 02:16:48 -0700 (PDT) Received: from mail-vc0-f182.google.com (mail-vc0-f182.google.com [209.85.220.182]) by mx.google.com with ESMTPS id xv9si4368676vcb.80.2014.04.29.02.16.48 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 29 Apr 2014 02:16:48 -0700 (PDT) Received-SPF: none (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) client-ip=209.85.220.182; Received: by mail-vc0-f182.google.com with SMTP id lf12so7554849vcb.27 for ; Tue, 29 Apr 2014 02:16:48 -0700 (PDT) X-Received: by 10.220.69.72 with SMTP id y8mr28435765vci.21.1398763007975; Tue, 29 Apr 2014 02:16:47 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp181386vcb; Tue, 29 Apr 2014 02:16:47 -0700 (PDT) X-Received: by 10.180.7.227 with SMTP id m3mr19164188wia.59.1398763006662; Tue, 29 Apr 2014 02:16:46 -0700 (PDT) Received: from mail-we0-f169.google.com (mail-we0-f169.google.com [74.125.82.169]) by mx.google.com with ESMTPS id f2si7940412wjn.128.2014.04.29.02.16.46 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 29 Apr 2014 02:16:46 -0700 (PDT) Received-SPF: none (google.com: edward.nevill@linaro.org does not designate permitted sender hosts) client-ip=74.125.82.169; Received: by mail-we0-f169.google.com with SMTP id u56so697587wes.28 for ; Tue, 29 Apr 2014 02:16:46 -0700 (PDT) X-Received: by 10.194.92.7 with SMTP id ci7mr23549708wjb.7.1398763005749; Tue, 29 Apr 2014 02:16:45 -0700 (PDT) Received: from [10.0.7.5] ([88.98.47.97]) by mx.google.com with ESMTPSA id fu10sm3760608wib.11.2014.04.29.02.16.44 for (version=SSLv3 cipher=RC4-SHA bits=128/128); Tue, 29 Apr 2014 02:16:45 -0700 (PDT) Message-ID: <1398763004.20174.7.camel@localhost.localdomain> Subject: RFR: Minor optimisation for divide by 2 From: Edward Nevill Reply-To: edward.nevill@linaro.org To: "aarch64-port-dev@openjdk.java.net" Cc: patches@linaro.org Date: Tue, 29 Apr 2014 10:16:44 +0100 Organization: Linaro X-Mailer: Evolution 3.8.5 (3.8.5-2.fc19) Mime-Version: 1.0 X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: edward.nevill@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Hi, C2 currently generates mov rdst, rsrc, asr #31 mov rdst, rdst, lsr #31 add rdst, rsrc, rdst mov rdst, rdst, asr #1 for divide by 2. The following patch reduces this to add rdst, rsrc, rsrc, lsr #31 mov rdst, rdst, asr #1 I know this is very minor, but it offends me:-) OK? Ed. --- CUT HERE --- # HG changeset patch # User Edward Nevill edward.nevill@linaro.org # Date 1398762402 -3600 # Tue Apr 29 10:06:42 2014 +0100 # Node ID 7f9ab7b86d7a690e04ffc6331c2b9519aae2a565 # Parent d9468835bc5160b7fac6709b0afbc751b2159fbb Minor optimisation for divide by 2 diff -r d9468835bc51 -r 7f9ab7b86d7a src/cpu/aarch64/vm/aarch64.ad --- a/src/cpu/aarch64/vm/aarch64.ad Thu Apr 10 06:50:43 2014 -0400 +++ b/src/cpu/aarch64/vm/aarch64.ad Tue Apr 29 10:06:42 2014 +0100 @@ -3356,6 +3356,16 @@ interface(CONST_INTER); %} +operand immI_31() +%{ + predicate(n->get_int() == 31); + match(ConI); + + op_cost(0); + format %{ %} + interface(CONST_INTER); +%} + operand immI_8() %{ predicate(n->get_int() == 8); @@ -7274,6 +7284,30 @@ ins_pipe(pipe_class_default); %} +instruct signExtract(iRegINoSp dst, iRegI src, immI_31 div1, immI_31 div2) %{ + match(Set dst (URShiftI (RShiftI src div1) div2)); + ins_cost(INSN_COST); + format %{ "lsrw $dst, $src, $div1" %} + ins_encode %{ + __ lsrw(as_Register($dst$$reg), as_Register($src$$reg), 31); + %} + ins_pipe(pipe_class_default); +%} + +instruct div2Round(iRegINoSp dst, iRegI src, immI_31 div1, immI_31 div2) %{ + match(Set dst (AddI src (URShiftI (RShiftI src div1) div2))); + ins_cost(INSN_COST); + format %{ "addw $dst, $src, $div1" %} + + ins_encode %{ + __ addw(as_Register($dst$$reg), + as_Register($src$$reg), + as_Register($src$$reg), + Assembler::LSR, 31); + %} + ins_pipe(pipe_class_default); +%} + // Long Divide instruct divL(iRegLNoSp dst, iRegL src1, iRegL src2) %{ --- CUT HERE ---