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 }