numo-narray-alt 0.9.10 → 0.9.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/LICENSE +1 -1
- data/README.md +7 -0
- data/ext/numo/narray/numo/narray.h +2 -2
- data/ext/numo/narray/numo/types/robj_macro.h +1 -1
- data/ext/numo/narray/numo/types/robject.h +1 -1
- data/ext/numo/narray/src/mh/argmax.h +154 -0
- data/ext/numo/narray/src/mh/argmin.h +154 -0
- data/ext/numo/narray/src/mh/bincount.h +233 -0
- data/ext/numo/narray/src/mh/bit/and.h +225 -0
- data/ext/numo/narray/src/mh/bit/left_shift.h +225 -0
- data/ext/numo/narray/src/mh/bit/not.h +173 -0
- data/ext/numo/narray/src/mh/bit/or.h +225 -0
- data/ext/numo/narray/src/mh/bit/right_shift.h +225 -0
- data/ext/numo/narray/src/mh/bit/xor.h +225 -0
- data/ext/numo/narray/src/mh/clip.h +115 -0
- data/ext/numo/narray/src/mh/coerce_cast.h +9 -0
- data/ext/numo/narray/src/mh/comp/binary_func.h +37 -0
- data/ext/numo/narray/src/mh/comp/eq.h +26 -0
- data/ext/numo/narray/src/mh/comp/ge.h +26 -0
- data/ext/numo/narray/src/mh/comp/gt.h +26 -0
- data/ext/numo/narray/src/mh/comp/le.h +26 -0
- data/ext/numo/narray/src/mh/comp/lt.h +26 -0
- data/ext/numo/narray/src/mh/comp/ne.h +26 -0
- data/ext/numo/narray/src/mh/comp/nearly_eq.h +26 -0
- data/ext/numo/narray/src/mh/cumprod.h +98 -0
- data/ext/numo/narray/src/mh/cumsum.h +98 -0
- data/ext/numo/narray/src/mh/divmod.h +142 -0
- data/ext/numo/narray/src/mh/eye.h +82 -0
- data/ext/numo/narray/src/mh/fill.h +94 -0
- data/ext/numo/narray/src/mh/format.h +108 -0
- data/ext/numo/narray/src/mh/format_to_a.h +89 -0
- data/ext/numo/narray/src/mh/inspect.h +33 -0
- data/ext/numo/narray/src/mh/isfinite.h +42 -0
- data/ext/numo/narray/src/mh/isinf.h +42 -0
- data/ext/numo/narray/src/mh/isnan.h +42 -0
- data/ext/numo/narray/src/mh/isneginf.h +42 -0
- data/ext/numo/narray/src/mh/isposinf.h +42 -0
- data/ext/numo/narray/src/mh/logseq.h +69 -0
- data/ext/numo/narray/src/mh/math/acos.h +2 -2
- data/ext/numo/narray/src/mh/math/acosh.h +2 -2
- data/ext/numo/narray/src/mh/math/asin.h +2 -2
- data/ext/numo/narray/src/mh/math/asinh.h +2 -2
- data/ext/numo/narray/src/mh/math/atan.h +2 -2
- data/ext/numo/narray/src/mh/math/atan2.h +3 -3
- data/ext/numo/narray/src/mh/math/atanh.h +2 -2
- data/ext/numo/narray/src/mh/math/cbrt.h +2 -2
- data/ext/numo/narray/src/mh/math/cos.h +2 -2
- data/ext/numo/narray/src/mh/math/cosh.h +2 -2
- data/ext/numo/narray/src/mh/math/erf.h +2 -2
- data/ext/numo/narray/src/mh/math/erfc.h +2 -2
- data/ext/numo/narray/src/mh/math/exp.h +2 -2
- data/ext/numo/narray/src/mh/math/exp10.h +2 -2
- data/ext/numo/narray/src/mh/math/exp2.h +2 -2
- data/ext/numo/narray/src/mh/math/expm1.h +2 -2
- data/ext/numo/narray/src/mh/math/frexp.h +3 -3
- data/ext/numo/narray/src/mh/math/hypot.h +3 -3
- data/ext/numo/narray/src/mh/math/ldexp.h +3 -3
- data/ext/numo/narray/src/mh/math/log.h +2 -2
- data/ext/numo/narray/src/mh/math/log10.h +2 -2
- data/ext/numo/narray/src/mh/math/log1p.h +2 -2
- data/ext/numo/narray/src/mh/math/log2.h +2 -2
- data/ext/numo/narray/src/mh/math/sin.h +2 -2
- data/ext/numo/narray/src/mh/math/sinc.h +2 -2
- data/ext/numo/narray/src/mh/math/sinh.h +2 -2
- data/ext/numo/narray/src/mh/math/sqrt.h +8 -8
- data/ext/numo/narray/src/mh/math/tan.h +2 -2
- data/ext/numo/narray/src/mh/math/tanh.h +2 -2
- data/ext/numo/narray/src/mh/math/unary_func.h +3 -3
- data/ext/numo/narray/src/mh/max.h +69 -0
- data/ext/numo/narray/src/mh/max_index.h +184 -0
- data/ext/numo/narray/src/mh/maximum.h +116 -0
- data/ext/numo/narray/src/mh/min.h +69 -0
- data/ext/numo/narray/src/mh/min_index.h +184 -0
- data/ext/numo/narray/src/mh/minimum.h +116 -0
- data/ext/numo/narray/src/mh/minmax.h +77 -0
- data/ext/numo/narray/src/mh/mulsum.h +185 -0
- data/ext/numo/narray/src/mh/op/add.h +78 -0
- data/ext/numo/narray/src/mh/op/binary_func.h +423 -0
- data/ext/numo/narray/src/mh/op/div.h +118 -0
- data/ext/numo/narray/src/mh/op/mod.h +108 -0
- data/ext/numo/narray/src/mh/op/mul.h +78 -0
- data/ext/numo/narray/src/mh/op/sub.h +78 -0
- data/ext/numo/narray/src/mh/prod.h +69 -0
- data/ext/numo/narray/src/mh/ptp.h +69 -0
- data/ext/numo/narray/src/mh/rand.h +315 -0
- data/ext/numo/narray/src/mh/round/ceil.h +11 -0
- data/ext/numo/narray/src/mh/round/floor.h +11 -0
- data/ext/numo/narray/src/mh/round/rint.h +9 -0
- data/ext/numo/narray/src/mh/round/round.h +11 -0
- data/ext/numo/narray/src/mh/round/trunc.h +11 -0
- data/ext/numo/narray/src/mh/round/unary_func.h +127 -0
- data/ext/numo/narray/src/mh/seq.h +130 -0
- data/ext/numo/narray/src/mh/sum.h +69 -0
- data/ext/numo/narray/src/mh/to_a.h +78 -0
- data/ext/numo/narray/src/t_bit.c +45 -234
- data/ext/numo/narray/src/t_dcomplex.c +608 -2369
- data/ext/numo/narray/src/t_dfloat.c +485 -3736
- data/ext/numo/narray/src/t_int16.c +743 -3444
- data/ext/numo/narray/src/t_int32.c +745 -3445
- data/ext/numo/narray/src/t_int64.c +743 -3446
- data/ext/numo/narray/src/t_int8.c +678 -3040
- data/ext/numo/narray/src/t_robject.c +771 -3548
- data/ext/numo/narray/src/t_scomplex.c +607 -2368
- data/ext/numo/narray/src/t_sfloat.c +440 -3693
- data/ext/numo/narray/src/t_uint16.c +743 -3440
- data/ext/numo/narray/src/t_uint32.c +743 -3440
- data/ext/numo/narray/src/t_uint64.c +743 -3442
- data/ext/numo/narray/src/t_uint8.c +678 -3038
- data/lib/numo/narray.rb +2 -3
- metadata +62 -3
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#ifndef NUMO_NARRAY_MH_MULSUM_H
|
|
2
|
+
#define NUMO_NARRAY_MH_MULSUM_H 1
|
|
3
|
+
|
|
4
|
+
#define DEF_NARRAY_FLT_MULSUM_METHOD_FUNC(tDType, tNAryClass) \
|
|
5
|
+
static void iter_##tDType##_mulsum(na_loop_t* const lp) { \
|
|
6
|
+
size_t n; \
|
|
7
|
+
char* p1; \
|
|
8
|
+
char* p2; \
|
|
9
|
+
char* p3; \
|
|
10
|
+
ssize_t s1; \
|
|
11
|
+
ssize_t s2; \
|
|
12
|
+
ssize_t s3; \
|
|
13
|
+
\
|
|
14
|
+
INIT_COUNTER(lp, n); \
|
|
15
|
+
INIT_PTR(lp, 0, p1, s1); \
|
|
16
|
+
INIT_PTR(lp, 1, p2, s2); \
|
|
17
|
+
INIT_PTR(lp, 2, p3, s3); \
|
|
18
|
+
\
|
|
19
|
+
if (s3 == 0) { \
|
|
20
|
+
tDType z; \
|
|
21
|
+
GET_DATA(p3, tDType, z); \
|
|
22
|
+
for (size_t i = 0; i < n; i++) { \
|
|
23
|
+
tDType x; \
|
|
24
|
+
tDType y; \
|
|
25
|
+
GET_DATA_STRIDE(p1, s1, tDType, x); \
|
|
26
|
+
GET_DATA_STRIDE(p2, s2, tDType, y); \
|
|
27
|
+
m_mulsum(x, y, z); \
|
|
28
|
+
} \
|
|
29
|
+
SET_DATA(p3, tDType, z); \
|
|
30
|
+
} else { \
|
|
31
|
+
for (size_t i = 0; i < n; i++) { \
|
|
32
|
+
tDType x; \
|
|
33
|
+
tDType y; \
|
|
34
|
+
tDType z; \
|
|
35
|
+
GET_DATA_STRIDE(p1, s1, tDType, x); \
|
|
36
|
+
GET_DATA_STRIDE(p2, s2, tDType, y); \
|
|
37
|
+
GET_DATA(p3, tDType, z); \
|
|
38
|
+
m_mulsum(x, y, z); \
|
|
39
|
+
SET_DATA_STRIDE(p3, s3, tDType, z); \
|
|
40
|
+
} \
|
|
41
|
+
} \
|
|
42
|
+
} \
|
|
43
|
+
\
|
|
44
|
+
static void iter_##tDType##_mulsum_nan(na_loop_t* const lp) { \
|
|
45
|
+
size_t n; \
|
|
46
|
+
char* p1; \
|
|
47
|
+
char* p2; \
|
|
48
|
+
char* p3; \
|
|
49
|
+
ssize_t s1; \
|
|
50
|
+
ssize_t s2; \
|
|
51
|
+
ssize_t s3; \
|
|
52
|
+
\
|
|
53
|
+
INIT_COUNTER(lp, n); \
|
|
54
|
+
INIT_PTR(lp, 0, p1, s1); \
|
|
55
|
+
INIT_PTR(lp, 1, p2, s2); \
|
|
56
|
+
INIT_PTR(lp, 2, p3, s3); \
|
|
57
|
+
\
|
|
58
|
+
if (s3 == 0) { \
|
|
59
|
+
tDType z; \
|
|
60
|
+
GET_DATA(p3, tDType, z); \
|
|
61
|
+
for (size_t i = 0; i < n; i++) { \
|
|
62
|
+
tDType x; \
|
|
63
|
+
tDType y; \
|
|
64
|
+
GET_DATA_STRIDE(p1, s1, tDType, x); \
|
|
65
|
+
GET_DATA_STRIDE(p2, s2, tDType, y); \
|
|
66
|
+
m_mulsum_nan(x, y, z); \
|
|
67
|
+
} \
|
|
68
|
+
SET_DATA(p3, tDType, z); \
|
|
69
|
+
} else { \
|
|
70
|
+
for (size_t i = 0; i < n; i++) { \
|
|
71
|
+
tDType x; \
|
|
72
|
+
tDType y; \
|
|
73
|
+
tDType z; \
|
|
74
|
+
GET_DATA_STRIDE(p1, s1, tDType, x); \
|
|
75
|
+
GET_DATA_STRIDE(p2, s2, tDType, y); \
|
|
76
|
+
GET_DATA(p3, tDType, z); \
|
|
77
|
+
m_mulsum_nan(x, y, z); \
|
|
78
|
+
SET_DATA_STRIDE(p3, s3, tDType, z); \
|
|
79
|
+
} \
|
|
80
|
+
} \
|
|
81
|
+
} \
|
|
82
|
+
\
|
|
83
|
+
static VALUE tDType##_mulsum_self(int argc, VALUE* argv, VALUE self) { \
|
|
84
|
+
if (argc < 1) { \
|
|
85
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for >=1)", argc); \
|
|
86
|
+
} \
|
|
87
|
+
\
|
|
88
|
+
ndfunc_arg_in_t ain[4] = { \
|
|
89
|
+
{ tNAryClass, 0 }, { tNAryClass, 0 }, { sym_reduce, 0 }, { sym_init, 0 } \
|
|
90
|
+
}; \
|
|
91
|
+
ndfunc_arg_out_t aout[1] = { { tNAryClass, 0 } }; \
|
|
92
|
+
ndfunc_t ndf = { iter_##tDType##_mulsum, STRIDE_LOOP_NIP, 4, 1, ain, aout }; \
|
|
93
|
+
VALUE naryv[2] = { self, argv[0] }; \
|
|
94
|
+
VALUE reduce = \
|
|
95
|
+
na_reduce_dimension(argc - 1, argv + 1, 2, naryv, &ndf, iter_##tDType##_mulsum_nan); \
|
|
96
|
+
VALUE v = na_ndloop(&ndf, 4, self, argv[0], reduce, m_mulsum_init); \
|
|
97
|
+
\
|
|
98
|
+
return rb_funcall(v, rb_intern("extract"), 0); \
|
|
99
|
+
} \
|
|
100
|
+
\
|
|
101
|
+
static VALUE tDType##_mulsum(int argc, VALUE* argv, VALUE self) { \
|
|
102
|
+
if (argc < 1) { \
|
|
103
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for >=1)", argc); \
|
|
104
|
+
} \
|
|
105
|
+
\
|
|
106
|
+
VALUE klass = na_upcast(rb_obj_class(self), rb_obj_class(argv[0])); \
|
|
107
|
+
if (klass == tNAryClass) { \
|
|
108
|
+
return tDType##_mulsum_self(argc, argv, self); \
|
|
109
|
+
} \
|
|
110
|
+
\
|
|
111
|
+
VALUE v = rb_funcall(klass, id_cast, 1, self); \
|
|
112
|
+
\
|
|
113
|
+
return rb_funcallv_kw(v, rb_intern("mulsum"), argc, argv, RB_PASS_CALLED_KEYWORDS); \
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
#define DEF_NARRAY_INT_MULSUM_METHOD_FUNC(tDType, tNAryClass) \
|
|
117
|
+
static void iter_##tDType##_mulsum(na_loop_t* const lp) { \
|
|
118
|
+
size_t n; \
|
|
119
|
+
char* p1; \
|
|
120
|
+
char* p2; \
|
|
121
|
+
char* p3; \
|
|
122
|
+
ssize_t s1; \
|
|
123
|
+
ssize_t s2; \
|
|
124
|
+
ssize_t s3; \
|
|
125
|
+
\
|
|
126
|
+
INIT_COUNTER(lp, n); \
|
|
127
|
+
INIT_PTR(lp, 0, p1, s1); \
|
|
128
|
+
INIT_PTR(lp, 1, p2, s2); \
|
|
129
|
+
INIT_PTR(lp, 2, p3, s3); \
|
|
130
|
+
\
|
|
131
|
+
if (s3 == 0) { \
|
|
132
|
+
tDType z; \
|
|
133
|
+
GET_DATA(p3, tDType, z); \
|
|
134
|
+
for (size_t i = 0; i < n; i++) { \
|
|
135
|
+
tDType x, y; \
|
|
136
|
+
GET_DATA_STRIDE(p1, s1, tDType, x); \
|
|
137
|
+
GET_DATA_STRIDE(p2, s2, tDType, y); \
|
|
138
|
+
m_mulsum(x, y, z); \
|
|
139
|
+
} \
|
|
140
|
+
SET_DATA(p3, tDType, z); \
|
|
141
|
+
} else { \
|
|
142
|
+
for (size_t i = 0; i < n; i++) { \
|
|
143
|
+
tDType x, y, z; \
|
|
144
|
+
GET_DATA_STRIDE(p1, s1, tDType, x); \
|
|
145
|
+
GET_DATA_STRIDE(p2, s2, tDType, y); \
|
|
146
|
+
GET_DATA(p3, tDType, z); \
|
|
147
|
+
m_mulsum(x, y, z); \
|
|
148
|
+
SET_DATA_STRIDE(p3, s3, tDType, z); \
|
|
149
|
+
} \
|
|
150
|
+
} \
|
|
151
|
+
} \
|
|
152
|
+
\
|
|
153
|
+
static VALUE tDType##_mulsum_self(int argc, VALUE* argv, VALUE self) { \
|
|
154
|
+
if (argc < 1) { \
|
|
155
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for >=1)", argc); \
|
|
156
|
+
} \
|
|
157
|
+
\
|
|
158
|
+
ndfunc_arg_in_t ain[4] = { \
|
|
159
|
+
{ tNAryClass, 0 }, { tNAryClass, 0 }, { sym_reduce, 0 }, { sym_init, 0 } \
|
|
160
|
+
}; \
|
|
161
|
+
ndfunc_arg_out_t aout[1] = { { tNAryClass, 0 } }; \
|
|
162
|
+
ndfunc_t ndf = { iter_##tDType##_mulsum, STRIDE_LOOP_NIP, 4, 1, ain, aout }; \
|
|
163
|
+
VALUE naryv[2] = { self, argv[0] }; \
|
|
164
|
+
VALUE reduce = na_reduce_dimension(argc - 1, argv + 1, 2, naryv, &ndf, 0); \
|
|
165
|
+
VALUE v = na_ndloop(&ndf, 4, self, argv[0], reduce, m_mulsum_init); \
|
|
166
|
+
\
|
|
167
|
+
return rb_funcall(v, rb_intern("extract"), 0); \
|
|
168
|
+
} \
|
|
169
|
+
\
|
|
170
|
+
static VALUE tDType##_mulsum(int argc, VALUE* argv, VALUE self) { \
|
|
171
|
+
if (argc < 1) { \
|
|
172
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for >=1)", argc); \
|
|
173
|
+
} \
|
|
174
|
+
\
|
|
175
|
+
VALUE klass = na_upcast(rb_obj_class(self), rb_obj_class(argv[0])); \
|
|
176
|
+
if (klass == tNAryClass) { \
|
|
177
|
+
return tDType##_mulsum_self(argc, argv, self); \
|
|
178
|
+
} \
|
|
179
|
+
\
|
|
180
|
+
VALUE v = rb_funcall(klass, id_cast, 1, self); \
|
|
181
|
+
\
|
|
182
|
+
return rb_funcallv_kw(v, rb_intern("mulsum"), argc, argv, RB_PASS_CALLED_KEYWORDS); \
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
#endif /* NUMO_NARRAY_MH_MULSUM_H */
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#ifndef NUMO_NARRAY_MH_OP_ADD_H
|
|
2
|
+
#define NUMO_NARRAY_MH_OP_ADD_H 1
|
|
3
|
+
|
|
4
|
+
#include "binary_func.h"
|
|
5
|
+
|
|
6
|
+
#define DEF_NARRAY_ADD_METHOD_FUNC(tDType, tNAryClass) \
|
|
7
|
+
static void iter_##tDType##_add(na_loop_t* const lp) { \
|
|
8
|
+
ITER_BINARY_INIT_VARS() \
|
|
9
|
+
if (is_aligned(p1, sizeof(tDType)) && is_aligned(p2, sizeof(tDType)) && \
|
|
10
|
+
is_aligned(p3, sizeof(tDType))) { \
|
|
11
|
+
if (s1 == sizeof(tDType) && s2 == sizeof(tDType) && s3 == sizeof(tDType)) { \
|
|
12
|
+
ITER_BINARY_INPLACE_OR_NEW_ARY(add, tDType) \
|
|
13
|
+
return; \
|
|
14
|
+
} \
|
|
15
|
+
if (is_aligned_step(s1, sizeof(tDType)) && is_aligned_step(s2, sizeof(tDType)) && \
|
|
16
|
+
is_aligned_step(s3, sizeof(tDType))) { \
|
|
17
|
+
if (s2 == 0) { \
|
|
18
|
+
if (s1 == sizeof(tDType) && s3 == sizeof(tDType)) { \
|
|
19
|
+
ITER_BINARY_INPLACE_OR_NEW_SCL(add, tDType) \
|
|
20
|
+
} else { \
|
|
21
|
+
ITER_BINARY_NEW_PTR_SCL(add, tDType) \
|
|
22
|
+
} \
|
|
23
|
+
} else { \
|
|
24
|
+
ITER_BINARY_INPLACE_OR_NEW_PTR_ARY(add, tDType) \
|
|
25
|
+
} \
|
|
26
|
+
return; \
|
|
27
|
+
} \
|
|
28
|
+
} \
|
|
29
|
+
ITER_BINARY_FALLBACK_LOOP(add, tDType) \
|
|
30
|
+
} \
|
|
31
|
+
DEF_BINARY_SELF_FUNC(add, tDType, tNAryClass) \
|
|
32
|
+
DEF_BINARY_FUNC(add, '+', tDType, tNAryClass)
|
|
33
|
+
|
|
34
|
+
#define DEF_NARRAY_INT8_ADD_METHOD_FUNC(tDType, tNAryClass) \
|
|
35
|
+
static void iter_##tDType##_add(na_loop_t* const lp) { \
|
|
36
|
+
ITER_BINARY_INIT_VARS() \
|
|
37
|
+
if (s2 == 0) { \
|
|
38
|
+
if (s1 == sizeof(tDType) && s3 == sizeof(tDType)) { \
|
|
39
|
+
ITER_BINARY_INPLACE_OR_NEW_SCL(add, tDType) \
|
|
40
|
+
} else { \
|
|
41
|
+
ITER_BINARY_NEW_PTR_SCL(add, tDType) \
|
|
42
|
+
} \
|
|
43
|
+
} else { \
|
|
44
|
+
ITER_BINARY_INPLACE_OR_NEW_PTR_ARY(add, tDType) \
|
|
45
|
+
} \
|
|
46
|
+
} \
|
|
47
|
+
DEF_BINARY_SELF_FUNC(add, tDType, tNAryClass) \
|
|
48
|
+
DEF_BINARY_FUNC(add, '+', tDType, tNAryClass)
|
|
49
|
+
|
|
50
|
+
#define DEF_NARRAY_ROBJ_ADD_METHOD_FUNC() \
|
|
51
|
+
static void iter_robject_add(na_loop_t* const lp) { \
|
|
52
|
+
ITER_BINARY_INIT_VARS() \
|
|
53
|
+
if (s2 == 0) { \
|
|
54
|
+
if (s1 == sizeof(robject) && s3 == sizeof(robject)) { \
|
|
55
|
+
ITER_BINARY_INPLACE_OR_NEW_SCL(add, robject) \
|
|
56
|
+
} else { \
|
|
57
|
+
ITER_BINARY_NEW_PTR_SCL(add, robject) \
|
|
58
|
+
} \
|
|
59
|
+
} else { \
|
|
60
|
+
ITER_BINARY_INPLACE_OR_NEW_PTR_ARY(add, robject) \
|
|
61
|
+
} \
|
|
62
|
+
} \
|
|
63
|
+
DEF_BINARY_SELF_FUNC(add, robject, numo_cRObject) \
|
|
64
|
+
static VALUE robject_add(VALUE self, VALUE other) { \
|
|
65
|
+
return robject_add_self(self, other); \
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#define DEF_NARRAY_SFLT_ADD_SSE2_METHOD_FUNC() \
|
|
69
|
+
DEF_BINARY_SFLT_SSE2_ITER_FUNC(add, _mm_add_ps) \
|
|
70
|
+
DEF_BINARY_SELF_FUNC(add, sfloat, numo_cSFloat) \
|
|
71
|
+
DEF_BINARY_FUNC(add, '+', sfloat, numo_cSFloat)
|
|
72
|
+
|
|
73
|
+
#define DEF_NARRAY_DFLT_ADD_SSE2_METHOD_FUNC() \
|
|
74
|
+
DEF_BINARY_DFLT_SSE2_ITER_FUNC(add, _mm_add_pd) \
|
|
75
|
+
DEF_BINARY_SELF_FUNC(add, dfloat, numo_cDFloat) \
|
|
76
|
+
DEF_BINARY_FUNC(add, '+', dfloat, numo_cDFloat)
|
|
77
|
+
|
|
78
|
+
#endif /* NUMO_NARRAY_MH_OP_ADD_H */
|