Fixed wrong vector sincos/sincosf ABI to have it compatible with
[glibc.git] / sysdeps / x86_64 / fpu / multiarch / svml_s_sincosf16_core_avx512.S
blob7621e87581422237163eaa832f59912816042457
1 /* Function sincosf vectorized with AVX-512. KNL and SKX versions.
2    Copyright (C) 2014-2016 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/>.  */
19 #include <sysdep.h>
20 #include "svml_s_trig_data.h"
21 #include "svml_s_wrapper_impl.h"
24    ALGORITHM DESCRIPTION:
26      1) Range reduction to [-Pi/4; +Pi/4] interval
27         a) Grab sign from source argument and save it.
28         b) Remove sign using AND operation
29         c) Getting octant Y by 2/Pi multiplication
30         d) Add "Right Shifter" value
31         e) Treat obtained value as integer S for destination sign setting.
32            SS = ((S-S&1)&2)<<30; For sin part
33            SC = ((S+S&1)&2)<<30; For cos part
34         f) Change destination sign if source sign is negative
35            using XOR operation.
36         g) Subtract "Right Shifter" (0x4B000000) value
37         h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 4 parts:
38            X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4;
39      2) Polynomial (minimax for sin within  [-Pi/4; +Pi/4] interval)
40         a) Calculate X^2 = X * X
41         b) Calculate 2 polynomials for sin and cos:
42            RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3))));
43            RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4))));
44         c) Swap RS & RC if if first bit of obtained value after
45            Right Shifting is set to 1. Using And, Andnot & Or operations.
46      3) Destination sign setting
47         a) Set shifted destination sign using XOR operation:
48            R1 = XOR( RS, SS );
49            R2 = XOR( RC, SC ).  */
51         .text
52 ENTRY (_ZGVeN16vl4l4_sincosf_knl)
53 #ifndef HAVE_AVX512_ASM_SUPPORT
54 WRAPPER_IMPL_AVX512_fFF _ZGVdN8vl4l4_sincosf
55 #else
56         pushq     %rbp
57         cfi_adjust_cfa_offset (8)
58         cfi_rel_offset (%rbp, 0)
59         movq      %rsp, %rbp
60         cfi_def_cfa_register (%rbp)
61         andq      $-64, %rsp
62         subq      $1344, %rsp
63         movq      __svml_s_trig_data@GOTPCREL(%rip), %rax
64         vmovaps   %zmm0, %zmm2
65         movl      $-1, %edx
66         vmovups __sAbsMask(%rax), %zmm0
67         vmovups __sInvPI(%rax), %zmm3
69 /* Absolute argument computation */
70         vpandd    %zmm0, %zmm2, %zmm1
71         vmovups __sPI1_FMA(%rax), %zmm5
72         vmovups __sSignMask(%rax), %zmm9
73         vpandnd   %zmm2, %zmm0, %zmm0
75 /* h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 3 parts:
76       X = X - Y*PI1 - Y*PI2 - Y*PI3 */
77         vmovaps   %zmm1, %zmm6
78         vmovaps   %zmm1, %zmm8
80 /* c) Getting octant Y by 2/Pi multiplication
81    d) Add "Right Shifter" value */
82         vfmadd213ps __sRShifter(%rax), %zmm1, %zmm3
83         vmovups __sPI3_FMA(%rax), %zmm7
85 /* g) Subtract "Right Shifter" (0x4B000000) value */
86         vsubps __sRShifter(%rax), %zmm3, %zmm12
88 /* e) Treat obtained value as integer S for destination sign setting */
89         vpslld    $31, %zmm3, %zmm13
90         vmovups __sA7_FMA(%rax), %zmm14
91         vfnmadd231ps %zmm12, %zmm5, %zmm6
93 /* 2) Polynomial (minimax for sin within  [-Pi/4; +Pi/4] interval)
94       a) Calculate X^2 = X * X
95       b) Calculate 2 polynomials for sin and cos:
96          RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3))));
97          RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))) */
98         vmovaps   %zmm14, %zmm15
99         vmovups __sA9_FMA(%rax), %zmm3
100         vcmpps    $22, __sRangeReductionVal(%rax), %zmm1, %k1
101         vpbroadcastd %edx, %zmm1{%k1}{z}
102         vfnmadd231ps __sPI2_FMA(%rax), %zmm12, %zmm6
103         vptestmd  %zmm1, %zmm1, %k0
104         vpandd    %zmm6, %zmm9, %zmm11
105         kmovw     %k0, %ecx
106         vpxord __sOneHalf(%rax), %zmm11, %zmm4
108 /* Result sign calculations */
109         vpternlogd $150, %zmm13, %zmm9, %zmm11
111 /* Add correction term 0.5 for cos() part */
112         vaddps    %zmm4, %zmm12, %zmm10
113         vfnmadd213ps %zmm6, %zmm7, %zmm12
114         vfnmadd231ps %zmm10, %zmm5, %zmm8
115         vpxord    %zmm13, %zmm12, %zmm13
116         vmulps    %zmm13, %zmm13, %zmm12
117         vfnmadd231ps __sPI2_FMA(%rax), %zmm10, %zmm8
118         vfmadd231ps __sA9_FMA(%rax), %zmm12, %zmm15
119         vfnmadd213ps %zmm8, %zmm7, %zmm10
120         vfmadd213ps __sA5_FMA(%rax), %zmm12, %zmm15
121         vpxord    %zmm11, %zmm10, %zmm5
122         vmulps    %zmm5, %zmm5, %zmm4
123         vfmadd213ps __sA3(%rax), %zmm12, %zmm15
124         vfmadd213ps %zmm14, %zmm4, %zmm3
125         vmulps    %zmm12, %zmm15, %zmm14
126         vfmadd213ps __sA5_FMA(%rax), %zmm4, %zmm3
127         vfmadd213ps %zmm13, %zmm13, %zmm14
128         vfmadd213ps __sA3(%rax), %zmm4, %zmm3
129         vpxord    %zmm0, %zmm14, %zmm0
130         vmulps    %zmm4, %zmm3, %zmm3
131         vfmadd213ps %zmm5, %zmm5, %zmm3
132         testl     %ecx, %ecx
133         jne       .LBL_1_3
135 .LBL_1_2:
136         cfi_remember_state
137         vmovups   %zmm0, (%rdi)
138         vmovups   %zmm3, (%rsi)
139         movq      %rbp, %rsp
140         cfi_def_cfa_register (%rsp)
141         popq      %rbp
142         cfi_adjust_cfa_offset (-8)
143         cfi_restore (%rbp)
144         ret
146 .LBL_1_3:
147         cfi_restore_state
148         vmovups   %zmm2, 1152(%rsp)
149         vmovups   %zmm0, 1216(%rsp)
150         vmovups   %zmm3, 1280(%rsp)
151         je        .LBL_1_2
153         xorb      %dl, %dl
154         kmovw     %k4, 1048(%rsp)
155         xorl      %eax, %eax
156         kmovw     %k5, 1040(%rsp)
157         kmovw     %k6, 1032(%rsp)
158         kmovw     %k7, 1024(%rsp)
159         vmovups   %zmm16, 960(%rsp)
160         vmovups   %zmm17, 896(%rsp)
161         vmovups   %zmm18, 832(%rsp)
162         vmovups   %zmm19, 768(%rsp)
163         vmovups   %zmm20, 704(%rsp)
164         vmovups   %zmm21, 640(%rsp)
165         vmovups   %zmm22, 576(%rsp)
166         vmovups   %zmm23, 512(%rsp)
167         vmovups   %zmm24, 448(%rsp)
168         vmovups   %zmm25, 384(%rsp)
169         vmovups   %zmm26, 320(%rsp)
170         vmovups   %zmm27, 256(%rsp)
171         vmovups   %zmm28, 192(%rsp)
172         vmovups   %zmm29, 128(%rsp)
173         vmovups   %zmm30, 64(%rsp)
174         vmovups   %zmm31, (%rsp)
175         movq      %rsi, 1056(%rsp)
176         movq      %r12, 1096(%rsp)
177         cfi_offset_rel_rsp (12, 1096)
178         movb      %dl, %r12b
179         movq      %r13, 1088(%rsp)
180         cfi_offset_rel_rsp (13, 1088)
181         movl      %eax, %r13d
182         movq      %r14, 1080(%rsp)
183         cfi_offset_rel_rsp (14, 1080)
184         movl      %ecx, %r14d
185         movq      %r15, 1072(%rsp)
186         cfi_offset_rel_rsp (15, 1072)
187         movq      %rbx, 1064(%rsp)
188         movq      %rdi, %rbx
189         cfi_remember_state
191 .LBL_1_6:
192         btl       %r13d, %r14d
193         jc        .LBL_1_13
195 .LBL_1_7:
196         lea       1(%r13), %esi
197         btl       %esi, %r14d
198         jc        .LBL_1_10
200 .LBL_1_8:
201         addb      $1, %r12b
202         addl      $2, %r13d
203         cmpb      $16, %r12b
204         jb        .LBL_1_6
206         movq      %rbx, %rdi
207         kmovw     1048(%rsp), %k4
208         movq      1056(%rsp), %rsi
209         kmovw     1040(%rsp), %k5
210         movq      1096(%rsp), %r12
211         cfi_restore (%r12)
212         kmovw     1032(%rsp), %k6
213         movq      1088(%rsp), %r13
214         cfi_restore (%r13)
215         kmovw     1024(%rsp), %k7
216         vmovups   960(%rsp), %zmm16
217         vmovups   896(%rsp), %zmm17
218         vmovups   832(%rsp), %zmm18
219         vmovups   768(%rsp), %zmm19
220         vmovups   704(%rsp), %zmm20
221         vmovups   640(%rsp), %zmm21
222         vmovups   576(%rsp), %zmm22
223         vmovups   512(%rsp), %zmm23
224         vmovups   448(%rsp), %zmm24
225         vmovups   384(%rsp), %zmm25
226         vmovups   320(%rsp), %zmm26
227         vmovups   256(%rsp), %zmm27
228         vmovups   192(%rsp), %zmm28
229         vmovups   128(%rsp), %zmm29
230         vmovups   64(%rsp), %zmm30
231         vmovups   (%rsp), %zmm31
232         movq      1080(%rsp), %r14
233         cfi_restore (%r14)
234         movq      1072(%rsp), %r15
235         cfi_restore (%r15)
236         movq      1064(%rsp), %rbx
237         vmovups   1216(%rsp), %zmm0
238         vmovups   1280(%rsp), %zmm3
239         jmp       .LBL_1_2
241 .LBL_1_10:
242         cfi_restore_state
243         movzbl    %r12b, %r15d
244         vmovss    1156(%rsp,%r15,8), %xmm0
246         call      JUMPTARGET(sinf)
248         vmovss    %xmm0, 1220(%rsp,%r15,8)
249         vmovss    1156(%rsp,%r15,8), %xmm0
251         call      JUMPTARGET(cosf)
253         vmovss    %xmm0, 1284(%rsp,%r15,8)
254         jmp       .LBL_1_8
256 .LBL_1_13:
257         movzbl    %r12b, %r15d
258         vmovss    1152(%rsp,%r15,8), %xmm0
260         call      JUMPTARGET(sinf)
262         vmovss    %xmm0, 1216(%rsp,%r15,8)
263         vmovss    1152(%rsp,%r15,8), %xmm0
265         call      JUMPTARGET(cosf)
267         vmovss    %xmm0, 1280(%rsp,%r15,8)
268         jmp       .LBL_1_7
269 #endif
270 END (_ZGVeN16vl4l4_sincosf_knl)
271 libmvec_hidden_def(_ZGVeN16vl4l4_sincosf_knl)
273 ENTRY (_ZGVeN16vl4l4_sincosf_skx)
274 #ifndef HAVE_AVX512_ASM_SUPPORT
275 WRAPPER_IMPL_AVX512_fFF _ZGVdN8vvv_sincosf
276 #else
277         pushq     %rbp
278         cfi_adjust_cfa_offset (8)
279         cfi_rel_offset (%rbp, 0)
280         movq      %rsp, %rbp
281         cfi_def_cfa_register (%rbp)
282         andq      $-64, %rsp
283         subq      $1344, %rsp
284         movq      __svml_s_trig_data@GOTPCREL(%rip), %rax
285         vmovaps   %zmm0, %zmm4
286         vmovups __sAbsMask(%rax), %zmm3
287         vmovups __sInvPI(%rax), %zmm5
288         vmovups __sRShifter(%rax), %zmm6
289         vmovups __sPI1_FMA(%rax), %zmm9
290         vmovups __sPI2_FMA(%rax), %zmm10
291         vmovups __sSignMask(%rax), %zmm14
292         vmovups __sOneHalf(%rax), %zmm7
293         vmovups __sPI3_FMA(%rax), %zmm12
295 /* Absolute argument computation */
296         vandps    %zmm3, %zmm4, %zmm2
298 /* c) Getting octant Y by 2/Pi multiplication
299    d) Add "Right Shifter" value */
300         vfmadd213ps %zmm6, %zmm2, %zmm5
301         vcmpps    $18, __sRangeReductionVal(%rax), %zmm2, %k1
303 /* e) Treat obtained value as integer S for destination sign setting */
304         vpslld    $31, %zmm5, %zmm0
306 /* g) Subtract "Right Shifter" (0x4B000000) value */
307         vsubps    %zmm6, %zmm5, %zmm5
308         vmovups __sA3(%rax), %zmm6
310 /* h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 3 parts:
311       X = X - Y*PI1 - Y*PI2 - Y*PI3 */
312         vmovaps   %zmm2, %zmm11
313         vfnmadd231ps %zmm5, %zmm9, %zmm11
314         vfnmadd231ps %zmm5, %zmm10, %zmm11
315         vandps    %zmm11, %zmm14, %zmm1
316         vxorps    %zmm1, %zmm7, %zmm8
318 /* Result sign calculations */
319         vpternlogd $150, %zmm0, %zmm14, %zmm1
320         vmovups   .L_2il0floatpacket.13(%rip), %zmm14
322 /* Add correction term 0.5 for cos() part */
323         vaddps    %zmm8, %zmm5, %zmm15
324         vfnmadd213ps %zmm11, %zmm12, %zmm5
325         vandnps   %zmm4, %zmm3, %zmm11
326         vmovups __sA7_FMA(%rax), %zmm3
327         vmovaps   %zmm2, %zmm13
328         vfnmadd231ps %zmm15, %zmm9, %zmm13
329         vxorps    %zmm0, %zmm5, %zmm9
330         vmovups __sA5_FMA(%rax), %zmm0
331         vfnmadd231ps %zmm15, %zmm10, %zmm13
332         vmulps    %zmm9, %zmm9, %zmm8
333         vfnmadd213ps %zmm13, %zmm12, %zmm15
334         vmovups __sA9_FMA(%rax), %zmm12
335         vxorps    %zmm1, %zmm15, %zmm1
336         vmulps    %zmm1, %zmm1, %zmm13
338 /* 2) Polynomial (minimax for sin within  [-Pi/4; +Pi/4] interval)
339       a) Calculate X^2 = X * X
340       b) Calculate 2 polynomials for sin and cos:
341          RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3))));
342          RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))) */
343         vmovaps   %zmm12, %zmm7
344         vfmadd213ps %zmm3, %zmm8, %zmm7
345         vfmadd213ps %zmm3, %zmm13, %zmm12
346         vfmadd213ps %zmm0, %zmm8, %zmm7
347         vfmadd213ps %zmm0, %zmm13, %zmm12
348         vfmadd213ps %zmm6, %zmm8, %zmm7
349         vfmadd213ps %zmm6, %zmm13, %zmm12
350         vmulps    %zmm8, %zmm7, %zmm10
351         vmulps    %zmm13, %zmm12, %zmm3
352         vfmadd213ps %zmm9, %zmm9, %zmm10
353         vfmadd213ps %zmm1, %zmm1, %zmm3
354         vxorps    %zmm11, %zmm10, %zmm0
355         vpandnd   %zmm2, %zmm2, %zmm14{%k1}
356         vptestmd  %zmm14, %zmm14, %k0
357         kmovw     %k0, %ecx
358         testl     %ecx, %ecx
359         jne       .LBL_2_3
361 .LBL_2_2:
362         cfi_remember_state
363         vmovups   %zmm0, (%rdi)
364         vmovups   %zmm3, (%rsi)
365         movq      %rbp, %rsp
366         cfi_def_cfa_register (%rsp)
367         popq      %rbp
368         cfi_adjust_cfa_offset (-8)
369         cfi_restore (%rbp)
370         ret
372 .LBL_2_3:
373         cfi_restore_state
374         vmovups   %zmm4, 1152(%rsp)
375         vmovups   %zmm0, 1216(%rsp)
376         vmovups   %zmm3, 1280(%rsp)
377         je        .LBL_2_2
379         xorb      %dl, %dl
380         xorl      %eax, %eax
381         kmovw     %k4, 1048(%rsp)
382         kmovw     %k5, 1040(%rsp)
383         kmovw     %k6, 1032(%rsp)
384         kmovw     %k7, 1024(%rsp)
385         vmovups   %zmm16, 960(%rsp)
386         vmovups   %zmm17, 896(%rsp)
387         vmovups   %zmm18, 832(%rsp)
388         vmovups   %zmm19, 768(%rsp)
389         vmovups   %zmm20, 704(%rsp)
390         vmovups   %zmm21, 640(%rsp)
391         vmovups   %zmm22, 576(%rsp)
392         vmovups   %zmm23, 512(%rsp)
393         vmovups   %zmm24, 448(%rsp)
394         vmovups   %zmm25, 384(%rsp)
395         vmovups   %zmm26, 320(%rsp)
396         vmovups   %zmm27, 256(%rsp)
397         vmovups   %zmm28, 192(%rsp)
398         vmovups   %zmm29, 128(%rsp)
399         vmovups   %zmm30, 64(%rsp)
400         vmovups   %zmm31, (%rsp)
401         movq      %rsi, 1056(%rsp)
402         movq      %r12, 1096(%rsp)
403         cfi_offset_rel_rsp (12, 1096)
404         movb      %dl, %r12b
405         movq      %r13, 1088(%rsp)
406         cfi_offset_rel_rsp (13, 1088)
407         movl      %eax, %r13d
408         movq      %r14, 1080(%rsp)
409         cfi_offset_rel_rsp (14, 1080)
410         movl      %ecx, %r14d
411         movq      %r15, 1072(%rsp)
412         cfi_offset_rel_rsp (15, 1072)
413         movq      %rbx, 1064(%rsp)
414         movq      %rdi, %rbx
415         cfi_remember_state
417 .LBL_2_6:
418         btl       %r13d, %r14d
419         jc        .LBL_2_13
421 .LBL_2_7:
422         lea       1(%r13), %esi
423         btl       %esi, %r14d
424         jc        .LBL_2_10
426 .LBL_2_8:
427         incb      %r12b
428         addl      $2, %r13d
429         cmpb      $16, %r12b
430         jb        .LBL_2_6
432         kmovw     1048(%rsp), %k4
433         movq      %rbx, %rdi
434         kmovw     1040(%rsp), %k5
435         kmovw     1032(%rsp), %k6
436         kmovw     1024(%rsp), %k7
437         vmovups   960(%rsp), %zmm16
438         vmovups   896(%rsp), %zmm17
439         vmovups   832(%rsp), %zmm18
440         vmovups   768(%rsp), %zmm19
441         vmovups   704(%rsp), %zmm20
442         vmovups   640(%rsp), %zmm21
443         vmovups   576(%rsp), %zmm22
444         vmovups   512(%rsp), %zmm23
445         vmovups   448(%rsp), %zmm24
446         vmovups   384(%rsp), %zmm25
447         vmovups   320(%rsp), %zmm26
448         vmovups   256(%rsp), %zmm27
449         vmovups   192(%rsp), %zmm28
450         vmovups   128(%rsp), %zmm29
451         vmovups   64(%rsp), %zmm30
452         vmovups   (%rsp), %zmm31
453         vmovups   1216(%rsp), %zmm0
454         vmovups   1280(%rsp), %zmm3
455         movq      1056(%rsp), %rsi
456         movq      1096(%rsp), %r12
457         cfi_restore (%r12)
458         movq      1088(%rsp), %r13
459         cfi_restore (%r13)
460         movq      1080(%rsp), %r14
461         cfi_restore (%r14)
462         movq      1072(%rsp), %r15
463         cfi_restore (%r15)
464         movq      1064(%rsp), %rbx
465         jmp       .LBL_2_2
467 .LBL_2_10:
468         cfi_restore_state
469         movzbl    %r12b, %r15d
470         vmovss    1156(%rsp,%r15,8), %xmm0
471         vzeroupper
472         vmovss    1156(%rsp,%r15,8), %xmm0
474         call      JUMPTARGET(sinf)
476         vmovss    %xmm0, 1220(%rsp,%r15,8)
477         vmovss    1156(%rsp,%r15,8), %xmm0
479         call      JUMPTARGET(cosf)
481         vmovss    %xmm0, 1284(%rsp,%r15,8)
482         jmp       .LBL_2_8
484 .LBL_2_13:
485         movzbl    %r12b, %r15d
486         vmovss    1152(%rsp,%r15,8), %xmm0
487         vzeroupper
488         vmovss    1152(%rsp,%r15,8), %xmm0
490         call      JUMPTARGET(sinf)
492         vmovss    %xmm0, 1216(%rsp,%r15,8)
493         vmovss    1152(%rsp,%r15,8), %xmm0
495         call      JUMPTARGET(cosf)
497         vmovss    %xmm0, 1280(%rsp,%r15,8)
498         jmp       .LBL_2_7
499 #endif
500 END (_ZGVeN16vl4l4_sincosf_skx)
501 libmvec_hidden_def(_ZGVeN16vl4l4_sincosf_skx)
503 /* Wrapper between vvv and vl4l4 vector variants.  */
504 .macro WRAPPER_AVX512_vvv_vl4l4 callee
505 #ifndef __ILP32__
506         pushq     %rbp
507         cfi_adjust_cfa_offset (8)
508         cfi_rel_offset (%rbp, 0)
509         movq      %rsp, %rbp
510         cfi_def_cfa_register (%rbp)
511         andq      $-64, %rsp
512         subq      $384, %rsp
513         /* Encoding for vmovups %zmm1, 128(%rsp).  */
514         .byte 0x62
515         .byte 0xf1
516         .byte 0x7c
517         .byte 0x48
518         .byte 0x11
519         .byte 0x4c
520         .byte 0x24
521         .byte 0x02
522         lea       (%rsp), %rdi
523         /* Encoding for vmovups %zmm2, 192(%rdi).  */
524         .byte 0x62
525         .byte 0xf1
526         .byte 0x7c
527         .byte 0x48
528         .byte 0x11
529         .byte 0x57
530         .byte 0x03
531         /* Encoding for vmovups %zmm3, 256(%rdi).  */
532         .byte 0x62
533         .byte 0xf1
534         .byte 0x7c
535         .byte 0x48
536         .byte 0x11
537         .byte 0x5f
538         .byte 0x04
539         /* Encoding for vmovups %zmm4, 320(%rdi).  */
540         .byte 0x62
541         .byte 0xf1
542         .byte 0x7c
543         .byte 0x48
544         .byte 0x11
545         .byte 0x67
546         .byte 0x05
547         lea       64(%rsp), %rsi
548         call      HIDDEN_JUMPTARGET(\callee)
549         movq      128(%rsp), %rdx
550         movq      136(%rsp), %rsi
551         movq      144(%rsp), %r8
552         movq      152(%rsp), %r10
553         movl      (%rsp), %eax
554         movl      4(%rsp), %ecx
555         movl      8(%rsp), %edi
556         movl      12(%rsp), %r9d
557         movl      %eax, (%rdx)
558         movl      %ecx, (%rsi)
559         movq      160(%rsp), %rax
560         movq      168(%rsp), %rcx
561         movl      %edi, (%r8)
562         movl      %r9d, (%r10)
563         movq      176(%rsp), %rdi
564         movq      184(%rsp), %r9
565         movl      16(%rsp), %r11d
566         movl      20(%rsp), %edx
567         movl      24(%rsp), %esi
568         movl      28(%rsp), %r8d
569         movl      %r11d, (%rax)
570         movl      %edx, (%rcx)
571         movq      192(%rsp), %r11
572         movq      200(%rsp), %rdx
573         movl      %esi, (%rdi)
574         movl      %r8d, (%r9)
575         movq      208(%rsp), %rsi
576         movq      216(%rsp), %r8
577         movl      32(%rsp), %r10d
578         movl      36(%rsp), %eax
579         movl      40(%rsp), %ecx
580         movl      44(%rsp), %edi
581         movl      %r10d, (%r11)
582         movl      %eax, (%rdx)
583         movq      224(%rsp), %r10
584         movq      232(%rsp), %rax
585         movl      %ecx, (%rsi)
586         movl      %edi, (%r8)
587         movq      240(%rsp), %rcx
588         movq      248(%rsp), %rdi
589         movl      48(%rsp), %r9d
590         movl      52(%rsp), %r11d
591         movl      56(%rsp), %edx
592         movl      60(%rsp), %esi
593         movl      %r9d, (%r10)
594         movl      %r11d, (%rax)
595         movq      256(%rsp), %r9
596         movq      264(%rsp), %r11
597         movl      %edx, (%rcx)
598         movl      %esi, (%rdi)
599         movq      272(%rsp), %rdx
600         movq      280(%rsp), %rsi
601         movl      64(%rsp), %r8d
602         movl      68(%rsp), %r10d
603         movl      72(%rsp), %eax
604         movl      76(%rsp), %ecx
605         movl      %r8d, (%r9)
606         movl      %r10d, (%r11)
607         movq      288(%rsp), %r8
608         movq      296(%rsp), %r10
609         movl      %eax, (%rdx)
610         movl      %ecx, (%rsi)
611         movq      304(%rsp), %rax
612         movq      312(%rsp), %rcx
613         movl      80(%rsp), %edi
614         movl      84(%rsp), %r9d
615         movl      88(%rsp), %r11d
616         movl      92(%rsp), %edx
617         movl      %edi, (%r8)
618         movl      %r9d, (%r10)
619         movq      320(%rsp), %rdi
620         movq      328(%rsp), %r9
621         movl      %r11d, (%rax)
622         movl      %edx, (%rcx)
623         movq      336(%rsp), %r11
624         movq      344(%rsp), %rdx
625         movl      96(%rsp), %esi
626         movl      100(%rsp), %r8d
627         movl      104(%rsp), %r10d
628         movl      108(%rsp), %eax
629         movl      %esi, (%rdi)
630         movl      %r8d, (%r9)
631         movq      352(%rsp), %rsi
632         movq      360(%rsp), %r8
633         movl      %r10d, (%r11)
634         movl      %eax, (%rdx)
635         movq      368(%rsp), %r10
636         movq      376(%rsp), %rax
637         movl      112(%rsp), %ecx
638         movl      116(%rsp), %edi
639         movl      120(%rsp), %r9d
640         movl      124(%rsp), %r11d
641         movl      %ecx, (%rsi)
642         movl      %edi, (%r8)
643         movl      %r9d, (%r10)
644         movl      %r11d, (%rax)
645         movq      %rbp, %rsp
646         cfi_def_cfa_register (%rsp)
647         popq      %rbp
648         cfi_adjust_cfa_offset (-8)
649         cfi_restore (%rbp)
650         ret
651 #else
652         leal    8(%rsp), %r10d
653         .cfi_def_cfa 10, 0
654         andl    $-64, %esp
655         pushq   -8(%r10d)
656         pushq   %rbp
657         .cfi_escape 0x10,0x6,0x2,0x76,0
658         movl    %esp, %ebp
659         pushq   %r10
660         .cfi_escape 0xf,0x3,0x76,0x78,0x6
661         leal    -112(%rbp), %esi
662         leal    -176(%rbp), %edi
663         subl    $296, %esp
664         /* Encoding for vmovdqa64 %zmm1, -240(%ebp).  */
665         .byte 0x67
666         .byte 0x62
667         .byte 0xf1
668         .byte 0xfd
669         .byte 0x48
670         .byte 0x7f
671         .byte 0x8d
672         .byte 0x10
673         .byte 0xff
674         .byte 0xff
675         .byte 0xff
676         /* Encoding for vmovdqa64 %zmm2, -304(%ebp).  */
677         .byte 0x67
678         .byte 0x62
679         .byte 0xf1
680         .byte 0xfd
681         .byte 0x48
682         .byte 0x7f
683         .byte 0x95
684         .byte 0xd0
685         .byte 0xfe
686         .byte 0xff
687         .byte 0xff
688         call    HIDDEN_JUMPTARGET(\callee)
689         movl    -240(%ebp), %eax
690         vmovss  -176(%ebp), %xmm0
691         vmovss  %xmm0, (%eax)
692         movl    -236(%ebp), %eax
693         vmovss  -172(%ebp), %xmm0
694         vmovss  %xmm0, (%eax)
695         movl    -232(%ebp), %eax
696         vmovss  -168(%ebp), %xmm0
697         vmovss  %xmm0, (%eax)
698         movl    -228(%ebp), %eax
699         vmovss  -164(%ebp), %xmm0
700         vmovss  %xmm0, (%eax)
701         movl    -224(%ebp), %eax
702         vmovss  -160(%ebp), %xmm0
703         vmovss  %xmm0, (%eax)
704         movl    -220(%ebp), %eax
705         vmovss  -156(%ebp), %xmm0
706         vmovss  %xmm0, (%eax)
707         movl    -216(%ebp), %eax
708         vmovss  -152(%ebp), %xmm0
709         vmovss  %xmm0, (%eax)
710         movl    -212(%ebp), %eax
711         vmovss  -148(%ebp), %xmm0
712         vmovss  %xmm0, (%eax)
713         movl    -208(%ebp), %eax
714         vmovss  -144(%ebp), %xmm0
715         vmovss  %xmm0, (%eax)
716         movl    -204(%ebp), %eax
717         vmovss  -140(%ebp), %xmm0
718         vmovss  %xmm0, (%eax)
719         movl    -200(%ebp), %eax
720         vmovss  -136(%ebp), %xmm0
721         vmovss  %xmm0, (%eax)
722         movl    -196(%ebp), %eax
723         vmovss  -132(%ebp), %xmm0
724         vmovss  %xmm0, (%eax)
725         movl    -192(%ebp), %eax
726         vmovss  -128(%ebp), %xmm0
727         vmovss  %xmm0, (%eax)
728         movl    -188(%ebp), %eax
729         vmovss  -124(%ebp), %xmm0
730         vmovss  %xmm0, (%eax)
731         movl    -184(%ebp), %eax
732         vmovss  -120(%ebp), %xmm0
733         vmovss  %xmm0, (%eax)
734         movl    -180(%ebp), %eax
735         vmovss  -116(%ebp), %xmm0
736         vmovss  %xmm0, (%eax)
737         movl    -304(%ebp), %eax
738         vmovss  -112(%ebp), %xmm0
739         vmovss  %xmm0, (%eax)
740         movl    -300(%ebp), %eax
741         vmovss  -108(%ebp), %xmm0
742         vmovss  %xmm0, (%eax)
743         movl    -296(%ebp), %eax
744         vmovss  -104(%ebp), %xmm0
745         vmovss  %xmm0, (%eax)
746         movl    -292(%ebp), %eax
747         vmovss  -100(%ebp), %xmm0
748         vmovss  %xmm0, (%eax)
749         movl    -288(%ebp), %eax
750         vmovss  -96(%ebp), %xmm0
751         vmovss  %xmm0, (%eax)
752         movl    -284(%ebp), %eax
753         vmovss  -92(%ebp), %xmm0
754         vmovss  %xmm0, (%eax)
755         movl    -280(%ebp), %eax
756         vmovss  -88(%ebp), %xmm0
757         vmovss  %xmm0, (%eax)
758         movl    -276(%ebp), %eax
759         vmovss  -84(%ebp), %xmm0
760         vmovss  %xmm0, (%eax)
761         movl    -272(%ebp), %eax
762         vmovss  -80(%ebp), %xmm0
763         vmovss  %xmm0, (%eax)
764         movl    -268(%ebp), %eax
765         vmovss  -76(%ebp), %xmm0
766         vmovss  %xmm0, (%eax)
767         movl    -264(%ebp), %eax
768         vmovss  -72(%ebp), %xmm0
769         vmovss  %xmm0, (%eax)
770         movl    -260(%ebp), %eax
771         vmovss  -68(%ebp), %xmm0
772         vmovss  %xmm0, (%eax)
773         movl    -256(%ebp), %eax
774         vmovss  -64(%ebp), %xmm0
775         vmovss  %xmm0, (%eax)
776         movl    -252(%ebp), %eax
777         vmovss  -60(%ebp), %xmm0
778         vmovss  %xmm0, (%eax)
779         movl    -248(%ebp), %eax
780         vmovss  -56(%ebp), %xmm0
781         vmovss  %xmm0, (%eax)
782         movl    -244(%ebp), %eax
783         vmovss  -52(%ebp), %xmm0
784         vmovss  %xmm0, (%eax)
785         addl    $296, %esp
786         popq    %r10
787         .cfi_def_cfa 10, 0
788         popq    %rbp
789         leal    -8(%r10), %esp
790         .cfi_def_cfa 7, 8
791         ret
792 #endif
793 .endm
795 ENTRY (_ZGVeN16vvv_sincosf_knl)
796 WRAPPER_AVX512_vvv_vl4l4 _ZGVeN16vl4l4_sincosf_knl
797 END (_ZGVeN16vvv_sincosf_knl)
799 ENTRY (_ZGVeN16vvv_sincosf_skx)
800 WRAPPER_AVX512_vvv_vl4l4 _ZGVeN16vl4l4_sincosf_skx
801 END (_ZGVeN16vvv_sincosf_skx)
803         .section .rodata, "a"
804 .L_2il0floatpacket.13:
805         .long   0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff
806         .type   .L_2il0floatpacket.13,@object