Linux Audio

Check our new training course

Loading...
v3.5.6
 
 1/*
 2 *  linux/arch/arm/lib/io-writesb.S
 3 *
 4 *  Copyright (C) 1995-2000 Russell King
 5 *
 6 * This program is free software; you can redistribute it and/or modify
 7 * it under the terms of the GNU General Public License version 2 as
 8 * published by the Free Software Foundation.
 9 */
10#include <linux/linkage.h>
11#include <asm/assembler.h>
12
13		.macro	outword, rd
14#ifndef __ARMEB__
15		strb	\rd, [r0]
16		mov	\rd, \rd, lsr #8
17		strb	\rd, [r0]
18		mov	\rd, \rd, lsr #8
19		strb	\rd, [r0]
20		mov	\rd, \rd, lsr #8
21		strb	\rd, [r0]
22#else
23		mov	lr, \rd, lsr #24
24		strb	lr, [r0]
25		mov	lr, \rd, lsr #16
26		strb	lr, [r0]
27		mov	lr, \rd, lsr #8
28		strb	lr, [r0]
29		strb	\rd, [r0]
30#endif
31		.endm
32
33.Loutsb_align:	rsb	ip, ip, #4
34		cmp	ip, r2
35		movgt	ip, r2
36		cmp	ip, #2
37		ldrb	r3, [r1], #1
38		strb	r3, [r0]
39		ldrgeb	r3, [r1], #1
40		strgeb	r3, [r0]
41		ldrgtb	r3, [r1], #1
42		strgtb	r3, [r0]
43		subs	r2, r2, ip
44		bne	.Loutsb_aligned
45
46ENTRY(__raw_writesb)
47		teq	r2, #0		@ do we have to check for the zero len?
48		moveq	pc, lr
49		ands	ip, r1, #3
50		bne	.Loutsb_align
51
52.Loutsb_aligned:
53		stmfd	sp!, {r4, r5, lr}
54
55		subs	r2, r2, #16
56		bmi	.Loutsb_no_16
57
58.Loutsb_16_lp:	ldmia	r1!, {r3, r4, r5, ip}
59		outword	r3
60		outword	r4
61		outword	r5
62		outword	ip
63		subs	r2, r2, #16
64		bpl	.Loutsb_16_lp
65
66		tst	r2, #15
67		ldmeqfd	sp!, {r4, r5, pc}
68
69.Loutsb_no_16:	tst	r2, #8
70		beq	.Loutsb_no_8
71
72		ldmia	r1!, {r3, r4}
73		outword	r3
74		outword	r4
75
76.Loutsb_no_8:	tst	r2, #4
77		beq	.Loutsb_no_4
78
79		ldr	r3, [r1], #4
80		outword	r3
81
82.Loutsb_no_4:	ands	r2, r2, #3
83		ldmeqfd	sp!, {r4, r5, pc}
84
85		cmp	r2, #2
86		ldrb	r3, [r1], #1
87		strb	r3, [r0]
88		ldrgeb	r3, [r1], #1
89		strgeb	r3, [r0]
90		ldrgtb	r3, [r1]
91		strgtb	r3, [r0]
92
93		ldmfd	sp!, {r4, r5, pc}
94ENDPROC(__raw_writesb)
v6.13.7
 1/* SPDX-License-Identifier: GPL-2.0-only */
 2/*
 3 *  linux/arch/arm/lib/io-writesb.S
 4 *
 5 *  Copyright (C) 1995-2000 Russell King
 
 
 
 
 6 */
 7#include <linux/linkage.h>
 8#include <asm/assembler.h>
 9
10		.macro	outword, rd
11#ifndef __ARMEB__
12		strb	\rd, [r0]
13		mov	\rd, \rd, lsr #8
14		strb	\rd, [r0]
15		mov	\rd, \rd, lsr #8
16		strb	\rd, [r0]
17		mov	\rd, \rd, lsr #8
18		strb	\rd, [r0]
19#else
20		mov	lr, \rd, lsr #24
21		strb	lr, [r0]
22		mov	lr, \rd, lsr #16
23		strb	lr, [r0]
24		mov	lr, \rd, lsr #8
25		strb	lr, [r0]
26		strb	\rd, [r0]
27#endif
28		.endm
29
30.Loutsb_align:	rsb	ip, ip, #4
31		cmp	ip, r2
32		movgt	ip, r2
33		cmp	ip, #2
34		ldrb	r3, [r1], #1
35		strb	r3, [r0]
36		ldrbge	r3, [r1], #1
37		strbge	r3, [r0]
38		ldrbgt	r3, [r1], #1
39		strbgt	r3, [r0]
40		subs	r2, r2, ip
41		bne	.Loutsb_aligned
42
43ENTRY(__raw_writesb)
44		teq	r2, #0		@ do we have to check for the zero len?
45		reteq	lr
46		ands	ip, r1, #3
47		bne	.Loutsb_align
48
49.Loutsb_aligned:
50		stmfd	sp!, {r4, r5, lr}
51
52		subs	r2, r2, #16
53		bmi	.Loutsb_no_16
54
55.Loutsb_16_lp:	ldmia	r1!, {r3, r4, r5, ip}
56		outword	r3
57		outword	r4
58		outword	r5
59		outword	ip
60		subs	r2, r2, #16
61		bpl	.Loutsb_16_lp
62
63		tst	r2, #15
64		ldmfdeq	sp!, {r4, r5, pc}
65
66.Loutsb_no_16:	tst	r2, #8
67		beq	.Loutsb_no_8
68
69		ldmia	r1!, {r3, r4}
70		outword	r3
71		outword	r4
72
73.Loutsb_no_8:	tst	r2, #4
74		beq	.Loutsb_no_4
75
76		ldr	r3, [r1], #4
77		outword	r3
78
79.Loutsb_no_4:	ands	r2, r2, #3
80		ldmfdeq	sp!, {r4, r5, pc}
81
82		cmp	r2, #2
83		ldrb	r3, [r1], #1
84		strb	r3, [r0]
85		ldrbge	r3, [r1], #1
86		strbge	r3, [r0]
87		ldrbgt	r3, [r1]
88		strbgt	r3, [r0]
89
90		ldmfd	sp!, {r4, r5, pc}
91ENDPROC(__raw_writesb)