All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guo Ren <ren_guo@c-sky.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-arch <linux-arch@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Jason Cooper <jason@lakedaemon.net>,
	c-sky_gcc_upstream@c-sky.com, gnu-csky@mentor.com,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
	wbx@uclibc-ng.org, Greentime Hu <green.hu@gmail.com>
Subject: Re: [PATCH V3 13/26] csky: Library functions
Date: Fri, 7 Sep 2018 13:08:02 +0800	[thread overview]
Message-ID: <20180907050801.GA13356@guoren-Inspiron-7460> (raw)
In-Reply-To: <CAK8P3a1xUhyQohifsvs_3th-iPCGL9WKDGj9qKoEaizuu19FeA@mail.gmail.com>

On Thu, Sep 06, 2018 at 04:24:59PM +0200, Arnd Bergmann wrote:
> On Wed, Sep 5, 2018 at 2:08 PM Guo Ren <ren_guo@c-sky.com> wrote:
> 
> > --- /dev/null
> > +++ b/arch/csky/abiv1/memset.c
> > @@ -0,0 +1,38 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
> > +#include <linux/types.h>
> > +
> > +void *memset(void *dest, int c, size_t l)
> > +{
> > +       char *d = dest;
> > +       int ch = c;
> > +       int tmp;
> > +
> > +       if ((long)d & 0x3)
> > +               while (l--) *d++ = ch;
> > +       else {
> > +               ch &= 0xff;
> > +               tmp = (ch | ch << 8 | ch << 16 | ch << 24);
> > +
> > +               while (l >= 16) {
> > +                       *(((long *)d)) = tmp;
> > +                       *(((long *)d)+1) = tmp;
> > +                       *(((long *)d)+2) = tmp;
> > +                       *(((long *)d)+3) = tmp;
> > +                       l -= 16;
> > +                       d += 16;
> > +               }
> > +
> > +               while (l > 3) {
> > +                       *(((long *)d)) = tmp;
> > +                       d = d + 4;
> > +                       l -= 4;
> > +               }
> > +
> > +               while (l) {
> > +                       *d++ = ch;
> > +                       l--;
> > +               }
> > +       }
> > +       return dest;
> > +}
> 
> I see that we have a trivial memset() implementation in lib/string.c, but yours
> seems to be better optimized. Where did you get it from?
We write it for our ck610 to improve the performance, but I think a lot
of other arch done it in asm style.

> Is this a version
> that works particularly well on C-Sky, or is this a generic optimized memset
> that others could use as well?
We only test it on C-SKY, but I think it will also work better on other
arch CPU than current lib/string.c memset implement.

I see that in lib/string.c:
void *memset(void *s, int c, size_t count)
{
	char *xs = s;

	while (count--)
		*xs++ = c;
	return s;
}
The most problem is "char *xs;" and it will cause "st.b" in asm.
"st.b" is very slow.

Our key improvement is:
> > +                       *(((long *)d)) = tmp;
> > +                       *(((long *)d)+1) = tmp;
> > +                       *(((long *)d)+2) = tmp;
> > +                       *(((long *)d)+3) = tmp;
It will cause SOC AXI burst transfer.

