1/* memset with SSE2. 2 All versions must be listed in ifunc-impl-list.c. 3 Copyright (C) 2014-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 <isa-level.h> 21 22/* MINIMUM_X86_ISA_LEVEL <= 2 because there is no V2 implementation 23 so we need this to build for ISA V2 builds. */ 24#if ISA_SHOULD_BUILD (2) 25 26# include <sysdep.h> 27# define USE_WITH_SSE2 1 28 29# define VEC_SIZE 16 30# define MOV_SIZE 3 31# define RET_SIZE 1 32 33# define VEC(i) xmm##i 34# define VMOVU movups 35# define VMOVA movaps 36 37# define MEMSET_SET_VEC0_AND_SET_RETURN(d, r) \ 38 movd d, %xmm0; \ 39 movq r, %rax; \ 40 punpcklbw %xmm0, %xmm0; \ 41 punpcklwd %xmm0, %xmm0; \ 42 pshufd $0, %xmm0, %xmm0 43 44# define WMEMSET_SET_VEC0_AND_SET_RETURN(d, r) \ 45 movd d, %xmm0; \ 46 pshufd $0, %xmm0, %xmm0; \ 47 movq r, %rax 48 49# define MEMSET_VDUP_TO_VEC0_HIGH() 50# define MEMSET_VDUP_TO_VEC0_LOW() 51 52# define WMEMSET_VDUP_TO_VEC0_HIGH() 53# define WMEMSET_VDUP_TO_VEC0_LOW() 54 55# define SECTION(p) p 56 57# ifndef MEMSET_SYMBOL 58# define MEMSET_SYMBOL(p,s) p##_sse2_##s 59# endif 60 61# ifndef WMEMSET_SYMBOL 62# define WMEMSET_SYMBOL(p,s) p##_sse2_##s 63# endif 64 65# include "memset-vec-unaligned-erms.S" 66 67#endif 68