0001
0002
0003
0004
0005
0006
0007 #include <asm/asi.h>
0008
0009 .register %g2, #scratch
0010 .register %g3, #scratch
0011
0012 .text
0013 .align 32
0014 .globl NG4memset
0015 NG4memset:
0016 andcc %o1, 0xff, %o4
0017 be,pt %icc, 1f
0018 mov %o2, %o1
0019 sllx %o4, 8, %g1
0020 or %g1, %o4, %o2
0021 sllx %o2, 16, %g1
0022 or %g1, %o2, %o2
0023 sllx %o2, 32, %g1
0024 ba,pt %icc, 1f
0025 or %g1, %o2, %o4
0026 .size NG4memset,.-NG4memset
0027
0028 .align 32
0029 .globl NG4bzero
0030 NG4bzero:
0031 clr %o4
0032 1: cmp %o1, 16
0033 ble %icc, .Ltiny
0034 mov %o0, %o3
0035 sub %g0, %o0, %g1
0036 and %g1, 0x7, %g1
0037 brz,pt %g1, .Laligned8
0038 sub %o1, %g1, %o1
0039 1: stb %o4, [%o0 + 0x00]
0040 subcc %g1, 1, %g1
0041 bne,pt %icc, 1b
0042 add %o0, 1, %o0
0043 .Laligned8:
0044 cmp %o1, 64 + (64 - 8)
0045 ble .Lmedium
0046 sub %g0, %o0, %g1
0047 andcc %g1, (64 - 1), %g1
0048 brz,pn %g1, .Laligned64
0049 sub %o1, %g1, %o1
0050 1: stx %o4, [%o0 + 0x00]
0051 subcc %g1, 8, %g1
0052 bne,pt %icc, 1b
0053 add %o0, 0x8, %o0
0054 .Laligned64:
0055 andn %o1, 64 - 1, %g1
0056 sub %o1, %g1, %o1
0057 brnz,pn %o4, .Lnon_bzero_loop
0058 mov 0x20, %g2
0059 1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
0060 subcc %g1, 0x40, %g1
0061 stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
0062 bne,pt %icc, 1b
0063 add %o0, 0x40, %o0
0064 .Lpostloop:
0065 cmp %o1, 8
0066 bl,pn %icc, .Ltiny
0067 membar #StoreStore|#StoreLoad
0068 .Lmedium:
0069 andn %o1, 0x7, %g1
0070 sub %o1, %g1, %o1
0071 1: stx %o4, [%o0 + 0x00]
0072 subcc %g1, 0x8, %g1
0073 bne,pt %icc, 1b
0074 add %o0, 0x08, %o0
0075 andcc %o1, 0x4, %g1
0076 be,pt %icc, .Ltiny
0077 sub %o1, %g1, %o1
0078 stw %o4, [%o0 + 0x00]
0079 add %o0, 0x4, %o0
0080 .Ltiny:
0081 cmp %o1, 0
0082 be,pn %icc, .Lexit
0083 1: subcc %o1, 1, %o1
0084 stb %o4, [%o0 + 0x00]
0085 bne,pt %icc, 1b
0086 add %o0, 1, %o0
0087 .Lexit:
0088 retl
0089 mov %o3, %o0
0090 .Lnon_bzero_loop:
0091 mov 0x08, %g3
0092 mov 0x28, %o5
0093 1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
0094 subcc %g1, 0x40, %g1
0095 stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
0096 stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
0097 stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
0098 add %o0, 0x10, %o0
0099 stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
0100 stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
0101 stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
0102 stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
0103 bne,pt %icc, 1b
0104 add %o0, 0x30, %o0
0105 ba,a,pt %icc, .Lpostloop
0106 nop
0107 .size NG4bzero,.-NG4bzero