1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/*
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 2013 ARM Ltd.
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * This program is free software; you can redistribute it and/or modify
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * it under the terms of the GNU General Public License version 2 as
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * published by the Free Software Foundation.
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * This program is distributed in the hope that it will be useful,
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * but WITHOUT ANY WARRANTY; without even the implied warranty of
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * GNU General Public License for more details.
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * You should have received a copy of the GNU General Public License
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <linux/linkage.h>
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <asm/assembler.h>
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/*
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Fill in the buffer with character c (alignment handled by the hardware)
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Parameters:
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *	x0 - buf
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *	x1 - c
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *	x2 - n
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Returns:
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *	x0 - buf
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengENTRY(memset)
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	mov	x4, x0
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	and	w1, w1, #0xff
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	orr	w1, w1, w1, lsl #8
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	orr	w1, w1, w1, lsl #16
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	orr	x1, x1, x1, lsl #32
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	subs	x2, x2, #8
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b.mi	2f
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1:	str	x1, [x4], #8
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	subs	x2, x2, #8
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b.pl	1b
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2:	adds	x2, x2, #4
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b.mi	3f
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sub	x2, x2, #4
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	str	w1, [x4], #4
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3:	adds	x2, x2, #2
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b.mi	4f
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sub	x2, x2, #2
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	strh	w1, [x4], #2
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng4:	adds	x2, x2, #1
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b.mi	5f
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	strb	w1, [x4]
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng5:	ret
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengENDPROC(memset)
54