github.com/slayercat/go@v0.0.0-20170428012452-c51559813f61/src/math/stubs_s390x.s (about) 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 7 TEXT ·Asin(SB),NOSPLIT,$0 8 BR ·asin(SB) 9 10 TEXT ·Acos(SB),NOSPLIT,$0 11 BR ·acos(SB) 12 13 TEXT ·Atan2(SB),NOSPLIT,$0 14 BR ·atan2(SB) 15 16 TEXT ·Atan(SB),NOSPLIT,$0 17 BR ·atan(SB) 18 19 TEXT ·Exp2(SB),NOSPLIT,$0 20 BR ·exp2(SB) 21 22 TEXT ·Expm1(SB),NOSPLIT,$0 23 BR ·expm1(SB) 24 25 TEXT ·Exp(SB),NOSPLIT,$0 26 BR ·exp(SB) 27 28 TEXT ·Frexp(SB),NOSPLIT,$0 29 BR ·frexp(SB) 30 31 TEXT ·Hypot(SB),NOSPLIT,$0 32 BR ·hypot(SB) 33 34 TEXT ·Ldexp(SB),NOSPLIT,$0 35 BR ·ldexp(SB) 36 37 TEXT ·Log2(SB),NOSPLIT,$0 38 BR ·log2(SB) 39 40 TEXT ·Log1p(SB),NOSPLIT,$0 41 BR ·log1p(SB) 42 43 TEXT ·Log(SB),NOSPLIT,$0 44 BR ·log(SB) 45 46 TEXT ·Modf(SB),NOSPLIT,$0 47 BR ·modf(SB) 48 49 TEXT ·Mod(SB),NOSPLIT,$0 50 BR ·mod(SB) 51 52 TEXT ·Remainder(SB),NOSPLIT,$0 53 BR ·remainder(SB) 54 55 TEXT ·Tan(SB),NOSPLIT,$0 56 BR ·tan(SB) 57 58 //if go assembly use vector instruction 59 TEXT ·hasVectorFacility(SB),NOSPLIT,$24-1 60 MOVD $x-24(SP), R1 61 XC $24, 0(R1), 0(R1) // clear the storage 62 MOVD $2, R0 // R0 is the number of double words stored -1 63 WORD $0xB2B01000 // STFLE 0(R1) 64 XOR R0, R0 // reset the value of R0 65 MOVBZ z-8(SP), R1 66 AND $0x40, R1 67 BEQ novector 68 vectorinstalled: 69 // check if the vector instruction has been enabled 70 VLEIB $0, $0xF, V16 71 VLGVB $0, V16, R1 72 CMPBNE R1, $0xF, novector 73 MOVB $1, ret+0(FP) // have vx 74 RET 75 novector: 76 MOVB $0, ret+0(FP) // no vx 77 RET 78 79 TEXT ·Log10(SB),NOSPLIT,$0 80 MOVD log10vectorfacility+0x00(SB),R1 81 BR (R1) 82 83 TEXT ·log10TrampolineSetup(SB),NOSPLIT, $0 84 MOVB ·hasVX(SB), R1 85 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 86 MOVD $log10vectorfacility+0x00(SB), R1 87 MOVD $·log10(SB), R2 88 MOVD R2, 0(R1) 89 BR ·log10(SB) 90 vectorimpl: 91 MOVD $log10vectorfacility+0x00(SB), R1 92 MOVD $·log10Asm(SB), R2 93 MOVD R2, 0(R1) 94 BR ·log10Asm(SB) 95 96 GLOBL log10vectorfacility+0x00(SB), NOPTR, $8 97 DATA log10vectorfacility+0x00(SB)/8, $·log10TrampolineSetup(SB) 98 99 100 TEXT ·Cos(SB),NOSPLIT,$0 101 MOVD cosvectorfacility+0x00(SB),R1 102 BR (R1) 103 104 TEXT ·cosTrampolineSetup(SB),NOSPLIT, $0 105 MOVB ·hasVX(SB), R1 106 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 107 MOVD $cosvectorfacility+0x00(SB), R1 108 MOVD $·cos(SB), R2 109 MOVD R2, 0(R1) 110 BR ·cos(SB) 111 vectorimpl: 112 MOVD $cosvectorfacility+0x00(SB), R1 113 MOVD $·cosAsm(SB), R2 114 MOVD R2, 0(R1) 115 BR ·cosAsm(SB) 116 117 GLOBL cosvectorfacility+0x00(SB), NOPTR, $8 118 DATA cosvectorfacility+0x00(SB)/8, $·cosTrampolineSetup(SB) 119 120 121 TEXT ·Cosh(SB),NOSPLIT,$0 122 MOVD coshvectorfacility+0x00(SB),R1 123 BR (R1) 124 125 TEXT ·coshTrampolineSetup(SB),NOSPLIT, $0 126 MOVB ·hasVX(SB), R1 127 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 128 MOVD $coshvectorfacility+0x00(SB), R1 129 MOVD $·cosh(SB), R2 130 MOVD R2, 0(R1) 131 BR ·cosh(SB) 132 vectorimpl: 133 MOVD $coshvectorfacility+0x00(SB), R1 134 MOVD $·coshAsm(SB), R2 135 MOVD R2, 0(R1) 136 BR ·coshAsm(SB) 137 138 GLOBL coshvectorfacility+0x00(SB), NOPTR, $8 139 DATA coshvectorfacility+0x00(SB)/8, $·coshTrampolineSetup(SB) 140 141 142 TEXT ·Sin(SB),NOSPLIT,$0 143 MOVD sinvectorfacility+0x00(SB),R1 144 BR (R1) 145 146 TEXT ·sinTrampolineSetup(SB),NOSPLIT, $0 147 MOVB ·hasVX(SB), R1 148 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 149 MOVD $sinvectorfacility+0x00(SB), R1 150 MOVD $·sin(SB), R2 151 MOVD R2, 0(R1) 152 BR ·sin(SB) 153 vectorimpl: 154 MOVD $sinvectorfacility+0x00(SB), R1 155 MOVD $·sinAsm(SB), R2 156 MOVD R2, 0(R1) 157 BR ·sinAsm(SB) 158 159 GLOBL sinvectorfacility+0x00(SB), NOPTR, $8 160 DATA sinvectorfacility+0x00(SB)/8, $·sinTrampolineSetup(SB) 161 162 163 TEXT ·Sinh(SB),NOSPLIT,$0 164 MOVD sinhvectorfacility+0x00(SB),R1 165 BR (R1) 166 167 TEXT ·sinhTrampolineSetup(SB),NOSPLIT, $0 168 MOVB ·hasVX(SB), R1 169 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 170 MOVD $sinhvectorfacility+0x00(SB), R1 171 MOVD $·sinh(SB), R2 172 MOVD R2, 0(R1) 173 BR ·sinh(SB) 174 vectorimpl: 175 MOVD $sinhvectorfacility+0x00(SB), R1 176 MOVD $·sinhAsm(SB), R2 177 MOVD R2, 0(R1) 178 BR ·sinhAsm(SB) 179 180 GLOBL sinhvectorfacility+0x00(SB), NOPTR, $8 181 DATA sinhvectorfacility+0x00(SB)/8, $·sinhTrampolineSetup(SB) 182 183 184 185 TEXT ·Tanh(SB),NOSPLIT,$0 186 MOVD tanhvectorfacility+0x00(SB),R1 187 BR (R1) 188 189 TEXT ·tanhTrampolineSetup(SB),NOSPLIT, $0 190 MOVB ·hasVX(SB), R1 191 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 192 MOVD $tanhvectorfacility+0x00(SB), R1 193 MOVD $·tanh(SB), R2 194 MOVD R2, 0(R1) 195 BR ·tanh(SB) 196 vectorimpl: 197 MOVD $tanhvectorfacility+0x00(SB), R1 198 MOVD $·tanhAsm(SB), R2 199 MOVD R2, 0(R1) 200 BR ·tanhAsm(SB) 201 202 GLOBL tanhvectorfacility+0x00(SB), NOPTR, $8 203 DATA tanhvectorfacility+0x00(SB)/8, $·tanhTrampolineSetup(SB) 204 205