Home | History | Annotate | Line # | Download | only in visium
memset.c revision 1.1.1.2.4.2
      1  1.1.1.2.4.2  martin /* Copyright (C) 2012-2018 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