github.com/mattn/go@v0.0.0-20171011075504-07f7db3ea99f/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 ·Exp2(SB),NOSPLIT,$0 8 BR ·exp2(SB) 9 10 TEXT ·Frexp(SB),NOSPLIT,$0 11 BR ·frexp(SB) 12 13 TEXT ·Hypot(SB),NOSPLIT,$0 14 BR ·hypot(SB) 15 16 TEXT ·Ldexp(SB),NOSPLIT,$0 17 BR ·ldexp(SB) 18 19 TEXT ·Log2(SB),NOSPLIT,$0 20 BR ·log2(SB) 21 22 TEXT ·Modf(SB),NOSPLIT,$0 23 BR ·modf(SB) 24 25 TEXT ·Mod(SB),NOSPLIT,$0 26 BR ·mod(SB) 27 28 TEXT ·Remainder(SB),NOSPLIT,$0 29 BR ·remainder(SB) 30 31 //if go assembly use vector instruction 32 TEXT ·hasVectorFacility(SB),NOSPLIT,$24-1 33 MOVD $x-24(SP), R1 34 XC $24, 0(R1), 0(R1) // clear the storage 35 MOVD $2, R0 // R0 is the number of double words stored -1 36 WORD $0xB2B01000 // STFLE 0(R1) 37 XOR R0, R0 // reset the value of R0 38 MOVBZ z-8(SP), R1 39 AND $0x40, R1 40 BEQ novector 41 vectorinstalled: 42 // check if the vector instruction has been enabled 43 VLEIB $0, $0xF, V16 44 VLGVB $0, V16, R1 45 CMPBNE R1, $0xF, novector 46 MOVB $1, ret+0(FP) // have vx 47 RET 48 novector: 49 MOVB $0, ret+0(FP) // no vx 50 RET 51 52 TEXT ·Log10(SB),NOSPLIT,$0 53 MOVD ·log10vectorfacility+0x00(SB),R1 54 BR (R1) 55 56 TEXT ·log10TrampolineSetup(SB),NOSPLIT, $0 57 MOVB ·hasVX(SB), R1 58 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 59 MOVD $·log10vectorfacility+0x00(SB), R1 60 MOVD $·log10(SB), R2 61 MOVD R2, 0(R1) 62 BR ·log10(SB) 63 vectorimpl: 64 MOVD $·log10vectorfacility+0x00(SB), R1 65 MOVD $·log10Asm(SB), R2 66 MOVD R2, 0(R1) 67 BR ·log10Asm(SB) 68 69 GLOBL ·log10vectorfacility+0x00(SB), NOPTR, $8 70 DATA ·log10vectorfacility+0x00(SB)/8, $·log10TrampolineSetup(SB) 71 72 73 TEXT ·Cos(SB),NOSPLIT,$0 74 MOVD ·cosvectorfacility+0x00(SB),R1 75 BR (R1) 76 77 TEXT ·cosTrampolineSetup(SB),NOSPLIT, $0 78 MOVB ·hasVX(SB), R1 79 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 80 MOVD $·cosvectorfacility+0x00(SB), R1 81 MOVD $·cos(SB), R2 82 MOVD R2, 0(R1) 83 BR ·cos(SB) 84 vectorimpl: 85 MOVD $·cosvectorfacility+0x00(SB), R1 86 MOVD $·cosAsm(SB), R2 87 MOVD R2, 0(R1) 88 BR ·cosAsm(SB) 89 90 GLOBL ·cosvectorfacility+0x00(SB), NOPTR, $8 91 DATA ·cosvectorfacility+0x00(SB)/8, $·cosTrampolineSetup(SB) 92 93 94 TEXT ·Cosh(SB),NOSPLIT,$0 95 MOVD ·coshvectorfacility+0x00(SB),R1 96 BR (R1) 97 98 TEXT ·coshTrampolineSetup(SB),NOSPLIT, $0 99 MOVB ·hasVX(SB), R1 100 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 101 MOVD $·coshvectorfacility+0x00(SB), R1 102 MOVD $·cosh(SB), R2 103 MOVD R2, 0(R1) 104 BR ·cosh(SB) 105 vectorimpl: 106 MOVD $·coshvectorfacility+0x00(SB), R1 107 MOVD $·coshAsm(SB), R2 108 MOVD R2, 0(R1) 109 BR ·coshAsm(SB) 110 111 GLOBL ·coshvectorfacility+0x00(SB), NOPTR, $8 112 DATA ·coshvectorfacility+0x00(SB)/8, $·coshTrampolineSetup(SB) 113 114 115 TEXT ·Sin(SB),NOSPLIT,$0 116 MOVD ·sinvectorfacility+0x00(SB),R1 117 BR (R1) 118 119 TEXT ·sinTrampolineSetup(SB),NOSPLIT, $0 120 MOVB ·hasVX(SB), R1 121 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 122 MOVD $·sinvectorfacility+0x00(SB), R1 123 MOVD $·sin(SB), R2 124 MOVD R2, 0(R1) 125 BR ·sin(SB) 126 vectorimpl: 127 MOVD $·sinvectorfacility+0x00(SB), R1 128 MOVD $·sinAsm(SB), R2 129 MOVD R2, 0(R1) 130 BR ·sinAsm(SB) 131 132 GLOBL ·sinvectorfacility+0x00(SB), NOPTR, $8 133 DATA ·sinvectorfacility+0x00(SB)/8, $·sinTrampolineSetup(SB) 134 135 136 TEXT ·Sinh(SB),NOSPLIT,$0 137 MOVD ·sinhvectorfacility+0x00(SB),R1 138 BR (R1) 139 140 TEXT ·sinhTrampolineSetup(SB),NOSPLIT, $0 141 MOVB ·hasVX(SB), R1 142 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 143 MOVD $·sinhvectorfacility+0x00(SB), R1 144 MOVD $·sinh(SB), R2 145 MOVD R2, 0(R1) 146 BR ·sinh(SB) 147 vectorimpl: 148 MOVD $·sinhvectorfacility+0x00(SB), R1 149 MOVD $·sinhAsm(SB), R2 150 MOVD R2, 0(R1) 151 BR ·sinhAsm(SB) 152 153 GLOBL ·sinhvectorfacility+0x00(SB), NOPTR, $8 154 DATA ·sinhvectorfacility+0x00(SB)/8, $·sinhTrampolineSetup(SB) 155 156 157 TEXT ·Tanh(SB),NOSPLIT,$0 158 MOVD ·tanhvectorfacility+0x00(SB),R1 159 BR (R1) 160 161 TEXT ·tanhTrampolineSetup(SB),NOSPLIT, $0 162 MOVB ·hasVX(SB), R1 163 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 164 MOVD $·tanhvectorfacility+0x00(SB), R1 165 MOVD $·tanh(SB), R2 166 MOVD R2, 0(R1) 167 BR ·tanh(SB) 168 vectorimpl: 169 MOVD $·tanhvectorfacility+0x00(SB), R1 170 MOVD $·tanhAsm(SB), R2 171 MOVD R2, 0(R1) 172 BR ·tanhAsm(SB) 173 174 GLOBL ·tanhvectorfacility+0x00(SB), NOPTR, $8 175 DATA ·tanhvectorfacility+0x00(SB)/8, $·tanhTrampolineSetup(SB) 176 177 178 TEXT ·Log1p(SB),NOSPLIT,$0 179 MOVD ·log1pvectorfacility+0x00(SB),R1 180 BR (R1) 181 182 TEXT ·log1pTrampolineSetup(SB),NOSPLIT, $0 183 MOVB ·hasVX(SB), R1 184 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 185 MOVD $·log1pvectorfacility+0x00(SB), R1 186 MOVD $·log1p(SB), R2 187 MOVD R2, 0(R1) 188 BR ·log1p(SB) 189 vectorimpl: 190 MOVD $·log1pvectorfacility+0x00(SB), R1 191 MOVD $·log1pAsm(SB), R2 192 MOVD R2, 0(R1) 193 BR ·log1pAsm(SB) 194 195 GLOBL ·log1pvectorfacility+0x00(SB), NOPTR, $8 196 DATA ·log1pvectorfacility+0x00(SB)/8, $·log1pTrampolineSetup(SB) 197 198 199 TEXT ·Atanh(SB),NOSPLIT,$0 200 MOVD ·atanhvectorfacility+0x00(SB),R1 201 BR (R1) 202 203 TEXT ·atanhTrampolineSetup(SB),NOSPLIT, $0 204 MOVB ·hasVX(SB), R1 205 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 206 MOVD $·atanhvectorfacility+0x00(SB), R1 207 MOVD $·atanh(SB), R2 208 MOVD R2, 0(R1) 209 BR ·atanh(SB) 210 vectorimpl: 211 MOVD $·atanhvectorfacility+0x00(SB), R1 212 MOVD $·atanhAsm(SB), R2 213 MOVD R2, 0(R1) 214 BR ·atanhAsm(SB) 215 216 GLOBL ·atanhvectorfacility+0x00(SB), NOPTR, $8 217 DATA ·atanhvectorfacility+0x00(SB)/8, $·atanhTrampolineSetup(SB) 218 219 220 TEXT ·Acos(SB),NOSPLIT,$0 221 MOVD ·acosvectorfacility+0x00(SB),R1 222 BR (R1) 223 224 TEXT ·acosTrampolineSetup(SB),NOSPLIT, $0 225 MOVB ·hasVX(SB), R1 226 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 227 MOVD $·acosvectorfacility+0x00(SB), R1 228 MOVD $·acos(SB), R2 229 MOVD R2, 0(R1) 230 BR ·acos(SB) 231 vectorimpl: 232 MOVD $·acosvectorfacility+0x00(SB), R1 233 MOVD $·acosAsm(SB), R2 234 MOVD R2, 0(R1) 235 BR ·acosAsm(SB) 236 237 GLOBL ·acosvectorfacility+0x00(SB), NOPTR, $8 238 DATA ·acosvectorfacility+0x00(SB)/8, $·acosTrampolineSetup(SB) 239 240 241 TEXT ·Asin(SB),NOSPLIT,$0 242 MOVD ·asinvectorfacility+0x00(SB),R1 243 BR (R1) 244 245 TEXT ·asinTrampolineSetup(SB),NOSPLIT, $0 246 MOVB ·hasVX(SB), R1 247 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 248 MOVD $·asinvectorfacility+0x00(SB), R1 249 MOVD $·asin(SB), R2 250 MOVD R2, 0(R1) 251 BR ·asin(SB) 252 vectorimpl: 253 MOVD $·asinvectorfacility+0x00(SB), R1 254 MOVD $·asinAsm(SB), R2 255 MOVD R2, 0(R1) 256 BR ·asinAsm(SB) 257 258 GLOBL ·asinvectorfacility+0x00(SB), NOPTR, $8 259 DATA ·asinvectorfacility+0x00(SB)/8, $·asinTrampolineSetup(SB) 260 261 262 TEXT ·Asinh(SB),NOSPLIT,$0 263 MOVD ·asinhvectorfacility+0x00(SB),R1 264 BR (R1) 265 266 TEXT ·asinhTrampolineSetup(SB),NOSPLIT, $0 267 MOVB ·hasVX(SB), R1 268 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 269 MOVD $·asinhvectorfacility+0x00(SB), R1 270 MOVD $·asinh(SB), R2 271 MOVD R2, 0(R1) 272 BR ·asinh(SB) 273 vectorimpl: 274 MOVD $·asinhvectorfacility+0x00(SB), R1 275 MOVD $·asinhAsm(SB), R2 276 MOVD R2, 0(R1) 277 BR ·asinhAsm(SB) 278 279 GLOBL ·asinhvectorfacility+0x00(SB), NOPTR, $8 280 DATA ·asinhvectorfacility+0x00(SB)/8, $·asinhTrampolineSetup(SB) 281 282 283 TEXT ·Acosh(SB),NOSPLIT,$0 284 MOVD ·acoshvectorfacility+0x00(SB),R1 285 BR (R1) 286 287 TEXT ·acoshTrampolineSetup(SB),NOSPLIT, $0 288 MOVB ·hasVX(SB), R1 289 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 290 MOVD $·acoshvectorfacility+0x00(SB), R1 291 MOVD $·acosh(SB), R2 292 MOVD R2, 0(R1) 293 BR ·acosh(SB) 294 vectorimpl: 295 MOVD $·acoshvectorfacility+0x00(SB), R1 296 MOVD $·acoshAsm(SB), R2 297 MOVD R2, 0(R1) 298 BR ·acoshAsm(SB) 299 300 GLOBL ·acoshvectorfacility+0x00(SB), NOPTR, $8 301 DATA ·acoshvectorfacility+0x00(SB)/8, $·acoshTrampolineSetup(SB) 302 303 304 TEXT ·Erf(SB),NOSPLIT,$0 305 MOVD ·erfvectorfacility+0x00(SB),R1 306 BR (R1) 307 308 TEXT ·erfTrampolineSetup(SB),NOSPLIT, $0 309 MOVB ·hasVX(SB), R1 310 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 311 MOVD $·erfvectorfacility+0x00(SB), R1 312 MOVD $·erf(SB), R2 313 MOVD R2, 0(R1) 314 BR ·erf(SB) 315 vectorimpl: 316 MOVD $·erfvectorfacility+0x00(SB), R1 317 MOVD $·erfAsm(SB), R2 318 MOVD R2, 0(R1) 319 BR ·erfAsm(SB) 320 321 GLOBL ·erfvectorfacility+0x00(SB), NOPTR, $8 322 DATA ·erfvectorfacility+0x00(SB)/8, $·erfTrampolineSetup(SB) 323 324 325 TEXT ·Erfc(SB),NOSPLIT,$0 326 MOVD ·erfcvectorfacility+0x00(SB),R1 327 BR (R1) 328 329 TEXT ·erfcTrampolineSetup(SB),NOSPLIT, $0 330 MOVB ·hasVX(SB), R1 331 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 332 MOVD $·erfcvectorfacility+0x00(SB), R1 333 MOVD $·erfc(SB), R2 334 MOVD R2, 0(R1) 335 BR ·erfc(SB) 336 vectorimpl: 337 MOVD $·erfcvectorfacility+0x00(SB), R1 338 MOVD $·erfcAsm(SB), R2 339 MOVD R2, 0(R1) 340 BR ·erfcAsm(SB) 341 342 GLOBL ·erfcvectorfacility+0x00(SB), NOPTR, $8 343 DATA ·erfcvectorfacility+0x00(SB)/8, $·erfcTrampolineSetup(SB) 344 345 346 TEXT ·Atan(SB),NOSPLIT,$0 347 MOVD ·atanvectorfacility+0x00(SB),R1 348 BR (R1) 349 350 TEXT ·atanTrampolineSetup(SB),NOSPLIT, $0 351 MOVB ·hasVX(SB), R1 352 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 353 MOVD $·atanvectorfacility+0x00(SB), R1 354 MOVD $·atan(SB), R2 355 MOVD R2, 0(R1) 356 BR ·atan(SB) 357 vectorimpl: 358 MOVD $·atanvectorfacility+0x00(SB), R1 359 MOVD $·atanAsm(SB), R2 360 MOVD R2, 0(R1) 361 BR ·atanAsm(SB) 362 363 GLOBL ·atanvectorfacility+0x00(SB), NOPTR, $8 364 DATA ·atanvectorfacility+0x00(SB)/8, $·atanTrampolineSetup(SB) 365 366 367 TEXT ·Atan2(SB),NOSPLIT,$0 368 MOVD ·atan2vectorfacility+0x00(SB),R1 369 BR (R1) 370 371 TEXT ·atan2TrampolineSetup(SB),NOSPLIT, $0 372 MOVB ·hasVX(SB), R1 373 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 374 MOVD $·atan2vectorfacility+0x00(SB), R1 375 MOVD $·atan2(SB), R2 376 MOVD R2, 0(R1) 377 BR ·atan2(SB) 378 vectorimpl: 379 MOVD $·atan2vectorfacility+0x00(SB), R1 380 MOVD $·atan2Asm(SB), R2 381 MOVD R2, 0(R1) 382 BR ·atan2Asm(SB) 383 384 GLOBL ·atan2vectorfacility+0x00(SB), NOPTR, $8 385 DATA ·atan2vectorfacility+0x00(SB)/8, $·atan2TrampolineSetup(SB) 386 387 388 TEXT ·Cbrt(SB),NOSPLIT,$0 389 MOVD ·cbrtvectorfacility+0x00(SB),R1 390 BR (R1) 391 392 TEXT ·cbrtTrampolineSetup(SB),NOSPLIT, $0 393 MOVB ·hasVX(SB), R1 394 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 395 MOVD $·cbrtvectorfacility+0x00(SB), R1 396 MOVD $·cbrt(SB), R2 397 MOVD R2, 0(R1) 398 BR ·cbrt(SB) 399 vectorimpl: 400 MOVD $·cbrtvectorfacility+0x00(SB), R1 401 MOVD $·cbrtAsm(SB), R2 402 MOVD R2, 0(R1) 403 BR ·cbrtAsm(SB) 404 405 GLOBL ·cbrtvectorfacility+0x00(SB), NOPTR, $8 406 DATA ·cbrtvectorfacility+0x00(SB)/8, $·cbrtTrampolineSetup(SB) 407 408 409 TEXT ·Log(SB),NOSPLIT,$0 410 MOVD ·logvectorfacility+0x00(SB),R1 411 BR (R1) 412 413 TEXT ·logTrampolineSetup(SB),NOSPLIT, $0 414 MOVB ·hasVX(SB), R1 415 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 416 MOVD $·logvectorfacility+0x00(SB), R1 417 MOVD $·log(SB), R2 418 MOVD R2, 0(R1) 419 BR ·log(SB) 420 vectorimpl: 421 MOVD $·logvectorfacility+0x00(SB), R1 422 MOVD $·logAsm(SB), R2 423 MOVD R2, 0(R1) 424 BR ·logAsm(SB) 425 426 GLOBL ·logvectorfacility+0x00(SB), NOPTR, $8 427 DATA ·logvectorfacility+0x00(SB)/8, $·logTrampolineSetup(SB) 428 429 430 TEXT ·Tan(SB),NOSPLIT,$0 431 MOVD ·tanvectorfacility+0x00(SB),R1 432 BR (R1) 433 434 TEXT ·tanTrampolineSetup(SB),NOSPLIT, $0 435 MOVB ·hasVX(SB), R1 436 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 437 MOVD $·tanvectorfacility+0x00(SB), R1 438 MOVD $·tan(SB), R2 439 MOVD R2, 0(R1) 440 BR ·tan(SB) 441 vectorimpl: 442 MOVD $·tanvectorfacility+0x00(SB), R1 443 MOVD $·tanAsm(SB), R2 444 MOVD R2, 0(R1) 445 BR ·tanAsm(SB) 446 447 GLOBL ·tanvectorfacility+0x00(SB), NOPTR, $8 448 DATA ·tanvectorfacility+0x00(SB)/8, $·tanTrampolineSetup(SB) 449 450 TEXT ·Exp(SB),NOSPLIT,$0 451 MOVD ·expvectorfacility+0x00(SB),R1 452 BR (R1) 453 454 TEXT ·expTrampolineSetup(SB),NOSPLIT, $0 455 MOVB ·hasVX(SB), R1 456 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 457 MOVD $·expvectorfacility+0x00(SB), R1 458 MOVD $·exp(SB), R2 459 MOVD R2, 0(R1) 460 BR ·exp(SB) 461 vectorimpl: 462 MOVD $·expvectorfacility+0x00(SB), R1 463 MOVD $·expAsm(SB), R2 464 MOVD R2, 0(R1) 465 BR ·expAsm(SB) 466 467 GLOBL ·expvectorfacility+0x00(SB), NOPTR, $8 468 DATA ·expvectorfacility+0x00(SB)/8, $·expTrampolineSetup(SB) 469 470 471 TEXT ·Expm1(SB),NOSPLIT,$0 472 MOVD ·expm1vectorfacility+0x00(SB),R1 473 BR (R1) 474 475 TEXT ·expm1TrampolineSetup(SB),NOSPLIT, $0 476 MOVB ·hasVX(SB), R1 477 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 478 MOVD $·expm1vectorfacility+0x00(SB), R1 479 MOVD $·expm1(SB), R2 480 MOVD R2, 0(R1) 481 BR ·expm1(SB) 482 vectorimpl: 483 MOVD $·expm1vectorfacility+0x00(SB), R1 484 MOVD $·expm1Asm(SB), R2 485 MOVD R2, 0(R1) 486 BR ·expm1Asm(SB) 487 488 GLOBL ·expm1vectorfacility+0x00(SB), NOPTR, $8 489 DATA ·expm1vectorfacility+0x00(SB)/8, $·expm1TrampolineSetup(SB) 490 491 492 TEXT ·Pow(SB),NOSPLIT,$0 493 MOVD ·powvectorfacility+0x00(SB),R1 494 BR (R1) 495 496 TEXT ·powTrampolineSetup(SB),NOSPLIT, $0 497 MOVB ·hasVX(SB), R1 498 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported 499 MOVD $·powvectorfacility+0x00(SB), R1 500 MOVD $·pow(SB), R2 501 MOVD R2, 0(R1) 502 BR ·pow(SB) 503 vectorimpl: 504 MOVD $·powvectorfacility+0x00(SB), R1 505 MOVD $·powAsm(SB), R2 506 MOVD R2, 0(R1) 507 BR ·powAsm(SB) 508 509 GLOBL ·powvectorfacility+0x00(SB), NOPTR, $8 510 DATA ·powvectorfacility+0x00(SB)/8, $·powTrampolineSetup(SB) 511 512