2 * memscan.S: Optimized memscan for Sparc64.
4 * Copyright (C) 1997,1998 Jakub Jelinek (jj@ultra.linux.cz)
5 * Copyright (C) 1998 David S. Miller (davem@redhat.com)
8 #include <asm/export.h>
10 #define HI_MAGIC 0x8080808080808080
11 #define LO_MAGIC 0x0101010101010101
16 .globl __memscan_zero, __memscan_generic
17 .type __memscan_zero,#function
18 .type __memscan_generic,#function
20 EXPORT_SYMBOL(__memscan_zero)
21 EXPORT_SYMBOL(__memscan_generic)
24 /* %o0 = bufp, %o1 = size */
27 be,pt %icc, we_are_aligned
28 sethi %hi(HI_MAGIC), %o4
39 ldxa [%o0] ASI_PL, %o5
40 or %o4, %lo(HI_MAGIC), %o3
51 bne,pn %xcc, check_bytes
55 ldxa [%o0] ASI_PL, %o5
83 3: andcc %g7, 0xff, %g0
101 2: brgz,a,pt %o1, msloop
102 ldxa [%o0] ASI_PL, %o5
116 /* %o0 = addr, %o1 = c, %o2 = size */
126 ldub [%o3 + %o4], %o5
128 /* The delay slot is the same as the next insn, this is just to make it look more awful */