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