Linux Audio

Check our new training course

Loading...
v4.6
 
 1/* $Id: memset.S,v 1.1 2000/04/14 16:49:01 mjd Exp $
 2 *
 3 * "memset" implementation of SuperH
 4 *
 5 * Copyright (C) 1999  Niibe Yutaka
 6 *
 7 */
 8
 9/*
10 *            void *memset(void *s, int c, size_t n);
11 */
12
13#include <linux/linkage.h>
14
15ENTRY(memset)
16	tst	r6,r6
17	bt/s	5f		! if n=0, do nothing
18	 add	r6,r4
19	mov	#12,r0
20	cmp/gt	r6,r0
21	bt/s	4f		! if it's too small, set a byte at once
22	 mov	r4,r0
23	and	#3,r0
24	cmp/eq	#0,r0
25	bt/s	2f		! It's aligned
26	 sub	r0,r6
271:
28	dt	r0
29	bf/s	1b
30	 mov.b	r5,@-r4
312:				! make VVVV
32	extu.b	r5,r5
33	swap.b	r5,r0		!   V0
34	or	r0,r5		!   VV
35	swap.w	r5,r0		! VV00
36	or	r0,r5		! VVVV
37	!
38	mov	r6,r0
39	shlr2	r0
40	shlr	r0		! r0 = r6 >> 3
413:
42	dt	r0
43	mov.l	r5,@-r4		! set 8-byte at once
44	bf/s	3b
45	 mov.l	r5,@-r4
46	!
47	mov	#7,r0
48	and	r0,r6
49	tst	r6,r6
50	bt	5f
51	! fill bytes
524:
53	dt	r6
54	bf/s	4b
55	 mov.b	r5,@-r4
565:
57	rts
58	 mov	r4,r0
v5.9
 1/* SPDX-License-Identifier: GPL-2.0 */
 2/* $Id: memset.S,v 1.1 2000/04/14 16:49:01 mjd Exp $
 3 *
 4 * "memset" implementation of SuperH
 5 *
 6 * Copyright (C) 1999  Niibe Yutaka
 7 *
 8 */
 9
10/*
11 *            void *memset(void *s, int c, size_t n);
12 */
13
14#include <linux/linkage.h>
15
16ENTRY(memset)
17	tst	r6,r6
18	bt/s	5f		! if n=0, do nothing
19	 add	r6,r4
20	mov	#12,r0
21	cmp/gt	r6,r0
22	bt/s	4f		! if it's too small, set a byte at once
23	 mov	r4,r0
24	and	#3,r0
25	cmp/eq	#0,r0
26	bt/s	2f		! It's aligned
27	 sub	r0,r6
281:
29	dt	r0
30	bf/s	1b
31	 mov.b	r5,@-r4
322:				! make VVVV
33	extu.b	r5,r5
34	swap.b	r5,r0		!   V0
35	or	r0,r5		!   VV
36	swap.w	r5,r0		! VV00
37	or	r0,r5		! VVVV
38	!
39	mov	r6,r0
40	shlr2	r0
41	shlr	r0		! r0 = r6 >> 3
423:
43	dt	r0
44	mov.l	r5,@-r4		! set 8-byte at once
45	bf/s	3b
46	 mov.l	r5,@-r4
47	!
48	mov	#7,r0
49	and	r0,r6
50	tst	r6,r6
51	bt	5f
52	! fill bytes
534:
54	dt	r6
55	bf/s	4b
56	 mov.b	r5,@-r4
575:
58	rts
59	 mov	r4,r0