1 /* Copyright (C) 2012-2024 Free Software Foundation, Inc.
3 This file is part of GCC.
5 GCC is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3, or (at your option)
10 GCC is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
13 License for more details.
15 Under Section 7 of GPL version 3, you are granted additional
16 permissions described in the GCC Runtime Library Exception, version
17 3.1, as published by the Free Software Foundation.
19 You should have received a copy of the GNU General Public License and
20 a copy of the GCC Runtime Library Exception along with this program;
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 <http://www.gnu.org/licenses/>. */
24 /* This file must be kept in sync with newlib/libc/machine/visium/memset.c */
29 #define SET_32_OBJECTS(out) \
66 #define SET_16_OBJECTS(out) \
87 #define SET_12_OBJECTS(out) \
104 #define SET_11_OBJECTS(out) \
120 #define SET_10_OBJECTS(out) \
135 #define SET_9_OBJECTS(out) \
149 #define SET_8_OBJECTS(out) \
162 #define SET_7_OBJECTS(out) \
174 #define SET_6_OBJECTS(out) \
185 #define SET_5_OBJECTS(out) \
195 #define SET_4_OBJECTS(out) \
204 #define SET_3_OBJECTS(out) \
212 #define SET_2_OBJECTS(out) \
219 #define SET_1_OBJECT(out) \
227 __int_memset (void *__restrict s1
, int val
, size_t n
)
235 /* This code currently give a stall for any value with a 1->2 in the low 5
236 bits, i.e. 1,2, 33,34 ? not acceptable! */
237 switch (value
& 0x1f)
269 SET_10_OBJECTS (out
);
272 SET_11_OBJECTS (out
);
275 SET_12_OBJECTS (out
);
282 SET_12_OBJECTS (out
);
286 SET_11_OBJECTS (out
);
290 SET_16_OBJECTS (out
);
293 SET_11_OBJECTS (out
);
301 SET_16_OBJECTS (out
);
305 SET_16_OBJECTS (out
);
309 SET_16_OBJECTS (out
);
313 SET_16_OBJECTS (out
);
317 SET_16_OBJECTS (out
);
321 SET_16_OBJECTS (out
);
325 SET_16_OBJECTS (out
);
329 SET_16_OBJECTS (out
);
330 SET_10_OBJECTS (out
);
333 SET_16_OBJECTS (out
);
334 SET_11_OBJECTS (out
);
337 SET_16_OBJECTS (out
);
342 SET_16_OBJECTS (out
);
347 SET_16_OBJECTS (out
);
348 SET_12_OBJECTS (out
);
352 SET_16_OBJECTS (out
);
353 SET_11_OBJECTS (out
);
358 /* This loop governs the asmptoptic behaviour of this algorithm, for long
361 for (loop_var
= 0; loop_var
< count
; loop_var
++)
362 SET_32_OBJECTS (out
);
366 __short_int_memset (void *__restrict s1
, int val
, size_t n
)
374 /* This code currently give a stall for any value with a 1->2 in the low 5
375 bits, i.e. 1,2, 33,34 ? not acceptable! */
376 switch (value
& 0x1f)
408 SET_10_OBJECTS (out
);
411 SET_11_OBJECTS (out
);
414 SET_12_OBJECTS (out
);
421 SET_12_OBJECTS (out
);
425 SET_11_OBJECTS (out
);
429 SET_16_OBJECTS (out
);
432 SET_11_OBJECTS (out
);
440 SET_16_OBJECTS (out
);
444 SET_16_OBJECTS (out
);
448 SET_16_OBJECTS (out
);
452 SET_16_OBJECTS (out
);
456 SET_16_OBJECTS (out
);
460 SET_16_OBJECTS (out
);
464 SET_16_OBJECTS (out
);
468 SET_16_OBJECTS (out
);
469 SET_10_OBJECTS (out
);
472 SET_16_OBJECTS (out
);
473 SET_11_OBJECTS (out
);
476 SET_16_OBJECTS (out
);
481 SET_16_OBJECTS (out
);
486 SET_16_OBJECTS (out
);
487 SET_12_OBJECTS (out
);
491 SET_16_OBJECTS (out
);
492 SET_11_OBJECTS (out
);
497 /* This loop governs the asmptoptic behaviour of this algorithm, for long
500 for (loop_var
= 0; loop_var
< count
; loop_var
++)
501 SET_32_OBJECTS (out
);
505 __byte_memset (void *__restrict s1
, int val
, size_t n
)
513 /* This code currently give a stall for any value with a 1->2 in the low 5
514 bits, i.e. 1,2, 33,34 ? not acceptable! */
515 switch (value
& 0x1f)
547 SET_10_OBJECTS (out
);
550 SET_11_OBJECTS (out
);
553 SET_12_OBJECTS (out
);
560 SET_12_OBJECTS (out
);
564 SET_11_OBJECTS (out
);
568 SET_16_OBJECTS (out
);
571 SET_11_OBJECTS (out
);
579 SET_16_OBJECTS (out
);
583 SET_16_OBJECTS (out
);
587 SET_16_OBJECTS (out
);
591 SET_16_OBJECTS (out
);
595 SET_16_OBJECTS (out
);
599 SET_16_OBJECTS (out
);
603 SET_16_OBJECTS (out
);
607 SET_16_OBJECTS (out
);
608 SET_10_OBJECTS (out
);
611 SET_16_OBJECTS (out
);
612 SET_11_OBJECTS (out
);
615 SET_16_OBJECTS (out
);
620 SET_16_OBJECTS (out
);
625 SET_16_OBJECTS (out
);
626 SET_12_OBJECTS (out
);
630 SET_16_OBJECTS (out
);
631 SET_11_OBJECTS (out
);
636 /* This loop governs the asmptoptic behaviour of this algorithm, for long
639 for (loop_var
= 0; loop_var
< count
; loop_var
++)
640 SET_32_OBJECTS (out
);
644 /* Exposed interface. */
647 __long_int_memset (void *__restrict s
, int c
, size_t n
)
649 int ic
= (c
<< 24) + ((char) c
<< 16) + ((char) c
<< 8) + (char) c
;
650 __int_memset (s
, ic
, n
);
654 __wrd_memset (void *__restrict s
, int c
, size_t n
)
656 int sc
= ((c
<< 8) + (char) c
);
657 __short_int_memset (s
, sc
, n
);
661 __byt_memset (void *__restrict s
, int c
, size_t n
)
663 __byte_memset (s
, c
, n
);