1// Copyright 2016 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5#include "textflag.h"
6
7TEXT ·archLog10(SB), NOSPLIT, $0
8	MOVD ·log10vectorfacility+0x00(SB), R1
9	BR   (R1)
10
11TEXT ·log10TrampolineSetup(SB), NOSPLIT, $0
12	MOVB   ·hasVX(SB), R1
13	CMPBEQ R1, $1, vectorimpl                 // vectorfacility = 1, vector supported
14	MOVDlog10vectorfacility+0x00(SB), R1
15	MOVDlog10(SB), R2
16	MOVD   R2, 0(R1)
17	BR     ·log10(SB)
18
19vectorimpl:
20	MOVDlog10vectorfacility+0x00(SB), R1
21	MOVDlog10Asm(SB), R2
22	MOVD R2, 0(R1)
23	BR   ·log10Asm(SB)
24
25GLOBL ·log10vectorfacility+0x00(SB), NOPTR, $8
26DATA ·log10vectorfacility+0x00(SB)/8, $·log10TrampolineSetup(SB)
27
28TEXT ·archCos(SB), NOSPLIT, $0
29	MOVD ·cosvectorfacility+0x00(SB), R1
30	BR   (R1)
31
32TEXT ·cosTrampolineSetup(SB), NOSPLIT, $0
33	MOVB   ·hasVX(SB), R1
34	CMPBEQ R1, $1, vectorimpl               // vectorfacility = 1, vector supported
35	MOVDcosvectorfacility+0x00(SB), R1
36	MOVDcos(SB), R2
37	MOVD   R2, 0(R1)
38	BR     ·cos(SB)
39
40vectorimpl:
41	MOVDcosvectorfacility+0x00(SB), R1
42	MOVDcosAsm(SB), R2
43	MOVD R2, 0(R1)
44	BR   ·cosAsm(SB)
45
46GLOBL ·cosvectorfacility+0x00(SB), NOPTR, $8
47DATA ·cosvectorfacility+0x00(SB)/8, $·cosTrampolineSetup(SB)
48
49TEXT ·archCosh(SB), NOSPLIT, $0
50	MOVD ·coshvectorfacility+0x00(SB), R1
51	BR   (R1)
52
53TEXT ·coshTrampolineSetup(SB), NOSPLIT, $0
54	MOVB   ·hasVX(SB), R1
55	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
56	MOVDcoshvectorfacility+0x00(SB), R1
57	MOVDcosh(SB), R2
58	MOVD   R2, 0(R1)
59	BR     ·cosh(SB)
60
61vectorimpl:
62	MOVDcoshvectorfacility+0x00(SB), R1
63	MOVDcoshAsm(SB), R2
64	MOVD R2, 0(R1)
65	BR   ·coshAsm(SB)
66
67GLOBL ·coshvectorfacility+0x00(SB), NOPTR, $8
68DATA ·coshvectorfacility+0x00(SB)/8, $·coshTrampolineSetup(SB)
69
70TEXT ·archSin(SB), NOSPLIT, $0
71	MOVD ·sinvectorfacility+0x00(SB), R1
72	BR   (R1)
73
74TEXT ·sinTrampolineSetup(SB), NOSPLIT, $0
75	MOVB   ·hasVX(SB), R1
76	CMPBEQ R1, $1, vectorimpl               // vectorfacility = 1, vector supported
77	MOVDsinvectorfacility+0x00(SB), R1
78	MOVDsin(SB), R2
79	MOVD   R2, 0(R1)
80	BR     ·sin(SB)
81
82vectorimpl:
83	MOVDsinvectorfacility+0x00(SB), R1
84	MOVDsinAsm(SB), R2
85	MOVD R2, 0(R1)
86	BR   ·sinAsm(SB)
87
88GLOBL ·sinvectorfacility+0x00(SB), NOPTR, $8
89DATA ·sinvectorfacility+0x00(SB)/8, $·sinTrampolineSetup(SB)
90
91TEXT ·archSinh(SB), NOSPLIT, $0
92	MOVD ·sinhvectorfacility+0x00(SB), R1
93	BR   (R1)
94
95TEXT ·sinhTrampolineSetup(SB), NOSPLIT, $0
96	MOVB   ·hasVX(SB), R1
97	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
98	MOVDsinhvectorfacility+0x00(SB), R1
99	MOVDsinh(SB), R2
100	MOVD   R2, 0(R1)
101	BR     ·sinh(SB)
102
103vectorimpl:
104	MOVDsinhvectorfacility+0x00(SB), R1
105	MOVDsinhAsm(SB), R2
106	MOVD R2, 0(R1)
107	BR   ·sinhAsm(SB)
108
109GLOBL ·sinhvectorfacility+0x00(SB), NOPTR, $8
110DATA ·sinhvectorfacility+0x00(SB)/8, $·sinhTrampolineSetup(SB)
111
112TEXT ·archTanh(SB), NOSPLIT, $0
113	MOVD ·tanhvectorfacility+0x00(SB), R1
114	BR   (R1)
115
116TEXT ·tanhTrampolineSetup(SB), NOSPLIT, $0
117	MOVB   ·hasVX(SB), R1
118	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
119	MOVDtanhvectorfacility+0x00(SB), R1
120	MOVDtanh(SB), R2
121	MOVD   R2, 0(R1)
122	BR     ·tanh(SB)
123
124vectorimpl:
125	MOVDtanhvectorfacility+0x00(SB), R1
126	MOVDtanhAsm(SB), R2
127	MOVD R2, 0(R1)
128	BR   ·tanhAsm(SB)
129
130GLOBL ·tanhvectorfacility+0x00(SB), NOPTR, $8
131DATA ·tanhvectorfacility+0x00(SB)/8, $·tanhTrampolineSetup(SB)
132
133TEXT ·archLog1p(SB), NOSPLIT, $0
134	MOVD ·log1pvectorfacility+0x00(SB), R1
135	BR   (R1)
136
137TEXT ·log1pTrampolineSetup(SB), NOSPLIT, $0
138	MOVB   ·hasVX(SB), R1
139	CMPBEQ R1, $1, vectorimpl                 // vectorfacility = 1, vector supported
140	MOVDlog1pvectorfacility+0x00(SB), R1
141	MOVDlog1p(SB), R2
142	MOVD   R2, 0(R1)
143	BR     ·log1p(SB)
144
145vectorimpl:
146	MOVDlog1pvectorfacility+0x00(SB), R1
147	MOVDlog1pAsm(SB), R2
148	MOVD R2, 0(R1)
149	BR   ·log1pAsm(SB)
150
151GLOBL ·log1pvectorfacility+0x00(SB), NOPTR, $8
152DATA ·log1pvectorfacility+0x00(SB)/8, $·log1pTrampolineSetup(SB)
153
154TEXT ·archAtanh(SB), NOSPLIT, $0
155	MOVD ·atanhvectorfacility+0x00(SB), R1
156	BR   (R1)
157
158TEXT ·atanhTrampolineSetup(SB), NOSPLIT, $0
159	MOVB   ·hasVX(SB), R1
160	CMPBEQ R1, $1, vectorimpl                 // vectorfacility = 1, vector supported
161	MOVDatanhvectorfacility+0x00(SB), R1
162	MOVDatanh(SB), R2
163	MOVD   R2, 0(R1)
164	BR     ·atanh(SB)
165
166vectorimpl:
167	MOVDatanhvectorfacility+0x00(SB), R1
168	MOVDatanhAsm(SB), R2
169	MOVD R2, 0(R1)
170	BR   ·atanhAsm(SB)
171
172GLOBL ·atanhvectorfacility+0x00(SB), NOPTR, $8
173DATA ·atanhvectorfacility+0x00(SB)/8, $·atanhTrampolineSetup(SB)
174
175TEXT ·archAcos(SB), NOSPLIT, $0
176	MOVD ·acosvectorfacility+0x00(SB), R1
177	BR   (R1)
178
179TEXT ·acosTrampolineSetup(SB), NOSPLIT, $0
180	MOVB   ·hasVX(SB), R1
181	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
182	MOVDacosvectorfacility+0x00(SB), R1
183	MOVDacos(SB), R2
184	MOVD   R2, 0(R1)
185	BR     ·acos(SB)
186
187vectorimpl:
188	MOVDacosvectorfacility+0x00(SB), R1
189	MOVDacosAsm(SB), R2
190	MOVD R2, 0(R1)
191	BR   ·acosAsm(SB)
192
193GLOBL ·acosvectorfacility+0x00(SB), NOPTR, $8
194DATA ·acosvectorfacility+0x00(SB)/8, $·acosTrampolineSetup(SB)
195
196TEXT ·archAsin(SB), NOSPLIT, $0
197	MOVD ·asinvectorfacility+0x00(SB), R1
198	BR   (R1)
199
200TEXT ·asinTrampolineSetup(SB), NOSPLIT, $0
201	MOVB   ·hasVX(SB), R1
202	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
203	MOVDasinvectorfacility+0x00(SB), R1
204	MOVDasin(SB), R2
205	MOVD   R2, 0(R1)
206	BR     ·asin(SB)
207
208vectorimpl:
209	MOVDasinvectorfacility+0x00(SB), R1
210	MOVDasinAsm(SB), R2
211	MOVD R2, 0(R1)
212	BR   ·asinAsm(SB)
213
214GLOBL ·asinvectorfacility+0x00(SB), NOPTR, $8
215DATA ·asinvectorfacility+0x00(SB)/8, $·asinTrampolineSetup(SB)
216
217TEXT ·archAsinh(SB), NOSPLIT, $0
218	MOVD ·asinhvectorfacility+0x00(SB), R1
219	BR   (R1)
220
221TEXT ·asinhTrampolineSetup(SB), NOSPLIT, $0
222	MOVB   ·hasVX(SB), R1
223	CMPBEQ R1, $1, vectorimpl                 // vectorfacility = 1, vector supported
224	MOVDasinhvectorfacility+0x00(SB), R1
225	MOVDasinh(SB), R2
226	MOVD   R2, 0(R1)
227	BR     ·asinh(SB)
228
229vectorimpl:
230	MOVDasinhvectorfacility+0x00(SB), R1
231	MOVDasinhAsm(SB), R2
232	MOVD R2, 0(R1)
233	BR   ·asinhAsm(SB)
234
235GLOBL ·asinhvectorfacility+0x00(SB), NOPTR, $8
236DATA ·asinhvectorfacility+0x00(SB)/8, $·asinhTrampolineSetup(SB)
237
238TEXT ·archAcosh(SB), NOSPLIT, $0
239	MOVD ·acoshvectorfacility+0x00(SB), R1
240	BR   (R1)
241
242TEXT ·acoshTrampolineSetup(SB), NOSPLIT, $0
243	MOVB   ·hasVX(SB), R1
244	CMPBEQ R1, $1, vectorimpl                 // vectorfacility = 1, vector supported
245	MOVDacoshvectorfacility+0x00(SB), R1
246	MOVDacosh(SB), R2
247	MOVD   R2, 0(R1)
248	BR     ·acosh(SB)
249
250vectorimpl:
251	MOVDacoshvectorfacility+0x00(SB), R1
252	MOVDacoshAsm(SB), R2
253	MOVD R2, 0(R1)
254	BR   ·acoshAsm(SB)
255
256GLOBL ·acoshvectorfacility+0x00(SB), NOPTR, $8
257DATA ·acoshvectorfacility+0x00(SB)/8, $·acoshTrampolineSetup(SB)
258
259TEXT ·archErf(SB), NOSPLIT, $0
260	MOVD ·erfvectorfacility+0x00(SB), R1
261	BR   (R1)
262
263TEXT ·erfTrampolineSetup(SB), NOSPLIT, $0
264	MOVB   ·hasVX(SB), R1
265	CMPBEQ R1, $1, vectorimpl               // vectorfacility = 1, vector supported
266	MOVDerfvectorfacility+0x00(SB), R1
267	MOVDerf(SB), R2
268	MOVD   R2, 0(R1)
269	BR     ·erf(SB)
270
271vectorimpl:
272	MOVDerfvectorfacility+0x00(SB), R1
273	MOVDerfAsm(SB), R2
274	MOVD R2, 0(R1)
275	BR   ·erfAsm(SB)
276
277GLOBL ·erfvectorfacility+0x00(SB), NOPTR, $8
278DATA ·erfvectorfacility+0x00(SB)/8, $·erfTrampolineSetup(SB)
279
280TEXT ·archErfc(SB), NOSPLIT, $0
281	MOVD ·erfcvectorfacility+0x00(SB), R1
282	BR   (R1)
283
284TEXT ·erfcTrampolineSetup(SB), NOSPLIT, $0
285	MOVB   ·hasVX(SB), R1
286	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
287	MOVDerfcvectorfacility+0x00(SB), R1
288	MOVDerfc(SB), R2
289	MOVD   R2, 0(R1)
290	BR     ·erfc(SB)
291
292vectorimpl:
293	MOVDerfcvectorfacility+0x00(SB), R1
294	MOVDerfcAsm(SB), R2
295	MOVD R2, 0(R1)
296	BR   ·erfcAsm(SB)
297
298GLOBL ·erfcvectorfacility+0x00(SB), NOPTR, $8
299DATA ·erfcvectorfacility+0x00(SB)/8, $·erfcTrampolineSetup(SB)
300
301TEXT ·archAtan(SB), NOSPLIT, $0
302	MOVD ·atanvectorfacility+0x00(SB), R1
303	BR   (R1)
304
305TEXT ·atanTrampolineSetup(SB), NOSPLIT, $0
306	MOVB   ·hasVX(SB), R1
307	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
308	MOVDatanvectorfacility+0x00(SB), R1
309	MOVDatan(SB), R2
310	MOVD   R2, 0(R1)
311	BR     ·atan(SB)
312
313vectorimpl:
314	MOVDatanvectorfacility+0x00(SB), R1
315	MOVDatanAsm(SB), R2
316	MOVD R2, 0(R1)
317	BR   ·atanAsm(SB)
318
319GLOBL ·atanvectorfacility+0x00(SB), NOPTR, $8
320DATA ·atanvectorfacility+0x00(SB)/8, $·atanTrampolineSetup(SB)
321
322TEXT ·archAtan2(SB), NOSPLIT, $0
323	MOVD ·atan2vectorfacility+0x00(SB), R1
324	BR   (R1)
325
326TEXT ·atan2TrampolineSetup(SB), NOSPLIT, $0
327	MOVB   ·hasVX(SB), R1
328	CMPBEQ R1, $1, vectorimpl                 // vectorfacility = 1, vector supported
329	MOVDatan2vectorfacility+0x00(SB), R1
330	MOVDatan2(SB), R2
331	MOVD   R2, 0(R1)
332	BR     ·atan2(SB)
333
334vectorimpl:
335	MOVDatan2vectorfacility+0x00(SB), R1
336	MOVDatan2Asm(SB), R2
337	MOVD R2, 0(R1)
338	BR   ·atan2Asm(SB)
339
340GLOBL ·atan2vectorfacility+0x00(SB), NOPTR, $8
341DATA ·atan2vectorfacility+0x00(SB)/8, $·atan2TrampolineSetup(SB)
342
343TEXT ·archCbrt(SB), NOSPLIT, $0
344	MOVD ·cbrtvectorfacility+0x00(SB), R1
345	BR   (R1)
346
347TEXT ·cbrtTrampolineSetup(SB), NOSPLIT, $0
348	MOVB   ·hasVX(SB), R1
349	CMPBEQ R1, $1, vectorimpl                // vectorfacility = 1, vector supported
350	MOVDcbrtvectorfacility+0x00(SB), R1
351	MOVDcbrt(SB), R2
352	MOVD   R2, 0(R1)
353	BR     ·cbrt(SB)
354
355vectorimpl:
356	MOVDcbrtvectorfacility+0x00(SB), R1
357	MOVDcbrtAsm(SB), R2
358	MOVD R2, 0(R1)
359	BR   ·cbrtAsm(SB)
360
361GLOBL ·cbrtvectorfacility+0x00(SB), NOPTR, $8
362DATA ·cbrtvectorfacility+0x00(SB)/8, $·cbrtTrampolineSetup(SB)
363
364TEXT ·archLog(SB), NOSPLIT, $0
365	MOVD ·logvectorfacility+0x00(SB), R1
366	BR   (R1)
367
368TEXT ·logTrampolineSetup(SB), NOSPLIT, $0
369	MOVB   ·hasVX(SB), R1
370	CMPBEQ R1, $1, vectorimpl               // vectorfacility = 1, vector supported
371	MOVDlogvectorfacility+0x00(SB), R1
372	MOVDlog(SB), R2
373	MOVD   R2, 0(R1)
374	BR     ·log(SB)
375
376vectorimpl:
377	MOVDlogvectorfacility+0x00(SB), R1
378	MOVDlogAsm(SB), R2
379	MOVD R2, 0(R1)
380	BR   ·logAsm(SB)
381
382GLOBL ·logvectorfacility+0x00(SB), NOPTR, $8
383DATA ·logvectorfacility+0x00(SB)/8, $·logTrampolineSetup(SB)
384
385TEXT ·archTan(SB), NOSPLIT, $0
386	MOVD ·tanvectorfacility+0x00(SB), R1
387	BR   (R1)
388
389TEXT ·tanTrampolineSetup(SB), NOSPLIT, $0
390	MOVB   ·hasVX(SB), R1
391	CMPBEQ R1, $1, vectorimpl               // vectorfacility = 1, vector supported
392	MOVDtanvectorfacility+0x00(SB), R1
393	MOVDtan(SB), R2
394	MOVD   R2, 0(R1)
395	BR     ·tan(SB)
396
397vectorimpl:
398	MOVDtanvectorfacility+0x00(SB), R1
399	MOVDtanAsm(SB), R2
400	MOVD R2, 0(R1)
401	BR   ·tanAsm(SB)
402
403GLOBL ·tanvectorfacility+0x00(SB), NOPTR, $8
404DATA ·tanvectorfacility+0x00(SB)/8, $·tanTrampolineSetup(SB)
405
406TEXT ·archExp(SB), NOSPLIT, $0
407	MOVD ·expvectorfacility+0x00(SB), R1
408	BR   (R1)
409
410TEXT ·expTrampolineSetup(SB), NOSPLIT, $0
411	MOVB   ·hasVX(SB), R1
412	CMPBEQ R1, $1, vectorimpl               // vectorfacility = 1, vector supported
413	MOVDexpvectorfacility+0x00(SB), R1
414	MOVDexp(SB), R2
415	MOVD   R2, 0(R1)
416	BR     ·exp(SB)
417
418vectorimpl:
419	MOVDexpvectorfacility+0x00(SB), R1
420	MOVDexpAsm(SB), R2
421	MOVD R2, 0(R1)
422	BR   ·expAsm(SB)
423
424GLOBL ·expvectorfacility+0x00(SB), NOPTR, $8
425DATA ·expvectorfacility+0x00(SB)/8, $·expTrampolineSetup(SB)
426
427TEXT ·archExpm1(SB), NOSPLIT, $0
428	MOVD ·expm1vectorfacility+0x00(SB), R1
429	BR   (R1)
430
431TEXT ·expm1TrampolineSetup(SB), NOSPLIT, $0
432	MOVB   ·hasVX(SB), R1
433	CMPBEQ R1, $1, vectorimpl                 // vectorfacility = 1, vector supported
434	MOVDexpm1vectorfacility+0x00(SB), R1
435	MOVDexpm1(SB), R2
436	MOVD   R2, 0(R1)
437	BR     ·expm1(SB)
438
439vectorimpl:
440	MOVDexpm1vectorfacility+0x00(SB), R1
441	MOVDexpm1Asm(SB), R2
442	MOVD R2, 0(R1)
443	BR   ·expm1Asm(SB)
444
445GLOBL ·expm1vectorfacility+0x00(SB), NOPTR, $8
446DATA ·expm1vectorfacility+0x00(SB)/8, $·expm1TrampolineSetup(SB)
447
448TEXT ·archPow(SB), NOSPLIT, $0
449	MOVD ·powvectorfacility+0x00(SB), R1
450	BR   (R1)
451
452TEXT ·powTrampolineSetup(SB), NOSPLIT, $0
453	MOVB   ·hasVX(SB), R1
454	CMPBEQ R1, $1, vectorimpl               // vectorfacility = 1, vector supported
455	MOVDpowvectorfacility+0x00(SB), R1
456	MOVDpow(SB), R2
457	MOVD   R2, 0(R1)
458	BR     ·pow(SB)
459
460vectorimpl:
461	MOVDpowvectorfacility+0x00(SB), R1
462	MOVDpowAsm(SB), R2
463	MOVD R2, 0(R1)
464	BR   ·powAsm(SB)
465
466GLOBL ·powvectorfacility+0x00(SB), NOPTR, $8
467DATA ·powvectorfacility+0x00(SB)/8, $·powTrampolineSetup(SB)
468
469