summaryrefslogtreecommitdiffstats
path: root/src/math/stubs_s390x.s
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/math/stubs_s390x.s468
1 files changed, 468 insertions, 0 deletions
diff --git a/src/math/stubs_s390x.s b/src/math/stubs_s390x.s
new file mode 100644
index 0000000..7400179
--- /dev/null
+++ b/src/math/stubs_s390x.s
@@ -0,0 +1,468 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include "textflag.h"
+
+TEXT ·archLog10(SB), NOSPLIT, $0
+ MOVD ·log10vectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·log10TrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·log10vectorfacility+0x00(SB), R1
+ MOVD $·log10(SB), R2
+ MOVD R2, 0(R1)
+ BR ·log10(SB)
+
+vectorimpl:
+ MOVD $·log10vectorfacility+0x00(SB), R1
+ MOVD $·log10Asm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·log10Asm(SB)
+
+GLOBL ·log10vectorfacility+0x00(SB), NOPTR, $8
+DATA ·log10vectorfacility+0x00(SB)/8, $·log10TrampolineSetup(SB)
+
+TEXT ·archCos(SB), NOSPLIT, $0
+ MOVD ·cosvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·cosTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·cosvectorfacility+0x00(SB), R1
+ MOVD $·cos(SB), R2
+ MOVD R2, 0(R1)
+ BR ·cos(SB)
+
+vectorimpl:
+ MOVD $·cosvectorfacility+0x00(SB), R1
+ MOVD $·cosAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·cosAsm(SB)
+
+GLOBL ·cosvectorfacility+0x00(SB), NOPTR, $8
+DATA ·cosvectorfacility+0x00(SB)/8, $·cosTrampolineSetup(SB)
+
+TEXT ·archCosh(SB), NOSPLIT, $0
+ MOVD ·coshvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·coshTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·coshvectorfacility+0x00(SB), R1
+ MOVD $·cosh(SB), R2
+ MOVD R2, 0(R1)
+ BR ·cosh(SB)
+
+vectorimpl:
+ MOVD $·coshvectorfacility+0x00(SB), R1
+ MOVD $·coshAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·coshAsm(SB)
+
+GLOBL ·coshvectorfacility+0x00(SB), NOPTR, $8
+DATA ·coshvectorfacility+0x00(SB)/8, $·coshTrampolineSetup(SB)
+
+TEXT ·archSin(SB), NOSPLIT, $0
+ MOVD ·sinvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·sinTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·sinvectorfacility+0x00(SB), R1
+ MOVD $·sin(SB), R2
+ MOVD R2, 0(R1)
+ BR ·sin(SB)
+
+vectorimpl:
+ MOVD $·sinvectorfacility+0x00(SB), R1
+ MOVD $·sinAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·sinAsm(SB)
+
+GLOBL ·sinvectorfacility+0x00(SB), NOPTR, $8
+DATA ·sinvectorfacility+0x00(SB)/8, $·sinTrampolineSetup(SB)
+
+TEXT ·archSinh(SB), NOSPLIT, $0
+ MOVD ·sinhvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·sinhTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·sinhvectorfacility+0x00(SB), R1
+ MOVD $·sinh(SB), R2
+ MOVD R2, 0(R1)
+ BR ·sinh(SB)
+
+vectorimpl:
+ MOVD $·sinhvectorfacility+0x00(SB), R1
+ MOVD $·sinhAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·sinhAsm(SB)
+
+GLOBL ·sinhvectorfacility+0x00(SB), NOPTR, $8
+DATA ·sinhvectorfacility+0x00(SB)/8, $·sinhTrampolineSetup(SB)
+
+TEXT ·archTanh(SB), NOSPLIT, $0
+ MOVD ·tanhvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·tanhTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·tanhvectorfacility+0x00(SB), R1
+ MOVD $·tanh(SB), R2
+ MOVD R2, 0(R1)
+ BR ·tanh(SB)
+
+vectorimpl:
+ MOVD $·tanhvectorfacility+0x00(SB), R1
+ MOVD $·tanhAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·tanhAsm(SB)
+
+GLOBL ·tanhvectorfacility+0x00(SB), NOPTR, $8
+DATA ·tanhvectorfacility+0x00(SB)/8, $·tanhTrampolineSetup(SB)
+
+TEXT ·archLog1p(SB), NOSPLIT, $0
+ MOVD ·log1pvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·log1pTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·log1pvectorfacility+0x00(SB), R1
+ MOVD $·log1p(SB), R2
+ MOVD R2, 0(R1)
+ BR ·log1p(SB)
+
+vectorimpl:
+ MOVD $·log1pvectorfacility+0x00(SB), R1
+ MOVD $·log1pAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·log1pAsm(SB)
+
+GLOBL ·log1pvectorfacility+0x00(SB), NOPTR, $8
+DATA ·log1pvectorfacility+0x00(SB)/8, $·log1pTrampolineSetup(SB)
+
+TEXT ·archAtanh(SB), NOSPLIT, $0
+ MOVD ·atanhvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·atanhTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·atanhvectorfacility+0x00(SB), R1
+ MOVD $·atanh(SB), R2
+ MOVD R2, 0(R1)
+ BR ·atanh(SB)
+
+vectorimpl:
+ MOVD $·atanhvectorfacility+0x00(SB), R1
+ MOVD $·atanhAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·atanhAsm(SB)
+
+GLOBL ·atanhvectorfacility+0x00(SB), NOPTR, $8
+DATA ·atanhvectorfacility+0x00(SB)/8, $·atanhTrampolineSetup(SB)
+
+TEXT ·archAcos(SB), NOSPLIT, $0
+ MOVD ·acosvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·acosTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·acosvectorfacility+0x00(SB), R1
+ MOVD $·acos(SB), R2
+ MOVD R2, 0(R1)
+ BR ·acos(SB)
+
+vectorimpl:
+ MOVD $·acosvectorfacility+0x00(SB), R1
+ MOVD $·acosAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·acosAsm(SB)
+
+GLOBL ·acosvectorfacility+0x00(SB), NOPTR, $8
+DATA ·acosvectorfacility+0x00(SB)/8, $·acosTrampolineSetup(SB)
+
+TEXT ·archAsin(SB), NOSPLIT, $0
+ MOVD ·asinvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·asinTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·asinvectorfacility+0x00(SB), R1
+ MOVD $·asin(SB), R2
+ MOVD R2, 0(R1)
+ BR ·asin(SB)
+
+vectorimpl:
+ MOVD $·asinvectorfacility+0x00(SB), R1
+ MOVD $·asinAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·asinAsm(SB)
+
+GLOBL ·asinvectorfacility+0x00(SB), NOPTR, $8
+DATA ·asinvectorfacility+0x00(SB)/8, $·asinTrampolineSetup(SB)
+
+TEXT ·archAsinh(SB), NOSPLIT, $0
+ MOVD ·asinhvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·asinhTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·asinhvectorfacility+0x00(SB), R1
+ MOVD $·asinh(SB), R2
+ MOVD R2, 0(R1)
+ BR ·asinh(SB)
+
+vectorimpl:
+ MOVD $·asinhvectorfacility+0x00(SB), R1
+ MOVD $·asinhAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·asinhAsm(SB)
+
+GLOBL ·asinhvectorfacility+0x00(SB), NOPTR, $8
+DATA ·asinhvectorfacility+0x00(SB)/8, $·asinhTrampolineSetup(SB)
+
+TEXT ·archAcosh(SB), NOSPLIT, $0
+ MOVD ·acoshvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·acoshTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·acoshvectorfacility+0x00(SB), R1
+ MOVD $·acosh(SB), R2
+ MOVD R2, 0(R1)
+ BR ·acosh(SB)
+
+vectorimpl:
+ MOVD $·acoshvectorfacility+0x00(SB), R1
+ MOVD $·acoshAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·acoshAsm(SB)
+
+GLOBL ·acoshvectorfacility+0x00(SB), NOPTR, $8
+DATA ·acoshvectorfacility+0x00(SB)/8, $·acoshTrampolineSetup(SB)
+
+TEXT ·archErf(SB), NOSPLIT, $0
+ MOVD ·erfvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·erfTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·erfvectorfacility+0x00(SB), R1
+ MOVD $·erf(SB), R2
+ MOVD R2, 0(R1)
+ BR ·erf(SB)
+
+vectorimpl:
+ MOVD $·erfvectorfacility+0x00(SB), R1
+ MOVD $·erfAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·erfAsm(SB)
+
+GLOBL ·erfvectorfacility+0x00(SB), NOPTR, $8
+DATA ·erfvectorfacility+0x00(SB)/8, $·erfTrampolineSetup(SB)
+
+TEXT ·archErfc(SB), NOSPLIT, $0
+ MOVD ·erfcvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·erfcTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·erfcvectorfacility+0x00(SB), R1
+ MOVD $·erfc(SB), R2
+ MOVD R2, 0(R1)
+ BR ·erfc(SB)
+
+vectorimpl:
+ MOVD $·erfcvectorfacility+0x00(SB), R1
+ MOVD $·erfcAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·erfcAsm(SB)
+
+GLOBL ·erfcvectorfacility+0x00(SB), NOPTR, $8
+DATA ·erfcvectorfacility+0x00(SB)/8, $·erfcTrampolineSetup(SB)
+
+TEXT ·archAtan(SB), NOSPLIT, $0
+ MOVD ·atanvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·atanTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·atanvectorfacility+0x00(SB), R1
+ MOVD $·atan(SB), R2
+ MOVD R2, 0(R1)
+ BR ·atan(SB)
+
+vectorimpl:
+ MOVD $·atanvectorfacility+0x00(SB), R1
+ MOVD $·atanAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·atanAsm(SB)
+
+GLOBL ·atanvectorfacility+0x00(SB), NOPTR, $8
+DATA ·atanvectorfacility+0x00(SB)/8, $·atanTrampolineSetup(SB)
+
+TEXT ·archAtan2(SB), NOSPLIT, $0
+ MOVD ·atan2vectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·atan2TrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·atan2vectorfacility+0x00(SB), R1
+ MOVD $·atan2(SB), R2
+ MOVD R2, 0(R1)
+ BR ·atan2(SB)
+
+vectorimpl:
+ MOVD $·atan2vectorfacility+0x00(SB), R1
+ MOVD $·atan2Asm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·atan2Asm(SB)
+
+GLOBL ·atan2vectorfacility+0x00(SB), NOPTR, $8
+DATA ·atan2vectorfacility+0x00(SB)/8, $·atan2TrampolineSetup(SB)
+
+TEXT ·archCbrt(SB), NOSPLIT, $0
+ MOVD ·cbrtvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·cbrtTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·cbrtvectorfacility+0x00(SB), R1
+ MOVD $·cbrt(SB), R2
+ MOVD R2, 0(R1)
+ BR ·cbrt(SB)
+
+vectorimpl:
+ MOVD $·cbrtvectorfacility+0x00(SB), R1
+ MOVD $·cbrtAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·cbrtAsm(SB)
+
+GLOBL ·cbrtvectorfacility+0x00(SB), NOPTR, $8
+DATA ·cbrtvectorfacility+0x00(SB)/8, $·cbrtTrampolineSetup(SB)
+
+TEXT ·archLog(SB), NOSPLIT, $0
+ MOVD ·logvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·logTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·logvectorfacility+0x00(SB), R1
+ MOVD $·log(SB), R2
+ MOVD R2, 0(R1)
+ BR ·log(SB)
+
+vectorimpl:
+ MOVD $·logvectorfacility+0x00(SB), R1
+ MOVD $·logAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·logAsm(SB)
+
+GLOBL ·logvectorfacility+0x00(SB), NOPTR, $8
+DATA ·logvectorfacility+0x00(SB)/8, $·logTrampolineSetup(SB)
+
+TEXT ·archTan(SB), NOSPLIT, $0
+ MOVD ·tanvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·tanTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·tanvectorfacility+0x00(SB), R1
+ MOVD $·tan(SB), R2
+ MOVD R2, 0(R1)
+ BR ·tan(SB)
+
+vectorimpl:
+ MOVD $·tanvectorfacility+0x00(SB), R1
+ MOVD $·tanAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·tanAsm(SB)
+
+GLOBL ·tanvectorfacility+0x00(SB), NOPTR, $8
+DATA ·tanvectorfacility+0x00(SB)/8, $·tanTrampolineSetup(SB)
+
+TEXT ·archExp(SB), NOSPLIT, $0
+ MOVD ·expvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·expTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·expvectorfacility+0x00(SB), R1
+ MOVD $·exp(SB), R2
+ MOVD R2, 0(R1)
+ BR ·exp(SB)
+
+vectorimpl:
+ MOVD $·expvectorfacility+0x00(SB), R1
+ MOVD $·expAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·expAsm(SB)
+
+GLOBL ·expvectorfacility+0x00(SB), NOPTR, $8
+DATA ·expvectorfacility+0x00(SB)/8, $·expTrampolineSetup(SB)
+
+TEXT ·archExpm1(SB), NOSPLIT, $0
+ MOVD ·expm1vectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·expm1TrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·expm1vectorfacility+0x00(SB), R1
+ MOVD $·expm1(SB), R2
+ MOVD R2, 0(R1)
+ BR ·expm1(SB)
+
+vectorimpl:
+ MOVD $·expm1vectorfacility+0x00(SB), R1
+ MOVD $·expm1Asm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·expm1Asm(SB)
+
+GLOBL ·expm1vectorfacility+0x00(SB), NOPTR, $8
+DATA ·expm1vectorfacility+0x00(SB)/8, $·expm1TrampolineSetup(SB)
+
+TEXT ·archPow(SB), NOSPLIT, $0
+ MOVD ·powvectorfacility+0x00(SB), R1
+ BR (R1)
+
+TEXT ·powTrampolineSetup(SB), NOSPLIT, $0
+ MOVB ·hasVX(SB), R1
+ CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
+ MOVD $·powvectorfacility+0x00(SB), R1
+ MOVD $·pow(SB), R2
+ MOVD R2, 0(R1)
+ BR ·pow(SB)
+
+vectorimpl:
+ MOVD $·powvectorfacility+0x00(SB), R1
+ MOVD $·powAsm(SB), R2
+ MOVD R2, 0(R1)
+ BR ·powAsm(SB)
+
+GLOBL ·powvectorfacility+0x00(SB), NOPTR, $8
+DATA ·powvectorfacility+0x00(SB)/8, $·powTrampolineSetup(SB)
+