github.com/qiaogw/arrgo@v0.0.8/internal/arithmetic_nasm.go (about)

     1  //+build !amd64 noasm appengine
     2  
     3  package asm
     4  
     5  var (
     6  	Sse3Supt, AvxSupt, Avx2Supt, FmaSupt bool
     7  )
     8  
     9  func initasm() {
    10  }
    11  
    12  func AddC(c float64, d []float64) {
    13  	for i := range d {
    14  		d[i] += c
    15  	}
    16  }
    17  
    18  func SubtrC(c float64, d []float64) {
    19  	for i := range d {
    20  		d[i] -= c
    21  	}
    22  }
    23  
    24  func MultC(c float64, d []float64) {
    25  	for i := range d {
    26  		d[i] *= c
    27  	}
    28  }
    29  
    30  func DivC(c float64, d []float64) {
    31  	for i := range d {
    32  		d[i] /= c
    33  	}
    34  }
    35  
    36  func Add(a, b []float64) {
    37  	lna, lnb := len(a), len(b)
    38  	for i, j := 0, 0; i < lna; i, j = i+1, j+1 {
    39  		if j >= lnb {
    40  			j = 0
    41  		}
    42  		a[i] += b[j]
    43  	}
    44  }
    45  
    46  func Vadd(a, b []float64) {
    47  	for i := range a {
    48  		a[i] += b[i]
    49  	}
    50  }
    51  
    52  func Hadd(st uint64, a []float64) {
    53  	ln := uint64(len(a))
    54  	for k := uint64(0); k < ln/st; k++ {
    55  		a[k] = a[k*st]
    56  		for i := uint64(1); i < st; i++ {
    57  			a[k] += a[k*st+i]
    58  		}
    59  	}
    60  }
    61  
    62  func Subtr(a, b []float64) {
    63  	lna, lnb := len(a), len(b)
    64  	for i, j := 0, 0; i < lna; i, j = i+1, j+1 {
    65  		if j >= lnb {
    66  			j = 0
    67  		}
    68  		a[i] -= b[j]
    69  	}
    70  }
    71  
    72  func Mult(a, b []float64) {
    73  	lna, lnb := len(a), len(b)
    74  	for i, j := 0, 0; i < lna; i, j = i+1, j+1 {
    75  		if j >= lnb {
    76  			j = 0
    77  		}
    78  		a[i] *= b[j]
    79  	}
    80  }
    81  
    82  func Div(a, b []float64) {
    83  	lna, lnb := len(a), len(b)
    84  	for i, j := 0, 0; i < lna; i, j = i+1, j+1 {
    85  		if j >= lnb {
    86  			j = 0
    87  		}
    88  		a[i] /= b[j]
    89  	}
    90  }
    91  
    92  func Fma12(a float64, x, b []float64) {
    93  	lnx, lnb := len(x), len(b)
    94  	for i, j := 0, 0; i < lnx; i, j = i+1, j+1 {
    95  		if j >= lnb {
    96  			j = 0
    97  		}
    98  		x[i] = a*x[i] + b[j]
    99  	}
   100  }
   101  
   102  func Fma21(a float64, x, b []float64) {
   103  	lnx, lnb := len(x), len(b)
   104  	for i, j := 0, 0; i < lnx; i, j = i+1, j+1 {
   105  		if j >= lnb {
   106  			j = 0
   107  		}
   108  		x[i] = x[i]*b[j] + a
   109  	}
   110  }