linux-mips
[Top] [All Lists]

Re: [PATCH v99,11/13] MIPS: microMIPS: Optimise 'strncpy' core library f

To: "Steven J. Hill" <sjhill@mips.com>
Subject: Re: [PATCH v99,11/13] MIPS: microMIPS: Optimise 'strncpy' core library function.
From: David Daney <ddaney.cavm@gmail.com>
Date: Tue, 07 May 2013 16:01:17 -0700
Cc: linux-mips@linux-mips.org, ralf@linux-mips.org
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=mXQ29p89LyumZwEtdEJCOozXT6zzKjBgpetL+oH+c7c=; b=VSU8T4vVR8Es1DOifRgawYv6Bq7uqsh0pYcZwYqFRcHBLwki2ARlpJnLn4ajMLC2Yd 2XM7/shFcvzAv3X66ULni08VHUXqa3SpjNFTpq1X7H6B4bTAeEC/stoyQJcRHKrh/SQc RS1R18paDSxMa8bQ2B/hzalG6AXaCmFvuXcnZscOfDs5T3upu6CBuWP9+p2g4l3IILFa RRi8hKBhtigWiciLUIPhbz+1l/+TA/+2C3xqukJv0yJvITlEc7BKF69CzHXu8nOu9AL6 oH86zCR+X/RU+/7D7H06GTfZQmlVtYeO0nrHrjUK5WvUW6CRwvGPE8Ex+wPZGWfiLxvo jIFw==
In-reply-to: <1354856737-28678-12-git-send-email-sjhill@mips.com>
List-archive: <http://www.linux-mips.org/archives/linux-mips/>
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-id: linux-mips <linux-mips.eddie.linux-mips.org>
List-owner: <mailto:ralf@linux-mips.org>
List-post: <mailto:linux-mips@linux-mips.org>
List-software: Ecartis version 1.0.0
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20linux-mips>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20linux-mips>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <1354856737-28678-1-git-send-email-sjhill@mips.com> <1354856737-28678-12-git-send-email-sjhill@mips.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130311 Thunderbird/17.0.4
On 12/06/2012 09:05 PM, Steven J. Hill wrote:
From: "Steven J. Hill" <sjhill@mips.com>

Optimise 'strncpy' to use microMIPS instructions and/or optimisations
for binary size reduction. When the microMIPS ISA is not being used,
the library function compiles to the original binary code.

This is an untrue statement. Why mislead us by saying the original binary code is obtained?

You don't really explain how the change helps optimization either.



Signed-off-by: Steven J. Hill <sjhill@mips.com>
---
  arch/mips/lib/strncpy_user.S |   28 +++++++++++++++-------------
  1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/arch/mips/lib/strncpy_user.S b/arch/mips/lib/strncpy_user.S
index 7201b2f..dea9304 100644
--- a/arch/mips/lib/strncpy_user.S
+++ b/arch/mips/lib/strncpy_user.S
@@ -3,7 +3,8 @@
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
   *
- * Copyright (c) 1996, 1999 by Ralf Baechle
+ * Copyright (C) 1996, 1999 by Ralf Baechle
+ * Copyright (C) 2011 MIPS Technologies, Inc.
   */
  #include <linux/errno.h>
  #include <asm/asm.h>
@@ -33,22 +34,23 @@ LEAF(__strncpy_from_user_asm)
        bnez            v0, .Lfault

  FEXPORT(__strncpy_from_user_nocheck_asm)
-       move            v0, zero
-       move            v1, a1
        .set            noreorder
-1:     EX(lbu, t0, (v1), .Lfault)
+       move            t0, zero
+       move            v1, a1
+1:     EX(lbu, v0, (v1), .Lfault)

Look at these changes. v0 and t0 are not the same thing. the binary is being changed.


        PTR_ADDIU       v1, 1
        R10KCBARRIER(0(ra))
-       beqz            t0, 2f
-        sb             t0, (a0)
-       PTR_ADDIU       v0, 1
-       .set            reorder
-       PTR_ADDIU       a0, 1
-       bne             v0, a2, 1b
-2:     PTR_ADDU        t0, a1, v0
-       xor             t0, a1
-       bltz            t0, .Lfault
+       beqz            v0, 2f
+        sb             v0, (a0)
+       PTR_ADDIU       t0, 1
+       bne             t0, a2, 1b
+        PTR_ADDIU      a0, 1
+2:     PTR_ADDU        v0, a1, t0
+       xor             v0, a1
+       bltz            v0, .Lfault
+        nop
        jr              ra                      # return n
+       move            v0, t0
        END(__strncpy_from_user_asm)

  .Lfault:      li              v0, -EFAULT



<Prev in Thread] Current Thread [Next in Thread>