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