> In the latter case, we could add it to
> lib/string.c and let architectures select it in place of the triivial version.
Good idea.

 Guo Ren

  parent reply	other threads:[~2018-09-07  5:08 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-05 12:07 [PATCH V3 00/26] C-SKY(csky) Linux Kernel Port Guo Ren
2018-09-05 12:07 ` [PATCH V3 01/26] csky: Build infrastructure Guo Ren
2018-09-05 12:07 ` [PATCH V3 02/26] csky: defconfig Guo Ren
2018-09-06 13:58   ` Arnd Bergmann
2018-09-07  1:43     ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 03/26] csky: Kernel booting Guo Ren
2018-09-05 12:07 ` [PATCH V3 04/26] csky: Exception handling Guo Ren
2018-09-05 12:07 ` [PATCH V3 05/26] csky: System Call Guo Ren
2018-09-06 14:10   ` Arnd Bergmann
2018-09-07  1:47     ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 06/26] csky: Cache and TLB routines Guo Ren
2018-09-06 14:31   ` Arnd Bergmann
2018-09-07  3:04     ` Guo Ren
2018-09-07  8:14       ` Arnd Bergmann
2018-09-07 12:55         ` Guo Ren
2018-09-07 14:13           ` Arnd Bergmann
2018-09-08  2:20             ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 07/26] csky: MMU and page table management Guo Ren
2018-09-05 12:07 ` [PATCH V3 08/26] csky: Process management and Signal Guo Ren
2018-09-05 12:07 ` [PATCH V3 09/26] csky: VDSO and rt_sigreturn Guo Ren
2018-09-06 14:02   ` Arnd Bergmann
2018-09-07  3:07     ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 10/26] csky: IRQ handling Guo Ren
2018-09-06 13:39   ` Thomas Gleixner
2018-09-10  7:30     ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 11/26] csky: Atomic operations Guo Ren
2018-09-05 12:07 ` [PATCH V3 12/26] csky: ELF and module probe Guo Ren
2018-09-05 12:07 ` [PATCH V3 13/26] csky: Library functions Guo Ren
2018-09-06 14:24   ` Arnd Bergmann
2018-09-06 15:50     ` Geert Uytterhoeven
2018-09-07  5:14       ` Guo Ren
2018-09-07  5:08     ` Guo Ren [this message]
2018-09-05 12:07 ` [PATCH V3 14/26] csky: User access Guo Ren
2018-09-05 12:07 ` [PATCH V3 15/26] csky: Debug and Ptrace GDB Guo Ren
2018-09-05 12:07 ` [PATCH V3 16/26] csky: SMP support Guo Ren
2018-09-05 12:07 ` [PATCH V3 17/26] csky: Misc headers Guo Ren
2018-09-06 14:16   ` Arnd Bergmann
2018-09-07  5:17     ` Guo Ren
2018-09-07  8:01       ` Arnd Bergmann
2018-09-07  8:08         ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 18/26] dt-bindings: csky CPU Bindings Guo Ren
2018-09-06  0:37   ` Rob Herring
2018-09-06  1:49     ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 19/26] dt-bindings: timer: gx6605s SOC timer Guo Ren
2018-09-06  0:47   ` Rob Herring
2018-09-06  2:02     ` Guo Ren
2018-09-07  6:41       ` Guo Ren
2018-09-05 12:07 ` [PATCH V3 20/26] dt-bindings: timer: C-SKY Multi-processor timer Guo Ren
2018-09-05 12:08 ` [PATCH V3 21/26] dt-bindings: interrupt-controller: C-SKY APB intc Guo Ren
2018-09-06  0:43   ` Rob Herring
2018-09-06  2:12     ` Guo Ren
2018-09-06 13:05       ` Arnd Bergmann
2018-09-07  5:40         ` Guo Ren
2018-09-07 15:13         ` Rob Herring
2018-09-07 15:13           ` Rob Herring
2018-09-08  2:05           ` Guo Ren
2018-09-08  2:05             ` Guo Ren
2018-09-05 12:08 ` [PATCH V3 22/26] dt-bindings: interrupt-controller: C-SKY SMP intc Guo Ren
2018-09-06  0:45   ` Rob Herring
2018-09-06  2:23     ` Guo Ren
2018-09-06 13:03       ` Arnd Bergmann
2018-09-07  6:07         ` Guo Ren
2018-09-05 12:08 ` [PATCH V3 23/26] clocksource: add gx6605s SOC system timer Guo Ren
2018-09-05 12:08 ` [PATCH V3 24/26] clocksource: add C-SKY SMP timer Guo Ren
2018-09-05 12:08 ` [PATCH V3 25/26] clocksource: add C-SKY timers' build infrastructure Guo Ren
2018-09-05 12:08 ` [PATCH V3 26/26] irqchip: add C-SKY irqchip drivers Guo Ren
2018-09-06 14:35 ` [PATCH V3 00/26] C-SKY(csky) Linux Kernel Port Arnd Bergmann
2018-09-07  2:08 ` Guenter Roeck
2018-09-07  6:40   ` Guo Ren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180907050801.GA13356@guoren-Inspiron-7460 \
    --to=ren_guo@c-sky.com \
    --cc=arnd@arndb.de \
    --cc=c-sky_gcc_upstream@c-sky.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=gnu-csky@mentor.com \
    --cc=green.hu@gmail.com \
    --cc=jason@lakedaemon.net \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=wbx@uclibc-ng.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.