1/* Copyright (C) 1998-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library. If not, see 16 <https://www.gnu.org/licenses/>. */ 17 18/* Thumb requires excessive IT insns here. */ 19#define NO_THUMB 20#include <sysdep.h> 21 22 .text 23 .syntax unified 24 25/* void *memset (dstpp, c, len) */ 26 27ENTRY(memset) 28 mov r3, r0 29 cmp r2, #8 30 bcc 2f @ less than 8 bytes to move 31 321: 33 tst r3, #3 @ aligned yet? 34 strbne r1, [r3], #1 35 subne r2, r2, #1 36 bne 1b 37 38 and r1, r1, #255 @ clear any sign bits 39 orr r1, r1, r1, lsl $8 40 orr r1, r1, r1, lsl $16 41 mov ip, r1 42 431: 44 subs r2, r2, #8 45 stmiacs r3!, {r1, ip} @ store up to 32 bytes per loop iteration 46 subscs r2, r2, #8 47 stmiacs r3!, {r1, ip} 48 subscs r2, r2, #8 49 stmiacs r3!, {r1, ip} 50 subscs r2, r2, #8 51 stmiacs r3!, {r1, ip} 52 bcs 1b 53 54 and r2, r2, #7 552: 56 subs r2, r2, #1 @ store up to 4 bytes per loop iteration 57 strbcs r1, [r3], #1 58 subscs r2, r2, #1 59 strbcs r1, [r3], #1 60 subscs r2, r2, #1 61 strbcs r1, [r3], #1 62 subscs r2, r2, #1 63 strbcs r1, [r3], #1 64 bcs 2b 65 66 DO_RET(lr) 67END(memset) 68libc_hidden_builtin_def (memset) 69