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