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
18 EXPORT_SYMBOL(__memscan_zero)
19 EXPORT_SYMBOL(__memscan_generic)
22 /* %o0 = bufp, %o1 = size */
25 be,pt %icc, we_are_aligned
26 sethi %hi(HI_MAGIC), %o4
37 ldxa [%o0] ASI_PL, %o5
38 or %o4, %lo(HI_MAGIC), %o3
49 bne,pn %xcc, check_bytes
53 ldxa [%o0] ASI_PL, %o5
81 3: andcc %g7, 0xff, %g0
99 2: brgz,a,pt %o1, msloop
100 ldxa [%o0] ASI_PL, %o5
114 /* %o0 = addr, %o1 = c, %o2 = size */
124 ldub [%o3 + %o4], %o5
126 /* The delay slot is the same as the next insn, this is just to make it look more awful */