xref: /openbmc/linux/arch/sparc/lib/M7copy_to_user.S (revision 34060b8f)
1b3a04ed5SBabu Moger/*
2b3a04ed5SBabu Moger * M7copy_to_user.S: SPARC M7 optimized copy to userspace.
3b3a04ed5SBabu Moger *
4b3a04ed5SBabu Moger * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
5b3a04ed5SBabu Moger */
6b3a04ed5SBabu Moger
7b3a04ed5SBabu Moger
834060b8fSBabu Moger#define EX_ST(x, y)			\
9b3a04ed5SBabu Moger98:	x;				\
10b3a04ed5SBabu Moger	.section __ex_table,"a";	\
11b3a04ed5SBabu Moger	.align 4;			\
1234060b8fSBabu Moger	.word 98b, y;			\
13b3a04ed5SBabu Moger	.text;				\
14b3a04ed5SBabu Moger	.align 4;
15b3a04ed5SBabu Moger
1634060b8fSBabu Moger#define EX_ST_FP(x, y)			\
17b3a04ed5SBabu Moger98:	x;				\
18b3a04ed5SBabu Moger	.section __ex_table,"a";	\
19b3a04ed5SBabu Moger	.align 4;			\
2034060b8fSBabu Moger	.word 98b, y##_fp;		\
21b3a04ed5SBabu Moger	.text;				\
22b3a04ed5SBabu Moger	.align 4;
23b3a04ed5SBabu Moger
24b3a04ed5SBabu Moger
25b3a04ed5SBabu Moger#ifndef ASI_AIUS
26b3a04ed5SBabu Moger#define ASI_AIUS	0x11
27b3a04ed5SBabu Moger#endif
28b3a04ed5SBabu Moger
29b3a04ed5SBabu Moger#ifndef ASI_BLK_INIT_QUAD_LDD_AIUS
30b3a04ed5SBabu Moger#define ASI_BLK_INIT_QUAD_LDD_AIUS 0x23
31b3a04ed5SBabu Moger#endif
32b3a04ed5SBabu Moger
33b3a04ed5SBabu Moger#define FUNC_NAME		M7copy_to_user
34b3a04ed5SBabu Moger#define STORE(type,src,addr)	type##a src, [addr] %asi
35b3a04ed5SBabu Moger#define STORE_ASI		ASI_BLK_INIT_QUAD_LDD_AIUS
36b3a04ed5SBabu Moger#define	STORE_MRU_ASI		ASI_ST_BLKINIT_MRU_S
37b3a04ed5SBabu Moger#define EX_RETVAL(x)		0
38b3a04ed5SBabu Moger
39b3a04ed5SBabu Moger#ifdef __KERNEL__
40b3a04ed5SBabu Moger	/* Writing to %asi is _expensive_ so we hardcode it.
41b3a04ed5SBabu Moger	 * Reading %asi to check for KERNEL_DS is comparatively
42b3a04ed5SBabu Moger	 * cheap.
43b3a04ed5SBabu Moger	 */
44b3a04ed5SBabu Moger#define PREAMBLE					\
45b3a04ed5SBabu Moger	rd		%asi, %g1;			\
46b3a04ed5SBabu Moger	cmp		%g1, ASI_AIUS;			\
47b3a04ed5SBabu Moger	bne,pn		%icc, raw_copy_in_user;		\
48b3a04ed5SBabu Moger	 nop
49b3a04ed5SBabu Moger#endif
50b3a04ed5SBabu Moger
51b3a04ed5SBabu Moger#include "M7memcpy.S"
52