cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

M7copy_to_user.S (1017B)


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