1/* NG2copy_to_user.S: Niagara-2 optimized copy to userspace. 2 * 3 * Copyright (C) 2007 David S. Miller (davem@davemloft.net) 4 */ 5 6#define EX_ST(x,y) \ 798: x; \ 8 .section __ex_table,"a";\ 9 .align 4; \ 10 .word 98b, y; \ 11 .text; \ 12 .align 4; 13 14#define EX_ST_FP(x,y) \ 1598: x; \ 16 .section __ex_table,"a";\ 17 .align 4; \ 18 .word 98b, y##_fp; \ 19 .text; \ 20 .align 4; 21 22#ifndef ASI_AIUS 23#define ASI_AIUS 0x11 24#endif 25 26#ifndef ASI_BLK_AIUS_4V 27#define ASI_BLK_AIUS_4V 0x17 28#endif 29 30#ifndef ASI_BLK_INIT_QUAD_LDD_AIUS 31#define ASI_BLK_INIT_QUAD_LDD_AIUS 0x23 32#endif 33 34#define FUNC_NAME NG2copy_to_user 35#define STORE(type,src,addr) type##a src, [addr] ASI_AIUS 36#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_AIUS 37#define STORE_BLK(src,addr) stda src, [addr] ASI_BLK_AIUS_4V 38#define EX_RETVAL(x) 0 39 40#ifdef __KERNEL__ 41 /* Writing to %asi is _expensive_ so we hardcode it. 42 * Reading %asi to check for KERNEL_DS is comparatively 43 * cheap. 44 */ 45#define PREAMBLE \ 46 rd %asi, %g1; \ 47 cmp %g1, ASI_AIUS; \ 48 bne,pn %icc, raw_copy_in_user; \ 49 nop 50#endif 51 52#include "NG2memcpy.S" 53