1 /* Function sincosf vectorized with SSE2.
2 Copyright (C) 2014-2017 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
20 #include "svml_s_wrapper_impl.h"
23 ENTRY (_ZGVbN4vl4l4_sincosf)
24 WRAPPER_IMPL_SSE2_fFF sincosf
25 END (_ZGVbN4vl4l4_sincosf)
26 libmvec_hidden_def (_ZGVbN4vl4l4_sincosf)
28 /* SSE2 ISA version as wrapper to scalar (for vector
29 function declared with #pragma omp declare simd notinbranch). */
30 .macro WRAPPER_IMPL_SSE2_fFF_vvv callee
33 cfi_adjust_cfa_offset(120)
34 movaps %xmm0, 96(%rsp)
36 movdqa %xmm1, 32(%rdi)
38 movdqa %xmm2, 32(%rsi)
39 movdqa %xmm3, 48(%rsi)
40 movdqa %xmm4, 64(%rsi)
41 call JUMPTARGET(\callee)
42 movss 100(%rsp), %xmm0
45 call JUMPTARGET(\callee)
46 movss 104(%rsp), %xmm0
49 call JUMPTARGET(\callee)
50 movss 108(%rsp), %xmm0
53 call JUMPTARGET(\callee)
79 cfi_adjust_cfa_offset(-120)
83 .cfi_def_cfa_offset 16
86 .cfi_def_cfa_offset 24
89 .cfi_def_cfa_offset 112
93 movaps %xmm2, 16(%esp)
96 movaps %xmm0, 32(%esp)
97 call JUMPTARGET(\callee)
98 movups 36(%esp), %xmm0
101 call JUMPTARGET(\callee)
102 movups 40(%esp), %xmm0
105 call JUMPTARGET(\callee)
106 movups 44(%esp), %xmm0
109 call JUMPTARGET(\callee)
111 movss 48(%esp), %xmm0
113 movdqa 16(%esp), %xmm7
115 movss 52(%esp), %xmm0
116 pextrd $1, %xmm4, %eax
119 movss 56(%esp), %xmm0
121 movss 60(%esp), %xmm0
122 pextrd $3, %xmm4, %eax
125 movss 64(%esp), %xmm0
127 movss 68(%esp), %xmm0
128 pextrd $1, %xmm7, %eax
131 movss 72(%esp), %xmm0
133 movss 76(%esp), %xmm0
134 pextrd $3, %xmm7, %eax
137 .cfi_def_cfa_offset 24
139 .cfi_def_cfa_offset 16
141 .cfi_def_cfa_offset 8
146 ENTRY (_ZGVbN4vvv_sincosf)
147 WRAPPER_IMPL_SSE2_fFF_vvv sincosf
148 END (_ZGVbN4vvv_sincosf)
150 #ifndef USE_MULTIARCH
151 libmvec_hidden_def (_ZGVbN4vvv_sincosf)