[coreboot] New patch to review for coreboot: 30e98f6 Add memcopy_fast
Zheng Bao (zheng.bao@amd.com)
gerrit at coreboot.org
Thu Mar 22 12:32:41 CET 2012
Zheng Bao (zheng.bao at amd.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/805
-gerrit
commit 30e98f64a8f049649b714d1cf198377f029685d4
Author: zbao <fishbaozi at gmail.com>
Date: Thu Mar 22 18:47:15 2012 +0800
Add memcopy_fast
It is for S3 resume. Before the stack is ok, we should use the inlined memcopy.
Change-Id: I66484802367dea19a22a292830485ff0b7ba8e23
Signed-off-by: Zheng Bao <zheng.bao at amd.com>
Signed-off-by: zbao <fishbaozi at gmail.com>
---
src/include/string.h | 1 +
src/lib/memcpy.c | 15 +++++++++++++++
2 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/src/include/string.h b/src/include/string.h
index 708961b..b6a0183 100644
--- a/src/include/string.h
+++ b/src/include/string.h
@@ -9,6 +9,7 @@ void *memmove(void *dest, const void *src, size_t n);
void *memset(void *s, int c, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);
void *memchr(const void *s, int c, size_t n);
+void inline __attribute__((always_inline)) memcopy_fast(void *dest, const void *src, unsigned long bytes);
#if !defined(__PRE_RAM__)
int sprintf(char * buf, const char *fmt, ...);
#endif
diff --git a/src/lib/memcpy.c b/src/lib/memcpy.c
index 1053a53..217f73b 100644
--- a/src/lib/memcpy.c
+++ b/src/lib/memcpy.c
@@ -10,3 +10,18 @@ void *memcpy(void *vdest, const void *vsrc, size_t bytes)
return vdest;
}
+
+/* from linux kernel 2.6.32 asm/string_32.h */
+void inline __attribute__((always_inline)) memcopy_fast(void *dest, const void *src, unsigned long bytes)
+{
+ int d0, d1, d2;
+ asm volatile("cld ; rep ; movsl\n\t"
+ "movl %4,%%ecx\n\t"
+ "andl $3,%%ecx\n\t"
+ "jz 1f\n\t"
+ "rep ; movsb\n\t"
+ "1:"
+ : "=&c" (d0), "=&D" (d1), "=&S" (d2)
+ : "0" (bytes / 4), "g" (bytes), "1" ((long)dest), "2" ((long)src)
+ : "memory", "cc");
+}
More information about the coreboot
mailing list