Linux Audio

Check our new training course

Linux BSP upgrade and security maintenance

Need help to get security updates for your Linux BSP?
Loading...
v6.2
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/* GENmemcpy.S: Generic sparc64 memcpy.
  3 *
  4 * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
  5 */
  6
  7#ifdef __KERNEL__
  8#include <linux/linkage.h>
  9#define GLOBAL_SPARE	%g7
 10#else
 11#define GLOBAL_SPARE	%g5
 12#endif
 13
 14#ifndef EX_LD
 15#define EX_LD(x,y)	x
 16#endif
 17
 18#ifndef EX_ST
 19#define EX_ST(x,y)	x
 20#endif
 21
 22#ifndef LOAD
 23#define LOAD(type,addr,dest)	type [addr], dest
 24#endif
 25
 26#ifndef STORE
 27#define STORE(type,src,addr)	type src, [addr]
 28#endif
 29
 30#ifndef FUNC_NAME
 31#define FUNC_NAME	GENmemcpy
 32#endif
 33
 34#ifndef PREAMBLE
 35#define PREAMBLE
 36#endif
 37
 38#ifndef XCC
 39#define XCC xcc
 40#endif
 41
 42	.register	%g2,#scratch
 43	.register	%g3,#scratch
 44
 45	.text
 46
 47#ifndef EX_RETVAL
 48#define EX_RETVAL(x)	x
 49ENTRY(GEN_retl_o4_1)
 50	add	%o4, %o2, %o4
 51	retl
 52	 add	%o4, 1, %o0
 53ENDPROC(GEN_retl_o4_1)
 54ENTRY(GEN_retl_g1_8)
 55	add	%g1, %o2, %g1
 56	retl
 57	 add	%g1, 8, %o0
 58ENDPROC(GEN_retl_g1_8)
 59ENTRY(GEN_retl_o2_4)
 60	retl
 61	 add	%o2, 4, %o0
 62ENDPROC(GEN_retl_o2_4)
 63ENTRY(GEN_retl_o2_1)
 64	retl
 65	 add	%o2, 1, %o0
 66ENDPROC(GEN_retl_o2_1)
 67#endif
 68
 69	.align		64
 70
 71	.globl	FUNC_NAME
 72	.type	FUNC_NAME,#function
 73FUNC_NAME:	/* %o0=dst, %o1=src, %o2=len */
 74	srlx		%o2, 31, %g2
 75	cmp		%g2, 0
 76	tne		%XCC, 5
 77	PREAMBLE
 78	mov		%o0, GLOBAL_SPARE
 79
 80	cmp		%o2, 0
 81	be,pn		%XCC, 85f
 82	 or		%o0, %o1, %o3
 83	cmp		%o2, 16
 84	blu,a,pn	%XCC, 80f
 85	 or		%o3, %o2, %o3
 86
 87	xor		%o0, %o1, %o4
 88	andcc		%o4, 0x7, %g0
 89	bne,a,pn	%XCC, 90f
 90	 sub		%o0, %o1, %o3
 91
 92	and		%o0, 0x7, %o4
 93	sub		%o4, 0x8, %o4
 94	sub		%g0, %o4, %o4
 95	sub		%o2, %o4, %o2
 961:	subcc		%o4, 1, %o4
 97	EX_LD(LOAD(ldub, %o1, %g1),GEN_retl_o4_1)
 98	EX_ST(STORE(stb, %g1, %o0),GEN_retl_o4_1)
 99	add		%o1, 1, %o1
