mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-11-02 07:13:31 +01:00
alpha: add support for memset16
Alpha already had an optimised fill-memory-with-16-bit-quantity assembler routine called memsetw(). It has a slightly different calling convention from memset16() in that it takes a byte count, not a count of words. That's the same convention used by ARM's __memset routines, so rename Alpha's routine to match and add a memset16() wrapper around it. Then convert Alpha's scr_memsetw() to call memset16() instead of memsetw(). Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox <[email protected]> Cc: Richard Henderson <[email protected]> Cc: Ivan Kokshaysky <[email protected]> Cc: Matt Turner <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: "James E.J. Bottomley" <[email protected]> Cc: "Martin K. Petersen" <[email protected]> Cc: David Miller <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Minchan Kim <[email protected]> Cc: Ralf Baechle <[email protected]> Cc: Russell King <[email protected]> Cc: Sam Ravnborg <[email protected]> Cc: Sergey Senozhatsky <[email protected]> Cc: Thomas Gleixner <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
1 parent
fd1d362600
commit
92ce4c3ea7
3 files changed
+14
-13
No files matched your search
@@ -65,13 +65,14 @@ extern void * memchr(const void *, int, size_t);
|
||||
aligned values. The DEST and COUNT parameters must be even for
|
||||
correct operation. */
|
||||
|
||||
#define __HAVE_ARCH_MEMSETW
|
||||
extern void * __memsetw(void *dest, unsigned short, size_t count);
|
||||
|
||||
#define memsetw(s, c, n) \
|
||||
(__builtin_constant_p(c) \
|
||||
? __constant_c_memset((s),0x0001000100010001UL*(unsigned short)(c),(n)) \
|
||||
: __memsetw((s),(c),(n)))
|
||||
#define __HAVE_ARCH_MEMSET16
|
||||
extern void * __memset16(void *dest, unsigned short, size_t count);
|
||||
static inline void *memset16(uint16_t *p, uint16_t v, size_t n)
|
||||
{
|
||||
if (__builtin_constant_p(v))
|
||||
return __constant_c_memset(p, 0x0001000100010001UL * v, n * 2);
|
||||
return __memset16(p, v, n * 2);
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ static inline void scr_memsetw(u16 *s, u16 c, unsigned int count)
|
||||
if (__is_ioaddr(s))
|
||||
memsetw_io((u16 __iomem *) s, c, count);
|
||||
else
|
||||
memsetw(s, c, count);
|
||||
memset16(s, c, count / 2);
|
||||
}
|
||||
|
||||
/* Do not trust that the usage will be correct; analyze the arguments. */
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
.globl memset
|
||||
.globl __memset
|
||||
.globl ___memset
|
||||
.globl __memsetw
|
||||
.globl __memset16
|
||||
.globl __constant_c_memset
|
||||
|
||||
.ent ___memset
|
||||
@@ -110,8 +110,8 @@ EXPORT_SYMBOL(___memset)
|
||||
EXPORT_SYMBOL(__constant_c_memset)
|
||||
|
||||
.align 5
|
||||
.ent __memsetw
|
||||
__memsetw:
|
||||
.ent __memset16
|
||||
__memset16:
|
||||
.prologue 0
|
||||
|
||||
inswl $17,0,$1 /* E0 */
|
||||
@@ -123,8 +123,8 @@ __memsetw:
|
||||
or $1,$4,$17 /* E0 */
|
||||
br __constant_c_memset /* .. E1 */
|
||||
|
||||
.end __memsetw
|
||||
EXPORT_SYMBOL(__memsetw)
|
||||
.end __memset16
|
||||
EXPORT_SYMBOL(__memset16)
|
||||
|
||||
memset = ___memset
|
||||
__memset = ___memset
|
||||
|
||||
Reference in new issue
Block a user