Commit be0ff4bd authored by David Mosberger's avatar David Mosberger

Make memset() detect the special-case of clear-to-zero and call __bzero() in that case.

parent 6b6fc449
...@@ -6,7 +6,11 @@ ...@@ -6,7 +6,11 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/string.h> #include <linux/string.h>
EXPORT_SYMBOL_NOVERS(memset); #undef memset
extern void *memset (void *, int, size_t);
EXPORT_SYMBOL_NOVERS(memset); /* gcc generates direct calls to memset()... */
EXPORT_SYMBOL_NOVERS(__memset_generic);
EXPORT_SYMBOL_NOVERS(__bzero);
EXPORT_SYMBOL(memchr); EXPORT_SYMBOL(memchr);
EXPORT_SYMBOL(memcmp); EXPORT_SYMBOL(memcmp);
EXPORT_SYMBOL_NOVERS(memcpy); EXPORT_SYMBOL_NOVERS(memcpy);
......
...@@ -214,7 +214,8 @@ ia64_ni_syscall (unsigned long arg0, unsigned long arg1, unsigned long arg2, uns ...@@ -214,7 +214,8 @@ ia64_ni_syscall (unsigned long arg0, unsigned long arg1, unsigned long arg2, uns
{ {
struct pt_regs *regs = (struct pt_regs *) &stack; struct pt_regs *regs = (struct pt_regs *) &stack;
printk("<sc%ld(%lx,%lx,%lx,%lx)>\n", regs->r15, arg0, arg1, arg2, arg3); printk("%s(%d): <sc%ld(%lx,%lx,%lx,%lx)>\n", current->comm, current->pid,
regs->r15, arg0, arg1, arg2, arg3);
return -ENOSYS; return -ENOSYS;
} }
......
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
* in1: byte value to use for storing * in1: byte value to use for storing
* in2: length of the buffer * in2: length of the buffer
* *
* Copyright (C) 1999, 2001 Hewlett-Packard Co * Copyright (C) 1999, 2001, 2002 Hewlett-Packard Co
* Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com> * Stephane Eranian <eranian@hpl.hp.com>
*/ */
#include <asm/asmmacro.h> #include <asm/asmmacro.h>
...@@ -30,7 +30,19 @@ ...@@ -30,7 +30,19 @@
#define saved_lc r20 #define saved_lc r20
#define tmp r21 #define tmp r21
GLOBAL_ENTRY(memset) GLOBAL_ENTRY(__bzero)
.prologue
.save ar.pfs, saved_pfs
alloc saved_pfs=ar.pfs,0,0,3,0
mov out2=out1
mov out1=0
/* FALL THROUGH (explicit NOPs so that next alloc is preceded by stop bit!) */
nop.m 0
nop.f 0
nop.i 0
;;
END(__bzero)
GLOBAL_ENTRY(__memset_generic)
.prologue .prologue
.save ar.pfs, saved_pfs .save ar.pfs, saved_pfs
alloc saved_pfs=ar.pfs,3,0,0,0 // cnt is sink here alloc saved_pfs=ar.pfs,3,0,0,0 // cnt is sink here
...@@ -105,4 +117,7 @@ GLOBAL_ENTRY(memset) ...@@ -105,4 +117,7 @@ GLOBAL_ENTRY(memset)
;; ;;
(p6) st1 [buf]=val // only 1 byte left (p6) st1 [buf]=val // only 1 byte left
br.ret.sptk.many rp br.ret.sptk.many rp
END(memset) END(__memset_generic)
.global memset
memset = __memset_generic // alias needed for gcc
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
* Here is where we want to put optimized versions of the string * Here is where we want to put optimized versions of the string
* routines. * routines.
* *
* Copyright (C) 1998-2000 Hewlett-Packard Co * Copyright (C) 1998-2000, 2002 Hewlett-Packard Co
* Copyright (C) 1998-2000 David Mosberger-Tang <davidm@hpl.hp.com> * David Mosberger-Tang <davidm@hpl.hp.com>
*/ */
#include <linux/config.h> /* remove this once we remove the A-step workaround... */ #include <linux/config.h> /* remove this once we remove the A-step workaround... */
...@@ -17,7 +17,21 @@ ...@@ -17,7 +17,21 @@
#define __HAVE_ARCH_BCOPY 1 /* see arch/ia64/lib/memcpy.S */ #define __HAVE_ARCH_BCOPY 1 /* see arch/ia64/lib/memcpy.S */
extern __kernel_size_t strlen (const char *); extern __kernel_size_t strlen (const char *);
extern void *memset (void *, int, __kernel_size_t);
extern void *memcpy (void *, const void *, __kernel_size_t); extern void *memcpy (void *, const void *, __kernel_size_t);
extern void *__memset_generic (void *, int, __kernel_size_t);
extern void __bzero (void *, __kernel_size_t);
#define memset(s, c, count) \
({ \
void *_s = (s); \
int _c = (c); \
__kernel_size_t _count = (count); \
\
if (__builtin_constant_p(_c) && _c == 0) \
__bzero(_s, _count); \
else \
__memset_generic(_s, _c, _count); \
})
#endif /* _ASM_IA64_STRING_H */ #endif /* _ASM_IA64_STRING_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment