From: tip-bot for Fenghua Yu <fenghua.yu@intel.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
fenghua.yu@intel.com, tglx@linutronix.de, hpa@linux.intel.com
Subject: [tip:perf/core] x86, mem: memmove_64.S: Optimize memmove by enhanced REP MOVSB/STOSB
Date: Wed, 18 May 2011 20:43:02 GMT [thread overview]
Message-ID: <tip-057e05c1d6440117875f455e59da8691e08f65d5@git.kernel.org> (raw)
In-Reply-To: <1305671358-14478-9-git-send-email-fenghua.yu@intel.com>
Commit-ID: 057e05c1d6440117875f455e59da8691e08f65d5
Gitweb: http://git.kernel.org/tip/057e05c1d6440117875f455e59da8691e08f65d5
Author: Fenghua Yu <fenghua.yu@intel.com>
AuthorDate: Tue, 17 May 2011 15:29:17 -0700
Committer: H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Tue, 17 May 2011 15:40:30 -0700
x86, mem: memmove_64.S: Optimize memmove by enhanced REP MOVSB/STOSB
Support memmove() by enhanced rep movsb. On processors supporting enhanced
REP MOVSB/STOSB, the alternative memmove() function using enhanced rep movsb
overrides the original function.
The patch doesn't change the backward memmove case to use enhanced rep
movsb.
Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
Link: http://lkml.kernel.org/r/1305671358-14478-9-git-send-email-fenghua.yu@intel.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
arch/x86/lib/memmove_64.S | 29 ++++++++++++++++++++++++++++-
1 files changed, 28 insertions(+), 1 deletions(-)
diff --git a/arch/x86/lib/memmove_64.S b/arch/x86/lib/memmove_64.S
index 0ecb843..d0ec9c2 100644
--- a/arch/x86/lib/memmove_64.S
+++ b/arch/x86/lib/memmove_64.S
@@ -8,6 +8,7 @@
#define _STRING_C
#include <linux/linkage.h>
#include <asm/dwarf2.h>
+#include <asm/cpufeature.h>
#undef memmove
@@ -24,6 +25,7 @@
*/
ENTRY(memmove)
CFI_STARTPROC
+
/* Handle more 32bytes in loop */
mov %rdi, %rax
cmp $0x20, %rdx
@@ -31,8 +33,13 @@ ENTRY(memmove)
/* Decide forward/backward copy mode */
cmp %rdi, %rsi
- jb 2f
+ jge .Lmemmove_begin_forward
+ mov %rsi, %r8
+ add %rdx, %r8
+ cmp %rdi, %r8
+ jg 2f
+.Lmemmove_begin_forward:
/*
* movsq instruction have many startup latency
* so we handle small size by general register.
@@ -78,6 +85,8 @@ ENTRY(memmove)
rep movsq
movq %r11, (%r10)
jmp 13f
+.Lmemmove_end_forward:
+
/*
* Handle data backward by movsq.
*/
@@ -194,4 +203,22 @@ ENTRY(memmove)
13:
retq
CFI_ENDPROC
+
+ .section .altinstr_replacement,"ax"
+.Lmemmove_begin_forward_efs:
+ /* Forward moving data. */
+ movq %rdx, %rcx
+ rep movsb
+ retq
+.Lmemmove_end_forward_efs:
+ .previous
+
+ .section .altinstructions,"a"
+ .align 8
+ .quad .Lmemmove_begin_forward
+ .quad .Lmemmove_begin_forward_efs
+ .word X86_FEATURE_ERMS
+ .byte .Lmemmove_end_forward-.Lmemmove_begin_forward
+ .byte .Lmemmove_end_forward_efs-.Lmemmove_begin_forward_efs
+ .previous
ENDPROC(memmove)
next prev parent reply other threads:[~2011-05-18 20:43 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-17 22:29 [PATCH 0/9] Optimize string operations by enhanced REP MOVSB/STOSB Fenghua Yu
2011-05-17 22:29 ` [PATCH 1/9] x86, cpu: Enable enhanced REP MOVSB/STOSB feature Fenghua Yu
2011-05-17 23:13 ` [tip:x86/cpufeature] x86, cpufeature: Add CPU feature bit for enhanced REP MOVSB/STOSB tip-bot for Fenghua Yu
2011-05-17 22:29 ` [PATCH 2/9] x86/kernel/cpu/intel.c: Initialize Enhanced REP MOVSB/STOSBenhanced Fenghua Yu
2011-05-18 2:46 ` Andi Kleen
2011-05-18 3:47 ` H. Peter Anvin
2011-05-18 20:40 ` [tip:perf/core] x86, mem, intel: Initialize Enhanced REP MOVSB/STOSB tip-bot for Fenghua Yu
2011-05-17 22:29 ` [PATCH 3/9] x86/kernel/alternative.c: Add comment for applying alternatives order Fenghua Yu
2011-05-18 20:40 ` [tip:perf/core] x86, alternative, doc: " tip-bot for Fenghua Yu
2011-05-17 22:29 ` [PATCH 4/9] x86, alternative-asm.h: Add altinstruction_entry macro Fenghua Yu
2011-05-18 20:41 ` [tip:perf/core] x86, alternative: " tip-bot for Fenghua Yu
2011-05-17 22:29 ` [PATCH 5/9] x86/lib/clear_page_64.S: Support clear_page() with enhanced REP MOVSB/STOSB Fenghua Yu
2011-05-18 20:41 ` [tip:perf/core] x86, mem: clear_page_64.S: " tip-bot for Fenghua Yu
2011-05-17 22:29 ` [PATCH 6/9] x86/lib/copy_user_64.S: Support copy_to_user/copy_from_user by " Fenghua Yu
2011-05-18 20:42 ` [tip:perf/core] x86, mem: copy_user_64.S: Support copy_to/from_user " tip-bot for Fenghua Yu
2011-05-17 22:29 ` [PATCH 7/9] x86/lib/memcpy_64.S: Optimize memcpy " Fenghua Yu
2011-05-18 6:35 ` Ingo Molnar
2011-05-18 19:04 ` Yu, Fenghua
2011-05-18 20:42 ` [tip:perf/core] x86, mem: memcpy_64.S: " tip-bot for Fenghua Yu
2011-05-17 22:29 ` [PATCH 8/9] x86/lib/memmove_64.S: Optimize memmove " Fenghua Yu
2011-05-18 20:43 ` tip-bot for Fenghua Yu [this message]
2011-05-17 22:29 ` [PATCH 9/9] x86/lib/memset_64.S: Optimize memset " Fenghua Yu
2011-05-18 2:57 ` Andi Kleen
2011-05-18 3:09 ` Yu, Fenghua
2011-05-18 4:05 ` Andi Kleen
2011-05-18 18:33 ` Yu, Fenghua
2011-05-18 18:39 ` Andi Kleen
2011-05-18 18:47 ` Ingo Molnar
2011-05-18 18:49 ` Yu, Fenghua
2011-05-18 20:43 ` [tip:perf/core] x86, mem: memset_64.S: " tip-bot for Fenghua Yu
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=tip-057e05c1d6440117875f455e59da8691e08f65d5@git.kernel.org \
--to=fenghua.yu@intel.com \
--cc=hpa@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/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.