100	bne,pt		%XCC, 1b
101	add		%o0, 1, %o0
102
103	andn		%o2, 0x7, %g1
104	sub		%o2, %g1, %o2
1051:	subcc		%g1, 0x8, %g1
106	EX_LD(LOAD(ldx, %o1, %g2),GEN_retl_g1_8)
107	EX_ST(STORE(stx, %g2, %o0),GEN_retl_g1_8)
108	add		%o1, 0x8, %o1
109	bne,pt		%XCC, 1b
110	 add		%o0, 0x8, %o0
111
112	brz,pt		%o2, 85f
113	 sub		%o0, %o1, %o3
114	ba,a,pt		%XCC, 90f
115
116	.align		64
11780: /* 0 < len <= 16 */
118	andcc		%o3, 0x3, %g0
119	bne,pn		%XCC, 90f
120	 sub		%o0, %o1, %o3
121
1221:
123	subcc		%o2, 4, %o2
124	EX_LD(LOAD(lduw, %o1, %g1),GEN_retl_o2_4)
125	EX_ST(STORE(stw, %g1, %o1 + %o3),GEN_retl_o2_4)
126	bgu,pt		%XCC, 1b
127	 add		%o1, 4, %o1
128
12985:	retl
130	 mov		EX_RETVAL(GLOBAL_SPARE), %o0
131
132	.align		32
13390:
134	subcc		%o2, 1, %o2
135	EX_LD(LOAD(ldub, %o1, %g1),GEN_retl_o2_1)
136	EX_ST(STORE(stb, %g1, %o1 + %o3),GEN_retl_o2_1)
137	bgu,pt		%XCC, 90b
138	 add		%o1, 1, %o1
139	retl
140	 mov		EX_RETVAL(GLOBAL_SPARE), %o0
141
142	.size		FUNC_NAME, .-FUNC_NAME
v4.10.11
 
  1/* GENmemcpy.S: Generic sparc64 memcpy.
  2 *
  3 * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
  4 */
  5
  6#ifdef __KERNEL__
  7#include <linux/linkage.h>
  8#define GLOBAL_SPARE	%g7
  9#else
 10#define GLOBAL_SPARE	%g5
 11#endif
 12
 13#ifndef EX_LD
 14#define EX_LD(x,y)	x
 15#endif
 16
 17#ifndef EX_ST
 18#define EX_ST(x,y)	x
 19#endif
 20
 21#ifndef LOAD
 22#define LOAD(type,addr,dest)	type [addr], dest
 23#endif
 24
 25#ifndef STORE
 26#define STORE(type,src,addr)	type src, [addr]
 27#endif
 28
 29#ifndef FUNC_NAME
 30#define FUNC_NAME	GENmemcpy
 31#endif
 32
 33#ifndef PREAMBLE
 34#define PREAMBLE
 35#endif
 36
 37#ifndef XCC
 38#define XCC xcc
 39#endif
 40
 41	.register	%g2,#scratch
 42	.register	%g3,#scratch
 43
 44	.text
 45
 46#ifndef EX_RETVAL
 47#define EX_RETVAL(x)	x
 48ENTRY(GEN_retl_o4_1)
 49	add	%o4, %o2, %o4
 50	retl
 51	 add	%o4, 1, %o0
 52ENDPROC(GEN_retl_o4_1)
 53ENTRY(GEN_retl_g1_8)
 54	add	%g1, %o2, %g1
 55	retl
 56	 add	%g1, 8, %o0
 57ENDPROC(GEN_retl_g1_8)
 58ENTRY(GEN_retl_o2_4)
 59	retl
 60	 add	%o2, 4, %o0
 61ENDPROC(GEN_retl_o2_4)
 62ENTRY(GEN_retl_o2_1)
 63	retl
 64	 add	%o2, 1, %o0
 65ENDPROC(GEN_retl_o2_1)
 66#endif
 67
 68	.align		64
 69
 70	.globl	FUNC_NAME
 71	.type	FUNC_NAME,#function
 72FUNC_NAME:	/* %o0=dst, %o1=src, %o2=len */
 73	srlx		%o2, 31, %g2
 74	cmp		%g2, 0
 75	tne		%XCC, 5
 76	PREAMBLE
 77	mov		%o0, GLOBAL_SPARE
 78
 79	cmp		%o2, 0
 80	be,pn		%XCC, 85f
 81	 or		%o0, %o1, %o3
 82	cmp		%o2, 16
 83	blu,a,pn	%XCC, 80f
 84	 or		%o3, %o2, %o3
 85
 86	xor		%o0, %o1, %o4
 87	andcc		%o4, 0x7, %g0
 88	bne,a,pn	%XCC, 90f
 89	 sub		%o0, %o1, %o3
 90
 91	and		%o0, 0x7, %o4
 92	sub		%o4, 0x8, %o4
 93	sub		%g0, %o4, %o4
 94	sub		%o2, %o4, %o2
 951:	subcc		%o4, 1, %o4
 96	EX_LD(LOAD(ldub, %o1, %g1),GEN_retl_o4_1)
 97	EX_ST(STORE(stb, %g1, %o0),GEN_retl_o4_1)
 98	add		%o1, 1, %o1
 99	bne,pt		%XCC, 1b
100	add		%o0, 1, %o0
101
102	andn		%o2, 0x7, %g1
103	sub		%o2, %g1, %o2
1041:	subcc		%g1, 0x8, %g1
105	EX_LD(LOAD(ldx, %o1, %g2),GEN_retl_g1_8)
106	EX_ST(STORE(stx, %g2, %o0),GEN_retl_g1_8)
107	add		%o1, 0x8, %o1
108	bne,pt		%XCC, 1b
109	 add		%o0, 0x8, %o0
110
111	brz,pt		%o2, 85f
112	 sub		%o0, %o1, %o3
113	ba,a,pt		%XCC, 90f
114
115	.align		64
11680: /* 0 < len <= 16 */
117	andcc		%o3, 0x3, %g0
118	bne,pn		%XCC, 90f
119	 sub		%o0, %o1, %o3
120
1211:
122	subcc		%o2, 4, %o2
123	EX_LD(LOAD(lduw, %o1, %g1),GEN_retl_o2_4)
124	EX_ST(STORE(stw, %g1, %o1 + %o3),GEN_retl_o2_4)
125	bgu,pt		%XCC, 1b
126	 add		%o1, 4, %o1
127
12885:	retl
129	 mov		EX_RETVAL(GLOBAL_SPARE), %o0
130
131	.align		32
13290:
133	subcc		%o2, 1, %o2
134	EX_LD(LOAD(ldub, %o1, %g1),GEN_retl_o2_1)
135	EX_ST(STORE(stb, %g1, %o1 + %o3),GEN_retl_o2_1)
136	bgu,pt		%XCC, 90b
137	 add		%o1, 1, %o1
138	retl
139	 mov		EX_RETVAL(GLOBAL_SPARE), %o0
140
141	.size		FUNC_NAME, .-FUNC_NAME