1/* Set a block of memory to some byte value. For SUN4V Niagara. 2 Copyright (C) 2006-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19#include <sysdep.h> 20 21#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 22#define ASI_P 0x80 23#define ASI_PNF 0x82 24 25#ifndef XCC 26#define USE_BPR 27#define XCC xcc 28#endif 29 30#if IS_IN (libc) 31 32 .register %g2,#scratch 33 34 .text 35 .align 32 36 37ENTRY(__memset_niagara1) 38 /* %o0=buf, %o1=pat, %o2=len */ 39 and %o1, 0xff, %o3 40 mov %o2, %o1 41 sllx %o3, 8, %g1 42 or %g1, %o3, %o2 43 sllx %o2, 16, %g1 44 or %g1, %o2, %o2 45 sllx %o2, 32, %g1 46 ba,pt %XCC, 1f 47 or %g1, %o2, %o2 48 clr %o2 491: 50# ifndef USE_BRP 51 srl %o1, 0, %o1 52# endif 53 brz,pn %o1, 90f 54 mov %o0, %o3 55 56 wr %g0, ASI_P, %asi 57 58 cmp %o1, 15 59 blu,pn %XCC, 70f 60 andcc %o0, 0x7, %g1 61 be,pt %XCC, 2f 62 mov 8, %g2 63 sub %g2, %g1, %g1 64 sub %o1, %g1, %o1 651: stba %o2, [%o0 + 0x00] %asi 66 subcc %g1, 1, %g1 67 bne,pt %XCC, 1b 68 add %o0, 1, %o0 692: cmp %o1, 128 70 blu,pn %XCC, 60f 71 andcc %o0, (64 - 1), %g1 72 be,pt %XCC, 40f 73 mov 64, %g2 74 sub %g2, %g1, %g1 75 sub %o1, %g1, %o1 761: stxa %o2, [%o0 + 0x00] %asi 77 subcc %g1, 8, %g1 78 bne,pt %XCC, 1b 79 add %o0, 8, %o0 80 8140: 82 wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi 83 andn %o1, (64 - 1), %g1 84 sub %o1, %g1, %o1 85 86 andn %g1, (256 - 1), %g2 87 brz,pt %g2, 50f 88 and %g1, (256 - 1), %g1 89 9045: 91 stxa %o2, [%o0 + 0x00] %asi 92 stxa %o2, [%o0 + 0x08] %asi 93 stxa %o2, [%o0 + 0x10] %asi 94 stxa %o2, [%o0 + 0x18] %asi 95 stxa %o2, [%o0 + 0x20] %asi 96 stxa %o2, [%o0 + 0x28] %asi 97 stxa %o2, [%o0 + 0x30] %asi 98 stxa %o2, [%o0 + 0x38] %asi 99 stxa %o2, [%o0 + 0x40] %asi 100 stxa %o2, [%o0 + 0x48] %asi 101 stxa %o2, [%o0 + 0x50] %asi 102 stxa %o2, [%o0 + 0x58] %asi 103 stxa %o2, [%o0 + 0x60] %asi 104 stxa %o2, [%o0 + 0x68] %asi 105 stxa %o2, [%o0 + 0x70] %asi 106 stxa %o2, [%o0 + 0x78] %asi 107 stxa %o2, [%o0 + 0x80] %asi 108 stxa %o2, [%o0 + 0x88] %asi 109 stxa %o2, [%o0 + 0x90] %asi 110 stxa %o2, [%o0 + 0x98] %asi 111 stxa %o2, [%o0 + 0xa0] %asi 112 stxa %o2, [%o0 + 0xa8] %asi 113 stxa %o2, [%o0 + 0xb0] %asi 114 stxa %o2, [%o0 + 0xb8] %asi 115 stxa %o2, [%o0 + 0xc0] %asi 116 stxa %o2, [%o0 + 0xc8] %asi 117 stxa %o2, [%o0 + 0xd0] %asi 118 stxa %o2, [%o0 + 0xd8] %asi 119 stxa %o2, [%o0 + 0xe0] %asi 120 stxa %o2, [%o0 + 0xe8] %asi 121 stxa %o2, [%o0 + 0xf0] %asi 122 stxa %o2, [%o0 + 0xf8] %asi 123 subcc %g2, 256, %g2 124 bne,pt %XCC, 45b 125 add %o0, 256, %o0 126 127 brz,pn %g1, 55f 128 nop 129 13050: 131 stxa %o2, [%o0 + 0x00] %asi 132 stxa %o2, [%o0 + 0x08] %asi 133 stxa %o2, [%o0 + 0x10] %asi 134 stxa %o2, [%o0 + 0x18] %asi 135 stxa %o2, [%o0 + 0x20] %asi 136 stxa %o2, [%o0 + 0x28] %asi 137 stxa %o2, [%o0 + 0x30] %asi 138 stxa %o2, [%o0 + 0x38] %asi 139 subcc %g1, 64, %g1 140 bne,pt %XCC, 50b 141 add %o0, 64, %o0 142 14355: 144 wr %g0, ASI_P, %asi 145 brz,pn %o1, 80f 14660: 147 andncc %o1, 0x7, %g1 148 be,pn %XCC, 2f 149 sub %o1, %g1, %o1 1501: stxa %o2, [%o0 + 0x00] %asi 151 subcc %g1, 8, %g1 152 bne,pt %XCC, 1b 153 add %o0, 8, %o0 1542: brz,pt %o1, 80f 155 nop 156 15770: 1581: stba %o2, [%o0 + 0x00] %asi 159 subcc %o1, 1, %o1 160 bne,pt %XCC, 1b 161 add %o0, 1, %o0 162 163 /* fallthrough */ 164 16580: 166 wr %g0, ASI_PNF, %asi 167 16890: 169 retl 170 mov %o3, %o0 171END(__memset_niagara1) 172 173#endif 174