diff options
Diffstat (limited to 'src/math/stubs_s390x.s')
-rw-r--r-- | src/math/stubs_s390x.s | 468 |
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) + |