1/* memset/bzero -- set memory area to CH/0 2 Highly optimized version for ix86, x>=6. 3 Copyright (C) 1999-2022 Free Software Foundation, Inc. 4 This file is part of the GNU C Library. 5 6 The GNU C Library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 The GNU C Library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with the GNU C Library; if not, see 18 <https://www.gnu.org/licenses/>. */ 19 20#include <sysdep.h> 21#include "asm-syntax.h" 22 23#define PARMS 4+4 /* space for 1 saved reg */ 24#define RTN PARMS 25#define DEST RTN 26#define CHR DEST+4 27#define LEN CHR+4 28 29 .text 30#if defined SHARED && IS_IN (libc) 31ENTRY_CHK (__memset_chk) 32 movl 12(%esp), %eax 33 cmpl %eax, 16(%esp) 34 jb HIDDEN_JUMPTARGET (__chk_fail) 35END_CHK (__memset_chk) 36#endif 37ENTRY (memset) 38 39 cld 40 pushl %edi 41 cfi_adjust_cfa_offset (4) 42 movl DEST(%esp), %edx 43 movl LEN(%esp), %ecx 44 movzbl CHR(%esp), %eax 45 jecxz 1f 46 movl %edx, %edi 47 cfi_rel_offset (edi, 0) 48 andl $3, %edx 49 jz 2f /* aligned */ 50 jp 3f /* misaligned at 3, store just one byte below */ 51 stosb /* misaligned at 1 or 2, store two bytes */ 52 decl %ecx 53 jz 1f 543: stosb 55 decl %ecx 56 jz 1f 57 xorl $1, %edx 58 jnz 2f /* was misaligned at 2 or 3, now aligned */ 59 stosb /* was misaligned at 1, store third byte */ 60 decl %ecx 612: movl %ecx, %edx 62 shrl $2, %ecx 63 andl $3, %edx 64 imul $0x01010101, %eax 65 rep 66 stosl 67 movl %edx, %ecx 68 rep 69 stosb 70 711: 72 movl DEST(%esp), %eax /* start address of destination is result */ 73 popl %edi 74 cfi_adjust_cfa_offset (-4) 75 cfi_restore (edi) 76 77 ret 78END (memset) 79libc_hidden_builtin_def (memset) 80