genmemcpy.s
来自「linux 内核源代码」· S 代码 · 共 122 行
S
122 行
/* GENmemcpy.S: Generic sparc64 memcpy. * * Copyright (C) 2007 David S. Miller (davem@davemloft.net) */#ifdef __KERNEL__#define GLOBAL_SPARE %g7#else#define GLOBAL_SPARE %g5#endif#ifndef EX_LD#define EX_LD(x) x#endif#ifndef EX_ST#define EX_ST(x) x#endif#ifndef EX_RETVAL#define EX_RETVAL(x) x#endif#ifndef LOAD#define LOAD(type,addr,dest) type [addr], dest#endif#ifndef STORE#define STORE(type,src,addr) type src, [addr]#endif#ifndef FUNC_NAME#define FUNC_NAME GENmemcpy#endif#ifndef PREAMBLE#define PREAMBLE#endif#ifndef XCC#define XCC xcc#endif .register %g2,#scratch .register %g3,#scratch .text .align 64 .globl FUNC_NAME .type FUNC_NAME,#functionFUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ srlx %o2, 31, %g2 cmp %g2, 0 tne %XCC, 5 PREAMBLE mov %o0, GLOBAL_SPARE cmp %o2, 0 be,pn %XCC, 85f or %o0, %o1, %o3 cmp %o2, 16 blu,a,pn %XCC, 80f or %o3, %o2, %o3 xor %o0, %o1, %o4 andcc %o4, 0x7, %g0 bne,a,pn %XCC, 90f sub %o0, %o1, %o3 and %o0, 0x7, %o4 sub %o4, 0x8, %o4 sub %g0, %o4, %o4 sub %o2, %o4, %o21: subcc %o4, 1, %o4 EX_LD(LOAD(ldub, %o1, %g1)) EX_ST(STORE(stb, %g1, %o0)) add %o1, 1, %o1 bne,pt %XCC, 1b add %o0, 1, %o0 andn %o2, 0x7, %g1 sub %o2, %g1, %o21: subcc %g1, 0x8, %g1 EX_LD(LOAD(ldx, %o1, %g2)) EX_ST(STORE(stx, %g2, %o0)) add %o1, 0x8, %o1 bne,pt %XCC, 1b add %o0, 0x8, %o0 brz,pt %o2, 85f sub %o0, %o1, %o3 ba,a,pt %XCC, 90f .align 6480: /* 0 < len <= 16 */ andcc %o3, 0x3, %g0 bne,pn %XCC, 90f sub %o0, %o1, %o31: subcc %o2, 4, %o2 EX_LD(LOAD(lduw, %o1, %g1)) EX_ST(STORE(stw, %g1, %o1 + %o3)) bgu,pt %XCC, 1b add %o1, 4, %o185: retl mov EX_RETVAL(GLOBAL_SPARE), %o0 .align 3290: subcc %o2, 1, %o2 EX_LD(LOAD(ldub, %o1, %g1)) EX_ST(STORE(stb, %g1, %o1 + %o3)) bgu,pt %XCC, 90b add %o1, 1, %o1 retl mov EX_RETVAL(GLOBAL_SPARE), %o0 .size FUNC_NAME, .-FUNC_NAME
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?