1 1.1.1.10 mrg /* Copyright (C) 2012-2024 Free Software Foundation, Inc. 2 1.1 mrg 3 1.1 mrg This file is part of GCC. 4 1.1 mrg 5 1.1 mrg GCC is free software; you can redistribute it and/or modify it 6 1.1 mrg under the terms of the GNU General Public License as published by 7 1.1 mrg the Free Software Foundation; either version 3, or (at your option) 8 1.1 mrg any later version. 9 1.1 mrg 10 1.1 mrg GCC is distributed in the hope that it will be useful, but WITHOUT 11 1.1 mrg ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12 1.1 mrg or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 13 1.1 mrg License for more details. 14 1.1 mrg 15 1.1 mrg Under Section 7 of GPL version 3, you are granted additional 16 1.1 mrg permissions described in the GCC Runtime Library Exception, version 17 1.1 mrg 3.1, as published by the Free Software Foundation. 18 1.1 mrg 19 1.1 mrg You should have received a copy of the GNU General Public License and 20 1.1 mrg a copy of the GCC Runtime Library Exception along with this program; 21 1.1 mrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 22 1.1 mrg <http://www.gnu.org/licenses/>. */ 23 1.1 mrg 24 1.1 mrg /* This file must be kept in sync with newlib/libc/machine/visium/memset.c */ 25 1.1 mrg 26 1.1 mrg #include <stddef.h> 27 1.1 mrg #include "memset.h" 28 1.1 mrg 29 1.1 mrg #define SET_32_OBJECTS(out) \ 30 1.1 mrg do { \ 31 1.1 mrg out [0] = m0; \ 32 1.1 mrg out [1] = m0; \ 33 1.1 mrg out [2] = m0; \ 34 1.1 mrg out [3] = m0; \ 35 1.1 mrg out [4] = m0; \ 36 1.1 mrg out [5] = m0; \ 37 1.1 mrg out [6] = m0; \ 38 1.1 mrg out [7] = m0; \ 39 1.1 mrg out [8] = m0; \ 40 1.1 mrg out [9] = m0; \ 41 1.1 mrg out [10] = m0; \ 42 1.1 mrg out [11] = m0; \ 43 1.1 mrg out [12] = m0; \ 44 1.1 mrg out [13] = m0; \ 45 1.1 mrg out [14] = m0; \ 46 1.1 mrg out [15] = m0; \ 47 1.1 mrg out [16] = m0; \ 48 1.1 mrg out [17] = m0; \ 49 1.1 mrg out [18] = m0; \ 50 1.1 mrg out [19] = m0; \ 51 1.1 mrg out [20] = m0; \ 52 1.1 mrg out [21] = m0; \ 53 1.1 mrg out [22] = m0; \ 54 1.1 mrg out [23] = m0; \ 55 1.1 mrg out [24] = m0; \ 56 1.1 mrg out [25] = m0; \ 57 1.1 mrg out [26] = m0; \ 58 1.1 mrg out [27] = m0; \ 59 1.1 mrg out [28] = m0; \ 60 1.1 mrg out [29] = m0; \ 61 1.1 mrg out [30] = m0; \ 62 1.1 mrg out [31] = m0; \ 63 1.1 mrg out += 32; \ 64 1.1 mrg } while(0) 65 1.1 mrg 66 1.1 mrg #define SET_16_OBJECTS(out) \ 67 1.1 mrg do { \ 68 1.1 mrg out [0] = m0; \ 69 1.1 mrg out [1] = m0; \ 70 1.1 mrg out [2] = m0; \ 71 1.1 mrg out [3] = m0; \ 72 1.1 mrg out [4] = m0; \ 73 1.1 mrg out [5] = m0; \ 74 1.1 mrg out [6] = m0; \ 75 1.1 mrg out [7] = m0; \ 76 1.1 mrg out [8] = m0; \ 77 1.1 mrg out [9] = m0; \ 78 1.1 mrg out [10] = m0; \ 79 1.1 mrg out [11] = m0; \ 80 1.1 mrg out [12] = m0; \ 81 1.1 mrg out [13] = m0; \ 82 1.1 mrg out [14] = m0; \ 83 1.1 mrg out [15] = m0; \ 84 1.1 mrg out += 16; \ 85 1.1 mrg } while(0) 86 1.1 mrg 87 1.1 mrg #define SET_12_OBJECTS(out) \ 88 1.1 mrg do { \ 89 1.1 mrg out [0] = m0; \ 90 1.1 mrg out [1] = m0; \ 91 1.1 mrg out [2] = m0; \ 92 1.1 mrg out [3] = m0; \ 93 1.1 mrg out [4] = m0; \ 94 1.1 mrg out [5] = m0; \ 95 1.1 mrg out [6] = m0; \ 96 1.1 mrg out [7] = m0; \ 97 1.1 mrg out [8] = m0; \ 98 1.1 mrg out [9] = m0; \ 99 1.1 mrg out [10] = m0; \ 100 1.1 mrg out [11] = m0; \ 101 1.1 mrg out += 12; \ 102 1.1 mrg } while(0) 103 1.1 mrg 104 1.1 mrg #define SET_11_OBJECTS(out) \ 105 1.1 mrg do { \ 106 1.1 mrg out [0] = m0; \ 107 1.1 mrg out [1] = m0; \ 108 1.1 mrg out [2] = m0; \ 109 1.1 mrg out [3] = m0; \ 110 1.1 mrg out [4] = m0; \ 111 1.1 mrg out [5] = m0; \ 112 1.1 mrg out [6] = m0; \ 113 1.1 mrg out [7] = m0; \ 114 1.1 mrg out [8] = m0; \ 115 1.1 mrg out [9] = m0; \ 116 1.1 mrg out [10] = m0; \ 117 1.1 mrg out += 11; \ 118 1.1 mrg } while(0) 119 1.1 mrg 120 1.1 mrg #define SET_10_OBJECTS(out) \ 121 1.1 mrg do { \ 122 1.1 mrg out [0] = m0; \ 123 1.1 mrg out [1] = m0; \ 124 1.1 mrg out [2] = m0; \ 125 1.1 mrg out [3] = m0; \ 126 1.1 mrg out [4] = m0; \ 127 1.1 mrg out [5] = m0; \ 128 1.1 mrg out [6] = m0; \ 129 1.1 mrg out [7] = m0; \ 130 1.1 mrg out [8] = m0; \ 131 1.1 mrg out [9] = m0; \ 132 1.1 mrg out += 10; \ 133 1.1 mrg } while(0) 134 1.1 mrg 135 1.1 mrg #define SET_9_OBJECTS(out) \ 136 1.1 mrg do { \ 137 1.1 mrg out [0] = m0; \ 138 1.1 mrg out [1] = m0; \ 139 1.1 mrg out [2] = m0; \ 140 1.1 mrg out [3] = m0; \ 141 1.1 mrg out [4] = m0; \ 142 1.1 mrg out [5] = m0; \ 143 1.1 mrg out [6] = m0; \ 144 1.1 mrg out [7] = m0; \ 145 1.1 mrg out [8] = m0; \ 146 1.1 mrg out += 9; \ 147 1.1 mrg } while(0) 148 1.1 mrg 149 1.1 mrg #define SET_8_OBJECTS(out) \ 150 1.1 mrg do { \ 151 1.1 mrg out [0] = m0; \ 152 1.1 mrg out [1] = m0; \ 153 1.1 mrg out [2] = m0; \ 154 1.1 mrg out [3] = m0; \ 155 1.1 mrg out [4] = m0; \ 156 1.1 mrg out [5] = m0; \ 157 1.1 mrg out [6] = m0; \ 158 1.1 mrg out [7] = m0; \ 159 1.1 mrg out += 8; \ 160 1.1 mrg } while(0) 161 1.1 mrg 162 1.1 mrg #define SET_7_OBJECTS(out) \ 163 1.1 mrg do { \ 164 1.1 mrg out [0] = m0; \ 165 1.1 mrg out [1] = m0; \ 166 1.1 mrg out [2] = m0; \ 167 1.1 mrg out [3] = m0; \ 168 1.1 mrg out [4] = m0; \ 169 1.1 mrg out [5] = m0; \ 170 1.1 mrg out [6] = m0; \ 171 1.1 mrg out += 7; \ 172 1.1 mrg } while(0) 173 1.1 mrg 174 1.1 mrg #define SET_6_OBJECTS(out) \ 175 1.1 mrg do { \ 176 1.1 mrg out [0] = m0; \ 177 1.1 mrg out [1] = m0; \ 178 1.1 mrg out [2] = m0; \ 179 1.1 mrg out [3] = m0; \ 180 1.1 mrg out [4] = m0; \ 181 1.1 mrg out [5] = m0; \ 182 1.1 mrg out += 6; \ 183 1.1 mrg } while(0) 184 1.1 mrg 185 1.1 mrg #define SET_5_OBJECTS(out) \ 186 1.1 mrg do { \ 187 1.1 mrg out [0] = m0; \ 188 1.1 mrg out [1] = m0; \ 189 1.1 mrg out [2] = m0; \ 190 1.1 mrg out [3] = m0; \ 191 1.1 mrg out [4] = m0; \ 192 1.1 mrg out += 5; \ 193 1.1 mrg } while(0) 194 1.1 mrg 195 1.1 mrg #define SET_4_OBJECTS(out) \ 196 1.1 mrg do { \ 197 1.1 mrg out [0] = m0; \ 198 1.1 mrg out [1] = m0; \ 199 1.1 mrg out [2] = m0; \ 200 1.1 mrg out [3] = m0; \ 201 1.1 mrg out += 4; \ 202 1.1 mrg } while(0) 203 1.1 mrg 204 1.1 mrg #define SET_3_OBJECTS(out) \ 205 1.1 mrg do { \ 206 1.1 mrg out [0] = m0; \ 207 1.1 mrg out [1] = m0; \ 208 1.1 mrg out [2] = m0; \ 209 1.1 mrg out += 3; \ 210 1.1 mrg } while(0) 211 1.1 mrg 212 1.1 mrg #define SET_2_OBJECTS(out) \ 213 1.1 mrg do { \ 214 1.1 mrg out [0] = m0; \ 215 1.1 mrg out [1] = m0; \ 216 1.1 mrg out += 2; \ 217 1.1 mrg } while(0) 218 1.1 mrg 219 1.1 mrg #define SET_1_OBJECT(out) \ 220 1.1 mrg do { \ 221 1.1 mrg out [0] = m0; \ 222 1.1 mrg out += 1; \ 223 1.1 mrg } while(0) 224 1.1 mrg 225 1.1 mrg 226 1.1 mrg static inline void 227 1.1 mrg __int_memset (void *__restrict s1, int val, size_t n) 228 1.1 mrg { 229 1.1 mrg int value = n; 230 1.1 mrg int loop_var; 231 1.1 mrg int *out = s1; 232 1.1 mrg int count; 233 1.1 mrg int m0 = val; 234 1.1 mrg 235 1.1 mrg /* This code currently give a stall for any value with a 1->2 in the low 5 236 1.1 mrg bits, i.e. 1,2, 33,34 ? not acceptable! */ 237 1.1 mrg switch (value & 0x1f) 238 1.1 mrg { 239 1.1 mrg case 0: 240 1.1 mrg break; 241 1.1 mrg case 1: 242 1.1 mrg SET_1_OBJECT (out); 243 1.1 mrg break; 244 1.1 mrg case 2: 245 1.1 mrg SET_2_OBJECTS (out); 246 1.1 mrg break; 247 1.1 mrg case 3: 248 1.1 mrg SET_3_OBJECTS (out); 249 1.1 mrg break; 250 1.1 mrg case 4: 251 1.1 mrg SET_4_OBJECTS (out); 252 1.1 mrg break; 253 1.1 mrg case 5: 254 1.1 mrg SET_5_OBJECTS (out); 255 1.1 mrg break; 256 1.1 mrg case 6: 257 1.1 mrg SET_6_OBJECTS (out); 258 1.1 mrg break; 259 1.1 mrg case 7: 260 1.1 mrg SET_7_OBJECTS (out); 261 1.1 mrg break; 262 1.1 mrg case 8: 263 1.1 mrg SET_8_OBJECTS (out); 264 1.1 mrg break; 265 1.1 mrg case 9: 266 1.1 mrg SET_9_OBJECTS (out); 267 1.1 mrg break; 268 1.1 mrg case 10: 269 1.1 mrg SET_10_OBJECTS (out); 270 1.1 mrg break; 271 1.1 mrg case 11: 272 1.1 mrg SET_11_OBJECTS (out); 273 1.1 mrg break; 274 1.1 mrg case 12: 275 1.1 mrg SET_12_OBJECTS (out); 276 1.1 mrg break; 277 1.1 mrg case 13: 278 1.1 mrg SET_9_OBJECTS (out); 279 1.1 mrg SET_4_OBJECTS (out); 280 1.1 mrg break; 281 1.1 mrg case 14: 282 1.1 mrg SET_12_OBJECTS (out); 283 1.1 mrg SET_2_OBJECTS (out); 284 1.1 mrg break; 285 1.1 mrg case 15: 286 1.1 mrg SET_11_OBJECTS (out); 287 1.1 mrg SET_4_OBJECTS (out); 288 1.1 mrg break; 289 1.1 mrg case 16: 290 1.1 mrg SET_16_OBJECTS (out); 291 1.1 mrg break; 292 1.1 mrg case 17: 293 1.1 mrg SET_11_OBJECTS (out); 294 1.1 mrg SET_6_OBJECTS (out); 295 1.1 mrg break; 296 1.1 mrg case 18: 297 1.1 mrg SET_9_OBJECTS (out); 298 1.1 mrg SET_9_OBJECTS (out); 299 1.1 mrg break; 300 1.1 mrg case 19: 301 1.1 mrg SET_16_OBJECTS (out); 302 1.1 mrg SET_3_OBJECTS (out); 303 1.1 mrg break; 304 1.1 mrg case 20: 305 1.1 mrg SET_16_OBJECTS (out); 306 1.1 mrg SET_4_OBJECTS (out); 307 1.1 mrg break; 308 1.1 mrg case 21: 309 1.1 mrg SET_16_OBJECTS (out); 310 1.1 mrg SET_5_OBJECTS (out); 311 1.1 mrg break; 312 1.1 mrg case 22: 313 1.1 mrg SET_16_OBJECTS (out); 314 1.1 mrg SET_6_OBJECTS (out); 315 1.1 mrg break; 316 1.1 mrg case 23: 317 1.1 mrg SET_16_OBJECTS (out); 318 1.1 mrg SET_7_OBJECTS (out); 319 1.1 mrg break; 320 1.1 mrg case 24: 321 1.1 mrg SET_16_OBJECTS (out); 322 1.1 mrg SET_8_OBJECTS (out); 323 1.1 mrg break; 324 1.1 mrg case 25: 325 1.1 mrg SET_16_OBJECTS (out); 326 1.1 mrg SET_9_OBJECTS (out); 327 1.1 mrg break; 328 1.1 mrg case 26: 329 1.1 mrg SET_16_OBJECTS (out); 330 1.1 mrg SET_10_OBJECTS (out); 331 1.1 mrg break; 332 1.1 mrg case 27: 333 1.1 mrg SET_16_OBJECTS (out); 334 1.1 mrg SET_11_OBJECTS (out); 335 1.1 mrg break; 336 1.1 mrg case 28: 337 1.1 mrg SET_16_OBJECTS (out); 338 1.1 mrg SET_8_OBJECTS (out); 339 1.1 mrg SET_4_OBJECTS (out); 340 1.1 mrg break; 341 1.1 mrg case 29: 342 1.1 mrg SET_16_OBJECTS (out); 343 1.1 mrg SET_9_OBJECTS (out); 344 1.1 mrg SET_4_OBJECTS (out); 345 1.1 mrg break; 346 1.1 mrg case 30: 347 1.1 mrg SET_16_OBJECTS (out); 348 1.1 mrg SET_12_OBJECTS (out); 349 1.1 mrg SET_2_OBJECTS (out); 350 1.1 mrg break; 351 1.1 mrg case 31: 352 1.1 mrg SET_16_OBJECTS (out); 353 1.1 mrg SET_11_OBJECTS (out); 354 1.1 mrg SET_4_OBJECTS (out); 355 1.1 mrg break; 356 1.1 mrg } 357 1.1 mrg 358 1.1 mrg /* This loop governs the asmptoptic behaviour of this algorithm, for long 359 1.1 mrg word copies. */ 360 1.1 mrg count = value >> 5; 361 1.1 mrg for (loop_var = 0; loop_var < count; loop_var++) 362 1.1 mrg SET_32_OBJECTS (out); 363 1.1 mrg } 364 1.1 mrg 365 1.1 mrg static inline void 366 1.1 mrg __short_int_memset (void *__restrict s1, int val, size_t n) 367 1.1 mrg { 368 1.1 mrg int value = n; 369 1.1 mrg int loop_var; 370 1.1 mrg int short *out = s1; 371 1.1 mrg int count; 372 1.1 mrg int m0 = val; 373 1.1 mrg 374 1.1 mrg /* This code currently give a stall for any value with a 1->2 in the low 5 375 1.1 mrg bits, i.e. 1,2, 33,34 ? not acceptable! */ 376 1.1 mrg switch (value & 0x1f) 377 1.1 mrg { 378 1.1 mrg case 0: 379 1.1 mrg break; 380 1.1 mrg case 1: 381 1.1 mrg SET_1_OBJECT (out); 382 1.1 mrg break; 383 1.1 mrg case 2: 384 1.1 mrg SET_2_OBJECTS (out); 385 1.1 mrg break; 386 1.1 mrg case 3: 387 1.1 mrg SET_3_OBJECTS (out); 388 1.1 mrg break; 389 1.1 mrg case 4: 390 1.1 mrg SET_4_OBJECTS (out); 391 1.1 mrg break; 392 1.1 mrg case 5: 393 1.1 mrg SET_5_OBJECTS (out); 394 1.1 mrg break; 395 1.1 mrg case 6: 396 1.1 mrg SET_6_OBJECTS (out); 397 1.1 mrg break; 398 1.1 mrg case 7: 399 1.1 mrg SET_7_OBJECTS (out); 400 1.1 mrg break; 401 1.1 mrg case 8: 402 1.1 mrg SET_8_OBJECTS (out); 403 1.1 mrg break; 404 1.1 mrg case 9: 405 1.1 mrg SET_9_OBJECTS (out); 406 1.1 mrg break; 407 1.1 mrg case 10: 408 1.1 mrg SET_10_OBJECTS (out); 409 1.1 mrg break; 410 1.1 mrg case 11: 411 1.1 mrg SET_11_OBJECTS (out); 412 1.1 mrg break; 413 1.1 mrg case 12: 414 1.1 mrg SET_12_OBJECTS (out); 415 1.1 mrg break; 416 1.1 mrg case 13: 417 1.1 mrg SET_9_OBJECTS (out); 418 1.1 mrg SET_4_OBJECTS (out); 419 1.1 mrg break; 420 1.1 mrg case 14: 421 1.1 mrg SET_12_OBJECTS (out); 422 1.1 mrg SET_2_OBJECTS (out); 423 1.1 mrg break; 424 1.1 mrg case 15: 425 1.1 mrg SET_11_OBJECTS (out); 426 1.1 mrg SET_4_OBJECTS (out); 427 1.1 mrg break; 428 1.1 mrg case 16: 429 1.1 mrg SET_16_OBJECTS (out); 430 1.1 mrg break; 431 1.1 mrg case 17: 432 1.1 mrg SET_11_OBJECTS (out); 433 1.1 mrg SET_6_OBJECTS (out); 434 1.1 mrg break; 435 1.1 mrg case 18: 436 1.1 mrg SET_9_OBJECTS (out); 437 1.1 mrg SET_9_OBJECTS (out); 438 1.1 mrg break; 439 1.1 mrg case 19: 440 1.1 mrg SET_16_OBJECTS (out); 441 1.1 mrg SET_3_OBJECTS (out); 442 1.1 mrg break; 443 1.1 mrg case 20: 444 1.1 mrg SET_16_OBJECTS (out); 445 1.1 mrg SET_4_OBJECTS (out); 446 1.1 mrg break; 447 1.1 mrg case 21: 448 1.1 mrg SET_16_OBJECTS (out); 449 1.1 mrg SET_5_OBJECTS (out); 450 1.1 mrg break; 451 1.1 mrg case 22: 452 1.1 mrg SET_16_OBJECTS (out); 453 1.1 mrg SET_6_OBJECTS (out); 454 1.1 mrg break; 455 1.1 mrg case 23: 456 1.1 mrg SET_16_OBJECTS (out); 457 1.1 mrg SET_7_OBJECTS (out); 458 1.1 mrg break; 459 1.1 mrg case 24: 460 1.1 mrg SET_16_OBJECTS (out); 461 1.1 mrg SET_8_OBJECTS (out); 462 1.1 mrg break; 463 1.1 mrg case 25: 464 1.1 mrg SET_16_OBJECTS (out); 465 1.1 mrg SET_9_OBJECTS (out); 466 1.1 mrg break; 467 1.1 mrg case 26: 468 1.1 mrg SET_16_OBJECTS (out); 469 1.1 mrg SET_10_OBJECTS (out); 470 1.1 mrg break; 471 1.1 mrg case 27: 472 1.1 mrg SET_16_OBJECTS (out); 473 1.1 mrg SET_11_OBJECTS (out); 474 1.1 mrg break; 475 1.1 mrg case 28: 476 1.1 mrg SET_16_OBJECTS (out); 477 1.1 mrg SET_8_OBJECTS (out); 478 1.1 mrg SET_4_OBJECTS (out); 479 1.1 mrg break; 480 1.1 mrg case 29: 481 1.1 mrg SET_16_OBJECTS (out); 482 1.1 mrg SET_9_OBJECTS (out); 483 1.1 mrg SET_4_OBJECTS (out); 484 1.1 mrg break; 485 1.1 mrg case 30: 486 1.1 mrg SET_16_OBJECTS (out); 487 1.1 mrg SET_12_OBJECTS (out); 488 1.1 mrg SET_2_OBJECTS (out); 489 1.1 mrg break; 490 1.1 mrg case 31: 491 1.1 mrg SET_16_OBJECTS (out); 492 1.1 mrg SET_11_OBJECTS (out); 493 1.1 mrg SET_4_OBJECTS (out); 494 1.1 mrg break; 495 1.1 mrg } 496 1.1 mrg 497 1.1 mrg /* This loop governs the asmptoptic behaviour of this algorithm, for long 498 1.1 mrg word copies. */ 499 1.1 mrg count = value >> 5; 500 1.1 mrg for (loop_var = 0; loop_var < count; loop_var++) 501 1.1 mrg SET_32_OBJECTS (out); 502 1.1 mrg } 503 1.1 mrg 504 1.1 mrg static inline void 505 1.1 mrg __byte_memset (void *__restrict s1, int val, size_t n) 506 1.1 mrg { 507 1.1 mrg int value = n; 508 1.1 mrg int loop_var; 509 1.1 mrg char *out = s1; 510 1.1 mrg int count; 511 1.1 mrg int m0 = val; 512 1.1 mrg 513 1.1 mrg /* This code currently give a stall for any value with a 1->2 in the low 5 514 1.1 mrg bits, i.e. 1,2, 33,34 ? not acceptable! */ 515 1.1 mrg switch (value & 0x1f) 516 1.1 mrg { 517 1.1 mrg case 0: 518 1.1 mrg break; 519 1.1 mrg case 1: 520 1.1 mrg SET_1_OBJECT (out); 521 1.1 mrg break; 522 1.1 mrg case 2: 523 1.1 mrg SET_2_OBJECTS (out); 524 1.1 mrg break; 525 1.1 mrg case 3: 526 1.1 mrg SET_3_OBJECTS (out); 527 1.1 mrg break; 528 1.1 mrg case 4: 529 1.1 mrg SET_4_OBJECTS (out); 530 1.1 mrg break; 531 1.1 mrg case 5: 532 1.1 mrg SET_5_OBJECTS (out); 533 1.1 mrg break; 534 1.1 mrg case 6: 535 1.1 mrg SET_6_OBJECTS (out); 536 1.1 mrg break; 537 1.1 mrg case 7: 538 1.1 mrg SET_7_OBJECTS (out); 539 1.1 mrg break; 540 1.1 mrg case 8: 541 1.1 mrg SET_8_OBJECTS (out); 542 1.1 mrg break; 543 1.1 mrg case 9: 544 1.1 mrg SET_9_OBJECTS (out); 545 1.1 mrg break; 546 1.1 mrg case 10: 547 1.1 mrg SET_10_OBJECTS (out); 548 1.1 mrg break; 549 1.1 mrg case 11: 550 1.1 mrg SET_11_OBJECTS (out); 551 1.1 mrg break; 552 1.1 mrg case 12: 553 1.1 mrg SET_12_OBJECTS (out); 554 1.1 mrg break; 555 1.1 mrg case 13: 556 1.1 mrg SET_9_OBJECTS (out); 557 1.1 mrg SET_4_OBJECTS (out); 558 1.1 mrg break; 559 1.1 mrg case 14: 560 1.1 mrg SET_12_OBJECTS (out); 561 1.1 mrg SET_2_OBJECTS (out); 562 1.1 mrg break; 563 1.1 mrg case 15: 564 1.1 mrg SET_11_OBJECTS (out); 565 1.1 mrg SET_4_OBJECTS (out); 566 1.1 mrg break; 567 1.1 mrg case 16: 568 1.1 mrg SET_16_OBJECTS (out); 569 1.1 mrg break; 570 1.1 mrg case 17: 571 1.1 mrg SET_11_OBJECTS (out); 572 1.1 mrg SET_6_OBJECTS (out); 573 1.1 mrg break; 574 1.1 mrg case 18: 575 1.1 mrg SET_9_OBJECTS (out); 576 1.1 mrg SET_9_OBJECTS (out); 577 1.1 mrg break; 578 1.1 mrg case 19: 579 1.1 mrg SET_16_OBJECTS (out); 580 1.1 mrg SET_3_OBJECTS (out); 581 1.1 mrg break; 582 1.1 mrg case 20: 583 1.1 mrg SET_16_OBJECTS (out); 584 1.1 mrg SET_4_OBJECTS (out); 585 1.1 mrg break; 586 1.1 mrg case 21: 587 1.1 mrg SET_16_OBJECTS (out); 588 1.1 mrg SET_5_OBJECTS (out); 589 1.1 mrg break; 590 1.1 mrg case 22: 591 1.1 mrg SET_16_OBJECTS (out); 592 1.1 mrg SET_6_OBJECTS (out); 593 1.1 mrg break; 594 1.1 mrg case 23: 595 1.1 mrg SET_16_OBJECTS (out); 596 1.1 mrg SET_7_OBJECTS (out); 597 1.1 mrg break; 598 1.1 mrg case 24: 599 1.1 mrg SET_16_OBJECTS (out); 600 1.1 mrg SET_8_OBJECTS (out); 601 1.1 mrg break; 602 1.1 mrg case 25: 603 1.1 mrg SET_16_OBJECTS (out); 604 1.1 mrg SET_9_OBJECTS (out); 605 1.1 mrg break; 606 1.1 mrg case 26: 607 1.1 mrg SET_16_OBJECTS (out); 608 1.1 mrg SET_10_OBJECTS (out); 609 1.1 mrg break; 610 1.1 mrg case 27: 611 1.1 mrg SET_16_OBJECTS (out); 612 1.1 mrg SET_11_OBJECTS (out); 613 1.1 mrg break; 614 1.1 mrg case 28: 615 1.1 mrg SET_16_OBJECTS (out); 616 1.1 mrg SET_8_OBJECTS (out); 617 1.1 mrg SET_4_OBJECTS (out); 618 1.1 mrg break; 619 1.1 mrg case 29: 620 1.1 mrg SET_16_OBJECTS (out); 621 1.1 mrg SET_9_OBJECTS (out); 622 1.1 mrg SET_4_OBJECTS (out); 623 1.1 mrg break; 624 1.1 mrg case 30: 625 1.1 mrg SET_16_OBJECTS (out); 626 1.1 mrg SET_12_OBJECTS (out); 627 1.1 mrg SET_2_OBJECTS (out); 628 1.1 mrg break; 629 1.1 mrg case 31: 630 1.1 mrg SET_16_OBJECTS (out); 631 1.1 mrg SET_11_OBJECTS (out); 632 1.1 mrg SET_4_OBJECTS (out); 633 1.1 mrg break; 634 1.1 mrg } 635 1.1 mrg 636 1.1 mrg /* This loop governs the asmptoptic behaviour of this algorithm, for long 637 1.1 mrg word copies. */ 638 1.1 mrg count = value >> 5; 639 1.1 mrg for (loop_var = 0; loop_var < count; loop_var++) 640 1.1 mrg SET_32_OBJECTS (out); 641 1.1 mrg } 642 1.1 mrg 643 1.1 mrg 644 1.1 mrg /* Exposed interface. */ 645 1.1 mrg 646 1.1 mrg void 647 1.1 mrg __long_int_memset (void *__restrict s, int c, size_t n) 648 1.1 mrg { 649 1.1 mrg int ic = (c << 24) + ((char) c << 16) + ((char) c << 8) + (char) c; 650 1.1 mrg __int_memset (s, ic, n); 651 1.1 mrg } 652 1.1 mrg 653 1.1 mrg void 654 1.1 mrg __wrd_memset (void *__restrict s, int c, size_t n) 655 1.1 mrg { 656 1.1 mrg int sc = ((c << 8) + (char) c); 657 1.1 mrg __short_int_memset (s, sc, n); 658 1.1 mrg } 659 1.1 mrg 660 1.1 mrg void 661 1.1 mrg __byt_memset (void *__restrict s, int c, size_t n) 662 1.1 mrg { 663 1.1 mrg __byte_memset (s, c, n); 664 1.1 mrg } 665