carray 3.0.4 → 3.0.6
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/CHANGELOG.md +438 -0
- data/README.md +1 -1
- data/carray.gemspec +3 -2
- data/ext/ca_array_pool.c +25 -1
- data/ext/ca_axis_dispatch.c +19 -20
- data/ext/ca_axis_group.c +1 -1
- data/ext/ca_categorical_iterator.c +34 -27
- data/ext/ca_compare.c +4 -4
- data/ext/ca_composite_dispatch.c +9 -9
- data/ext/ca_kernel_iterator.c +122 -237
- data/ext/ca_kernel_iterator.h +522 -337
- data/ext/ca_obj_array.c +69 -19
- data/ext/ca_obj_bincmp.c +10 -1
- data/ext/ca_obj_binop.c +11 -1
- data/ext/ca_obj_bitarray.c +5 -1
- data/ext/ca_obj_bitfield.c +60 -43
- data/ext/ca_obj_byte_swap.c +4 -1
- data/ext/ca_obj_const_string.c +15 -3
- data/ext/ca_obj_face.c +44 -1
- data/ext/ca_obj_fake.c +3 -1
- data/ext/ca_obj_field.c +13 -3
- data/ext/ca_obj_grid.c +219 -17
- data/ext/ca_obj_meld.c +69 -113
- data/ext/ca_obj_moncmp.c +9 -1
- data/ext/ca_obj_monop.c +86 -12
- data/ext/ca_obj_object.c +118 -32
- data/ext/ca_obj_record.c +3 -0
- data/ext/ca_obj_reduce.c +19 -1
- data/ext/ca_obj_refer.c +80 -26
- data/ext/ca_obj_remap.c +69 -10
- data/ext/ca_obj_roll.c +27 -6
- data/ext/ca_obj_select.c +38 -6
- data/ext/ca_obj_select_axis.c +1 -0
- data/ext/ca_obj_shift.c +32 -7
- data/ext/ca_obj_stack.c +311 -111
- data/ext/ca_obj_stride.c +159 -64
- data/ext/ca_obj_string.c +27 -2
- data/ext/ca_obj_tile.c +28 -7
- data/ext/ca_obj_transpose.c +8 -4
- data/ext/ca_obj_triop.c +12 -1
- data/ext/ca_obj_window.c +80 -50
- data/ext/ca_op_ipower.c +12 -12
- data/ext/ca_sort_kernels.h +6 -3
- data/ext/caframe_csv_reader.c +1 -1
- data/ext/carray.h +35 -1
- data/ext/carray_access.c +43 -67
- data/ext/carray_address_basis.c +134 -0
- data/ext/carray_attribute.c +32 -0
- data/ext/carray_broadcast.c +3 -4
- data/ext/carray_build_flags.h +1 -1
- data/ext/carray_cast.c +251 -93
- data/ext/carray_cast_func.rb +56 -26
- data/ext/carray_conversion.c +11 -7
- data/ext/carray_core.c +814 -72
- data/ext/carray_count.c +6 -0
- data/ext/carray_element.c +22 -13
- data/ext/carray_factorize.c +20 -20
- data/ext/carray_generate.c +8 -2
- data/ext/carray_histogram.c +26 -4
- data/ext/carray_index_classifier.c +4 -4
- data/ext/carray_internal.h +159 -12
- data/ext/carray_kernels_bincmp.c +2174 -170
- data/ext/carray_kernels_binop.c +25653 -5487
- data/ext/carray_kernels_init.c +8 -8
- data/ext/carray_kernels_moncmp.c +96 -96
- data/ext/carray_kernels_monop.c +12253 -5235
- data/ext/carray_kernels_reduce_aggregate.c +6150 -2423
- data/ext/carray_kernels_reduce_boolean.c +1533 -15
- data/ext/carray_kernels_reduce_cumulative.c +2442 -882
- data/ext/carray_kernels_reduce_extreme.c +5658 -1661
- data/ext/carray_kernels_reduce_variance.c +2534 -402
- data/ext/carray_kernels_scan.c +368 -368
- data/ext/carray_kernels_search.c +4551 -604
- data/ext/carray_kernels_sort.c +659 -751
- data/ext/carray_kernels_triop.c +114 -114
- data/ext/carray_key_windows.c +4 -0
- data/ext/carray_lazy.c +47 -0
- data/ext/carray_loop.c +1 -1
- data/ext/carray_mask.c +175 -161
- data/ext/carray_median_percentile.c +4 -4
- data/ext/carray_memory_view.c +15 -9
- data/ext/carray_operator.c +152 -49
- data/ext/carray_order.c +230 -10
- data/ext/carray_random.c +22 -19
- data/ext/carray_scatter.c +24 -7
- data/ext/carray_slab.c +128 -29
- data/ext/carray_sort.c +224 -16
- data/ext/carray_sort_kernel.c +5 -7
- data/ext/carray_struct.c +35 -43
- data/ext/carray_test.c +74 -19
- data/ext/carray_time_text.c +6 -4
- data/ext/carray_utils.c +63 -21
- data/ext/extconf.rb +11 -0
- data/ext/mkkernel.rb +546 -199
- data/ext/ruby_carray.c +4 -1
- data/ext/version.h +4 -4
- data/lib/carray/attribute.rb +42 -5
- data/lib/carray/autoload_carray.rb +3 -3
- data/lib/carray/autoload_method_extension.rb +5 -3
- data/lib/carray/axis_group.rb +13 -7
- data/lib/carray/basics.rb +28 -8
- data/lib/carray/block_iterator.rb +17 -3
- data/lib/carray/categorical.rb +35 -23
- data/lib/carray/categorical_iterator.rb +8 -8
- data/lib/carray/complex.rb +2 -2
- data/lib/carray/conditional.rb +3 -2
- data/lib/carray/const_string.rb +10 -0
- data/lib/carray/data_type_extension.rb +8 -1
- data/lib/carray/fixlen_string.rb +41 -2
- data/lib/carray/frame/column_verbs.rb +48 -16
- data/lib/carray/frame/concat.rb +17 -3
- data/lib/carray/frame/convert.rb +19 -0
- data/lib/carray/frame/csv_parser.rb +32 -32
- data/lib/carray/frame/describe.rb +4 -2
- data/lib/carray/frame/frame.rb +405 -85
- data/lib/carray/frame/group.rb +777 -64
- data/lib/carray/frame/io.rb +212 -72
- data/lib/carray/frame/join.rb +146 -37
- data/lib/carray/frame/records.rb +3 -3
- data/lib/carray/frame/reshape.rb +89 -11
- data/lib/carray/frame/sort.rb +57 -9
- data/lib/carray/frame/verbs.rb +384 -49
- data/lib/carray/frame/windows.rb +44 -6
- data/lib/carray/fuse_source.rb +31 -2
- data/lib/carray/inspect.rb +7 -2
- data/lib/carray/iterator.rb +32 -0
- data/lib/carray/lazy.rb +52 -8
- data/lib/carray/mask_gap_fill.rb +37 -17
- data/lib/carray/meld_reduce.rb +1 -1
- data/lib/carray/methods/choose.rb +3 -2
- data/lib/carray/methods/is_in.rb +8 -1
- data/lib/carray/methods/meshgrid.rb +3 -1
- data/lib/carray/runtime.rb +47 -8
- data/lib/carray/segment_iterator.rb +35 -16
- data/lib/carray/serialize.rb +53 -19
- data/lib/carray/stack.rb +33 -18
- data/lib/carray/string.rb +8 -0
- data/lib/carray/string_operation_extension.rb +13 -5
- data/lib/carray/struct_builder.rb +5 -3
- data/lib/carray/time.rb +112 -68
- data/lib/carray/window_iterator.rb +16 -4
- data/yard-stubs/ca_obj_array.rb +26 -1
- data/yard-stubs/ca_obj_transpose.rb +5 -4
- data/yard-stubs/carray_attribute.rb +3 -1
- data/yard-stubs/carray_cast.rb +10 -5
- data/yard-stubs/carray_conversion.rb +13 -3
- data/yard-stubs/carray_element.rb +7 -6
- data/yard-stubs/carray_mask.rb +28 -4
- data/yard-stubs/carray_math.rb +45 -20
- data/yard-stubs/carray_memory_view.rb +7 -0
- data/yard-stubs/carray_order.rb +100 -4
- data/yard-stubs/carray_scatter.rb +7 -5
- data/yard-stubs/carray_test.rb +7 -4
- metadata +18 -4
data/ext/carray_kernels_bincmp.c
CHANGED
|
@@ -52,8 +52,8 @@ ca_bincmp_feq_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
52
52
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
53
53
|
double tol)
|
|
54
54
|
{
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
56
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
57
57
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
58
58
|
boolean8_t *p3 = q3;
|
|
59
59
|
ca_size_t k;
|
|
@@ -68,22 +68,50 @@ ca_bincmp_feq_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
68
68
|
p2 = q2 + k*i2;
|
|
69
69
|
p3 = q3 + k*i3;
|
|
70
70
|
{
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
ca_u_float32_t f1a = fabs((float64_t) *p1);
|
|
72
|
+
ca_u_float32_t f2a = fabs((float64_t) *p2);
|
|
73
|
+
ca_u_float32_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
74
74
|
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * FLT_EPSILON ) ? 1 : 0;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
79
|
+
/* scalar on the right: read it once, so the boolean store
|
|
80
|
+
cannot be taken to change it and the loop vectorizes */
|
|
81
|
+
ca_u_float32_t sv = *q2;
|
|
82
|
+
p2 = &sv;
|
|
83
|
+
for (k=0; k<n; k++) {
|
|
84
|
+
p1 = q1 + k;
|
|
85
|
+
p3 = q3 + k;
|
|
86
|
+
{
|
|
87
|
+
ca_u_float32_t f1a = fabs((float64_t) *p1);
|
|
88
|
+
ca_u_float32_t f2a = fabs((float64_t) *p2);
|
|
89
|
+
ca_u_float32_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
90
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * FLT_EPSILON ) ? 1 : 0;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
94
|
+
ca_u_float32_t sv = *q1;
|
|
95
|
+
p1 = &sv;
|
|
96
|
+
for (k=0; k<n; k++) {
|
|
97
|
+
p2 = q2 + k;
|
|
98
|
+
p3 = q3 + k;
|
|
99
|
+
{
|
|
100
|
+
ca_u_float32_t f1a = fabs((float64_t) *p1);
|
|
101
|
+
ca_u_float32_t f2a = fabs((float64_t) *p2);
|
|
102
|
+
ca_u_float32_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
103
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * FLT_EPSILON ) ? 1 : 0;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
78
106
|
} else {
|
|
79
107
|
for (k=0; k<n; k++) {
|
|
80
108
|
p1 = q1 + k*i1;
|
|
81
109
|
p2 = q2 + k*i2;
|
|
82
110
|
p3 = q3 + k*i3;
|
|
83
111
|
{
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
112
|
+
ca_u_float32_t f1a = fabs((float64_t) *p1);
|
|
113
|
+
ca_u_float32_t f2a = fabs((float64_t) *p2);
|
|
114
|
+
ca_u_float32_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
87
115
|
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * FLT_EPSILON ) ? 1 : 0;
|
|
88
116
|
}
|
|
89
117
|
}
|
|
@@ -97,8 +125,8 @@ ca_bincmp_feq_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
97
125
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
98
126
|
double tol)
|
|
99
127
|
{
|
|
100
|
-
|
|
101
|
-
|
|
128
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
129
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
102
130
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
103
131
|
boolean8_t *p3 = q3;
|
|
104
132
|
ca_size_t k;
|
|
@@ -113,22 +141,50 @@ ca_bincmp_feq_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
113
141
|
p2 = q2 + k*i2;
|
|
114
142
|
p3 = q3 + k*i3;
|
|
115
143
|
{
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
144
|
+
ca_u_float64_t f1a = fabs((float64_t) *p1);
|
|
145
|
+
ca_u_float64_t f2a = fabs((float64_t) *p2);
|
|
146
|
+
ca_u_float64_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
119
147
|
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * DBL_EPSILON ) ? 1 : 0;
|
|
120
148
|
}
|
|
121
149
|
}
|
|
122
150
|
}
|
|
151
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
152
|
+
/* scalar on the right: read it once, so the boolean store
|
|
153
|
+
cannot be taken to change it and the loop vectorizes */
|
|
154
|
+
ca_u_float64_t sv = *q2;
|
|
155
|
+
p2 = &sv;
|
|
156
|
+
for (k=0; k<n; k++) {
|
|
157
|
+
p1 = q1 + k;
|
|
158
|
+
p3 = q3 + k;
|
|
159
|
+
{
|
|
160
|
+
ca_u_float64_t f1a = fabs((float64_t) *p1);
|
|
161
|
+
ca_u_float64_t f2a = fabs((float64_t) *p2);
|
|
162
|
+
ca_u_float64_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
163
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * DBL_EPSILON ) ? 1 : 0;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
167
|
+
ca_u_float64_t sv = *q1;
|
|
168
|
+
p1 = &sv;
|
|
169
|
+
for (k=0; k<n; k++) {
|
|
170
|
+
p2 = q2 + k;
|
|
171
|
+
p3 = q3 + k;
|
|
172
|
+
{
|
|
173
|
+
ca_u_float64_t f1a = fabs((float64_t) *p1);
|
|
174
|
+
ca_u_float64_t f2a = fabs((float64_t) *p2);
|
|
175
|
+
ca_u_float64_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
176
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * DBL_EPSILON ) ? 1 : 0;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
123
179
|
} else {
|
|
124
180
|
for (k=0; k<n; k++) {
|
|
125
181
|
p1 = q1 + k*i1;
|
|
126
182
|
p2 = q2 + k*i2;
|
|
127
183
|
p3 = q3 + k*i3;
|
|
128
184
|
{
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
185
|
+
ca_u_float64_t f1a = fabs((float64_t) *p1);
|
|
186
|
+
ca_u_float64_t f2a = fabs((float64_t) *p2);
|
|
187
|
+
ca_u_float64_t fmax = (f1a > f2a) ? f1a : f2a;
|
|
132
188
|
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * DBL_EPSILON ) ? 1 : 0;
|
|
133
189
|
}
|
|
134
190
|
}
|
|
@@ -226,6 +282,24 @@ ca_bincmp_eq_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
226
282
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
227
283
|
}
|
|
228
284
|
}
|
|
285
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
286
|
+
/* scalar on the right: read it once, so the boolean store
|
|
287
|
+
cannot be taken to change it and the loop vectorizes */
|
|
288
|
+
boolean8_t sv = *q2;
|
|
289
|
+
p2 = &sv;
|
|
290
|
+
for (k=0; k<n; k++) {
|
|
291
|
+
p1 = q1 + k;
|
|
292
|
+
p3 = q3 + k;
|
|
293
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
294
|
+
}
|
|
295
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
296
|
+
boolean8_t sv = *q1;
|
|
297
|
+
p1 = &sv;
|
|
298
|
+
for (k=0; k<n; k++) {
|
|
299
|
+
p2 = q2 + k;
|
|
300
|
+
p3 = q3 + k;
|
|
301
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
302
|
+
}
|
|
229
303
|
} else {
|
|
230
304
|
for (k=0; k<n; k++) {
|
|
231
305
|
p1 = q1 + k*i1;
|
|
@@ -261,6 +335,24 @@ ca_bincmp_eq_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
261
335
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
262
336
|
}
|
|
263
337
|
}
|
|
338
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
339
|
+
/* scalar on the right: read it once, so the boolean store
|
|
340
|
+
cannot be taken to change it and the loop vectorizes */
|
|
341
|
+
int8_t sv = *q2;
|
|
342
|
+
p2 = &sv;
|
|
343
|
+
for (k=0; k<n; k++) {
|
|
344
|
+
p1 = q1 + k;
|
|
345
|
+
p3 = q3 + k;
|
|
346
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
347
|
+
}
|
|
348
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
349
|
+
int8_t sv = *q1;
|
|
350
|
+
p1 = &sv;
|
|
351
|
+
for (k=0; k<n; k++) {
|
|
352
|
+
p2 = q2 + k;
|
|
353
|
+
p3 = q3 + k;
|
|
354
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
355
|
+
}
|
|
264
356
|
} else {
|
|
265
357
|
for (k=0; k<n; k++) {
|
|
266
358
|
p1 = q1 + k*i1;
|
|
@@ -296,6 +388,24 @@ ca_bincmp_eq_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
296
388
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
297
389
|
}
|
|
298
390
|
}
|
|
391
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
392
|
+
/* scalar on the right: read it once, so the boolean store
|
|
393
|
+
cannot be taken to change it and the loop vectorizes */
|
|
394
|
+
uint8_t sv = *q2;
|
|
395
|
+
p2 = &sv;
|
|
396
|
+
for (k=0; k<n; k++) {
|
|
397
|
+
p1 = q1 + k;
|
|
398
|
+
p3 = q3 + k;
|
|
399
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
400
|
+
}
|
|
401
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
402
|
+
uint8_t sv = *q1;
|
|
403
|
+
p1 = &sv;
|
|
404
|
+
for (k=0; k<n; k++) {
|
|
405
|
+
p2 = q2 + k;
|
|
406
|
+
p3 = q3 + k;
|
|
407
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
408
|
+
}
|
|
299
409
|
} else {
|
|
300
410
|
for (k=0; k<n; k++) {
|
|
301
411
|
p1 = q1 + k*i1;
|
|
@@ -313,8 +423,8 @@ ca_bincmp_eq_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
313
423
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
314
424
|
double tol)
|
|
315
425
|
{
|
|
316
|
-
|
|
317
|
-
|
|
426
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
427
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
318
428
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
319
429
|
boolean8_t *p3 = q3;
|
|
320
430
|
ca_size_t k;
|
|
@@ -331,6 +441,24 @@ ca_bincmp_eq_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
331
441
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
332
442
|
}
|
|
333
443
|
}
|
|
444
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
445
|
+
/* scalar on the right: read it once, so the boolean store
|
|
446
|
+
cannot be taken to change it and the loop vectorizes */
|
|
447
|
+
ca_u_int16_t sv = *q2;
|
|
448
|
+
p2 = &sv;
|
|
449
|
+
for (k=0; k<n; k++) {
|
|
450
|
+
p1 = q1 + k;
|
|
451
|
+
p3 = q3 + k;
|
|
452
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
453
|
+
}
|
|
454
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
455
|
+
ca_u_int16_t sv = *q1;
|
|
456
|
+
p1 = &sv;
|
|
457
|
+
for (k=0; k<n; k++) {
|
|
458
|
+
p2 = q2 + k;
|
|
459
|
+
p3 = q3 + k;
|
|
460
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
461
|
+
}
|
|
334
462
|
} else {
|
|
335
463
|
for (k=0; k<n; k++) {
|
|
336
464
|
p1 = q1 + k*i1;
|
|
@@ -348,8 +476,8 @@ ca_bincmp_eq_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
348
476
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
349
477
|
double tol)
|
|
350
478
|
{
|
|
351
|
-
|
|
352
|
-
|
|
479
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
480
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
353
481
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
354
482
|
boolean8_t *p3 = q3;
|
|
355
483
|
ca_size_t k;
|
|
@@ -366,6 +494,24 @@ ca_bincmp_eq_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
366
494
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
367
495
|
}
|
|
368
496
|
}
|
|
497
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
498
|
+
/* scalar on the right: read it once, so the boolean store
|
|
499
|
+
cannot be taken to change it and the loop vectorizes */
|
|
500
|
+
ca_u_uint16_t sv = *q2;
|
|
501
|
+
p2 = &sv;
|
|
502
|
+
for (k=0; k<n; k++) {
|
|
503
|
+
p1 = q1 + k;
|
|
504
|
+
p3 = q3 + k;
|
|
505
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
506
|
+
}
|
|
507
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
508
|
+
ca_u_uint16_t sv = *q1;
|
|
509
|
+
p1 = &sv;
|
|
510
|
+
for (k=0; k<n; k++) {
|
|
511
|
+
p2 = q2 + k;
|
|
512
|
+
p3 = q3 + k;
|
|
513
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
514
|
+
}
|
|
369
515
|
} else {
|
|
370
516
|
for (k=0; k<n; k++) {
|
|
371
517
|
p1 = q1 + k*i1;
|
|
@@ -383,8 +529,8 @@ ca_bincmp_eq_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
383
529
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
384
530
|
double tol)
|
|
385
531
|
{
|
|
386
|
-
|
|
387
|
-
|
|
532
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
533
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
388
534
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
389
535
|
boolean8_t *p3 = q3;
|
|
390
536
|
ca_size_t k;
|
|
@@ -401,6 +547,24 @@ ca_bincmp_eq_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
401
547
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
402
548
|
}
|
|
403
549
|
}
|
|
550
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
551
|
+
/* scalar on the right: read it once, so the boolean store
|
|
552
|
+
cannot be taken to change it and the loop vectorizes */
|
|
553
|
+
ca_u_int32_t sv = *q2;
|
|
554
|
+
p2 = &sv;
|
|
555
|
+
for (k=0; k<n; k++) {
|
|
556
|
+
p1 = q1 + k;
|
|
557
|
+
p3 = q3 + k;
|
|
558
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
559
|
+
}
|
|
560
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
561
|
+
ca_u_int32_t sv = *q1;
|
|
562
|
+
p1 = &sv;
|
|
563
|
+
for (k=0; k<n; k++) {
|
|
564
|
+
p2 = q2 + k;
|
|
565
|
+
p3 = q3 + k;
|
|
566
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
567
|
+
}
|
|
404
568
|
} else {
|
|
405
569
|
for (k=0; k<n; k++) {
|
|
406
570
|
p1 = q1 + k*i1;
|
|
@@ -418,8 +582,8 @@ ca_bincmp_eq_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
418
582
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
419
583
|
double tol)
|
|
420
584
|
{
|
|
421
|
-
|
|
422
|
-
|
|
585
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
586
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
423
587
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
424
588
|
boolean8_t *p3 = q3;
|
|
425
589
|
ca_size_t k;
|
|
@@ -436,6 +600,24 @@ ca_bincmp_eq_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
436
600
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
437
601
|
}
|
|
438
602
|
}
|
|
603
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
604
|
+
/* scalar on the right: read it once, so the boolean store
|
|
605
|
+
cannot be taken to change it and the loop vectorizes */
|
|
606
|
+
ca_u_uint32_t sv = *q2;
|
|
607
|
+
p2 = &sv;
|
|
608
|
+
for (k=0; k<n; k++) {
|
|
609
|
+
p1 = q1 + k;
|
|
610
|
+
p3 = q3 + k;
|
|
611
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
612
|
+
}
|
|
613
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
614
|
+
ca_u_uint32_t sv = *q1;
|
|
615
|
+
p1 = &sv;
|
|
616
|
+
for (k=0; k<n; k++) {
|
|
617
|
+
p2 = q2 + k;
|
|
618
|
+
p3 = q3 + k;
|
|
619
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
620
|
+
}
|
|
439
621
|
} else {
|
|
440
622
|
for (k=0; k<n; k++) {
|
|
441
623
|
p1 = q1 + k*i1;
|
|
@@ -453,8 +635,8 @@ ca_bincmp_eq_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
453
635
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
454
636
|
double tol)
|
|
455
637
|
{
|
|
456
|
-
|
|
457
|
-
|
|
638
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
639
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
458
640
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
459
641
|
boolean8_t *p3 = q3;
|
|
460
642
|
ca_size_t k;
|
|
@@ -471,6 +653,24 @@ ca_bincmp_eq_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
471
653
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
472
654
|
}
|
|
473
655
|
}
|
|
656
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
657
|
+
/* scalar on the right: read it once, so the boolean store
|
|
658
|
+
cannot be taken to change it and the loop vectorizes */
|
|
659
|
+
ca_u_int64_t sv = *q2;
|
|
660
|
+
p2 = &sv;
|
|
661
|
+
for (k=0; k<n; k++) {
|
|
662
|
+
p1 = q1 + k;
|
|
663
|
+
p3 = q3 + k;
|
|
664
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
665
|
+
}
|
|
666
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
667
|
+
ca_u_int64_t sv = *q1;
|
|
668
|
+
p1 = &sv;
|
|
669
|
+
for (k=0; k<n; k++) {
|
|
670
|
+
p2 = q2 + k;
|
|
671
|
+
p3 = q3 + k;
|
|
672
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
673
|
+
}
|
|
474
674
|
} else {
|
|
475
675
|
for (k=0; k<n; k++) {
|
|
476
676
|
p1 = q1 + k*i1;
|
|
@@ -488,8 +688,8 @@ ca_bincmp_eq_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
488
688
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
489
689
|
double tol)
|
|
490
690
|
{
|
|
491
|
-
|
|
492
|
-
|
|
691
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
692
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
493
693
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
494
694
|
boolean8_t *p3 = q3;
|
|
495
695
|
ca_size_t k;
|
|
@@ -506,6 +706,24 @@ ca_bincmp_eq_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
506
706
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
507
707
|
}
|
|
508
708
|
}
|
|
709
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
710
|
+
/* scalar on the right: read it once, so the boolean store
|
|
711
|
+
cannot be taken to change it and the loop vectorizes */
|
|
712
|
+
ca_u_uint64_t sv = *q2;
|
|
713
|
+
p2 = &sv;
|
|
714
|
+
for (k=0; k<n; k++) {
|
|
715
|
+
p1 = q1 + k;
|
|
716
|
+
p3 = q3 + k;
|
|
717
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
718
|
+
}
|
|
719
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
720
|
+
ca_u_uint64_t sv = *q1;
|
|
721
|
+
p1 = &sv;
|
|
722
|
+
for (k=0; k<n; k++) {
|
|
723
|
+
p2 = q2 + k;
|
|
724
|
+
p3 = q3 + k;
|
|
725
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
726
|
+
}
|
|
509
727
|
} else {
|
|
510
728
|
for (k=0; k<n; k++) {
|
|
511
729
|
p1 = q1 + k*i1;
|
|
@@ -523,8 +741,8 @@ ca_bincmp_eq_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
523
741
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
524
742
|
double tol)
|
|
525
743
|
{
|
|
526
|
-
|
|
527
|
-
|
|
744
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
745
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
528
746
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
529
747
|
boolean8_t *p3 = q3;
|
|
530
748
|
ca_size_t k;
|
|
@@ -541,6 +759,24 @@ ca_bincmp_eq_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
541
759
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
542
760
|
}
|
|
543
761
|
}
|
|
762
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
763
|
+
/* scalar on the right: read it once, so the boolean store
|
|
764
|
+
cannot be taken to change it and the loop vectorizes */
|
|
765
|
+
ca_u_float32_t sv = *q2;
|
|
766
|
+
p2 = &sv;
|
|
767
|
+
for (k=0; k<n; k++) {
|
|
768
|
+
p1 = q1 + k;
|
|
769
|
+
p3 = q3 + k;
|
|
770
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
771
|
+
}
|
|
772
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
773
|
+
ca_u_float32_t sv = *q1;
|
|
774
|
+
p1 = &sv;
|
|
775
|
+
for (k=0; k<n; k++) {
|
|
776
|
+
p2 = q2 + k;
|
|
777
|
+
p3 = q3 + k;
|
|
778
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
779
|
+
}
|
|
544
780
|
} else {
|
|
545
781
|
for (k=0; k<n; k++) {
|
|
546
782
|
p1 = q1 + k*i1;
|
|
@@ -558,8 +794,8 @@ ca_bincmp_eq_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
558
794
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
559
795
|
double tol)
|
|
560
796
|
{
|
|
561
|
-
|
|
562
|
-
|
|
797
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
798
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
563
799
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
564
800
|
boolean8_t *p3 = q3;
|
|
565
801
|
ca_size_t k;
|
|
@@ -576,6 +812,24 @@ ca_bincmp_eq_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
576
812
|
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
577
813
|
}
|
|
578
814
|
}
|
|
815
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
816
|
+
/* scalar on the right: read it once, so the boolean store
|
|
817
|
+
cannot be taken to change it and the loop vectorizes */
|
|
818
|
+
ca_u_float64_t sv = *q2;
|
|
819
|
+
p2 = &sv;
|
|
820
|
+
for (k=0; k<n; k++) {
|
|
821
|
+
p1 = q1 + k;
|
|
822
|
+
p3 = q3 + k;
|
|
823
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
824
|
+
}
|
|
825
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
826
|
+
ca_u_float64_t sv = *q1;
|
|
827
|
+
p1 = &sv;
|
|
828
|
+
for (k=0; k<n; k++) {
|
|
829
|
+
p2 = q2 + k;
|
|
830
|
+
p3 = q3 + k;
|
|
831
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
832
|
+
}
|
|
579
833
|
} else {
|
|
580
834
|
for (k=0; k<n; k++) {
|
|
581
835
|
p1 = q1 + k*i1;
|
|
@@ -611,6 +865,24 @@ ca_bincmp_eq_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
611
865
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 1 : 0; }
|
|
612
866
|
}
|
|
613
867
|
}
|
|
868
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
869
|
+
/* scalar on the right: read it once, so the boolean store
|
|
870
|
+
cannot be taken to change it and the loop vectorizes */
|
|
871
|
+
VALUE sv = *q2;
|
|
872
|
+
p2 = &sv;
|
|
873
|
+
for (k=0; k<n; k++) {
|
|
874
|
+
p1 = q1 + k;
|
|
875
|
+
p3 = q3 + k;
|
|
876
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 1 : 0; }
|
|
877
|
+
}
|
|
878
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
879
|
+
VALUE sv = *q1;
|
|
880
|
+
p1 = &sv;
|
|
881
|
+
for (k=0; k<n; k++) {
|
|
882
|
+
p2 = q2 + k;
|
|
883
|
+
p3 = q3 + k;
|
|
884
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 1 : 0; }
|
|
885
|
+
}
|
|
614
886
|
} else {
|
|
615
887
|
for (k=0; k<n; k++) {
|
|
616
888
|
p1 = q1 + k*i1;
|
|
@@ -628,8 +900,8 @@ ca_bincmp_eq_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
628
900
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
629
901
|
double tol)
|
|
630
902
|
{
|
|
631
|
-
|
|
632
|
-
|
|
903
|
+
ca_u_cmplx64_t *q1 = (ca_u_cmplx64_t *) ptr1, *q2 = (ca_u_cmplx64_t *) ptr2;
|
|
904
|
+
ca_u_cmplx64_t *p1 = q1, *p2 = q2;
|
|
633
905
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
634
906
|
boolean8_t *p3 = q3;
|
|
635
907
|
ca_size_t k;
|
|
@@ -646,6 +918,24 @@ ca_bincmp_eq_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
646
918
|
{ (*p3) = (*p1) == (*p2); }
|
|
647
919
|
}
|
|
648
920
|
}
|
|
921
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
922
|
+
/* scalar on the right: read it once, so the boolean store
|
|
923
|
+
cannot be taken to change it and the loop vectorizes */
|
|
924
|
+
ca_u_cmplx64_t sv = *q2;
|
|
925
|
+
p2 = &sv;
|
|
926
|
+
for (k=0; k<n; k++) {
|
|
927
|
+
p1 = q1 + k;
|
|
928
|
+
p3 = q3 + k;
|
|
929
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
930
|
+
}
|
|
931
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
932
|
+
ca_u_cmplx64_t sv = *q1;
|
|
933
|
+
p1 = &sv;
|
|
934
|
+
for (k=0; k<n; k++) {
|
|
935
|
+
p2 = q2 + k;
|
|
936
|
+
p3 = q3 + k;
|
|
937
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
938
|
+
}
|
|
649
939
|
} else {
|
|
650
940
|
for (k=0; k<n; k++) {
|
|
651
941
|
p1 = q1 + k*i1;
|
|
@@ -663,8 +953,8 @@ ca_bincmp_eq_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
663
953
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
664
954
|
double tol)
|
|
665
955
|
{
|
|
666
|
-
|
|
667
|
-
|
|
956
|
+
ca_u_cmplx128_t *q1 = (ca_u_cmplx128_t *) ptr1, *q2 = (ca_u_cmplx128_t *) ptr2;
|
|
957
|
+
ca_u_cmplx128_t *p1 = q1, *p2 = q2;
|
|
668
958
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
669
959
|
boolean8_t *p3 = q3;
|
|
670
960
|
ca_size_t k;
|
|
@@ -681,6 +971,24 @@ ca_bincmp_eq_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
681
971
|
{ (*p3) = (*p1) == (*p2); }
|
|
682
972
|
}
|
|
683
973
|
}
|
|
974
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
975
|
+
/* scalar on the right: read it once, so the boolean store
|
|
976
|
+
cannot be taken to change it and the loop vectorizes */
|
|
977
|
+
ca_u_cmplx128_t sv = *q2;
|
|
978
|
+
p2 = &sv;
|
|
979
|
+
for (k=0; k<n; k++) {
|
|
980
|
+
p1 = q1 + k;
|
|
981
|
+
p3 = q3 + k;
|
|
982
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
983
|
+
}
|
|
984
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
985
|
+
ca_u_cmplx128_t sv = *q1;
|
|
986
|
+
p1 = &sv;
|
|
987
|
+
for (k=0; k<n; k++) {
|
|
988
|
+
p2 = q2 + k;
|
|
989
|
+
p3 = q3 + k;
|
|
990
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
991
|
+
}
|
|
684
992
|
} else {
|
|
685
993
|
for (k=0; k<n; k++) {
|
|
686
994
|
p1 = q1 + k*i1;
|
|
@@ -782,6 +1090,24 @@ ca_bincmp_ne_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
782
1090
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
783
1091
|
}
|
|
784
1092
|
}
|
|
1093
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1094
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1095
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1096
|
+
boolean8_t sv = *q2;
|
|
1097
|
+
p2 = &sv;
|
|
1098
|
+
for (k=0; k<n; k++) {
|
|
1099
|
+
p1 = q1 + k;
|
|
1100
|
+
p3 = q3 + k;
|
|
1101
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1102
|
+
}
|
|
1103
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1104
|
+
boolean8_t sv = *q1;
|
|
1105
|
+
p1 = &sv;
|
|
1106
|
+
for (k=0; k<n; k++) {
|
|
1107
|
+
p2 = q2 + k;
|
|
1108
|
+
p3 = q3 + k;
|
|
1109
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1110
|
+
}
|
|
785
1111
|
} else {
|
|
786
1112
|
for (k=0; k<n; k++) {
|
|
787
1113
|
p1 = q1 + k*i1;
|
|
@@ -817,6 +1143,24 @@ ca_bincmp_ne_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
817
1143
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
818
1144
|
}
|
|
819
1145
|
}
|
|
1146
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1147
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1148
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1149
|
+
int8_t sv = *q2;
|
|
1150
|
+
p2 = &sv;
|
|
1151
|
+
for (k=0; k<n; k++) {
|
|
1152
|
+
p1 = q1 + k;
|
|
1153
|
+
p3 = q3 + k;
|
|
1154
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1155
|
+
}
|
|
1156
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1157
|
+
int8_t sv = *q1;
|
|
1158
|
+
p1 = &sv;
|
|
1159
|
+
for (k=0; k<n; k++) {
|
|
1160
|
+
p2 = q2 + k;
|
|
1161
|
+
p3 = q3 + k;
|
|
1162
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1163
|
+
}
|
|
820
1164
|
} else {
|
|
821
1165
|
for (k=0; k<n; k++) {
|
|
822
1166
|
p1 = q1 + k*i1;
|
|
@@ -852,6 +1196,24 @@ ca_bincmp_ne_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
852
1196
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
853
1197
|
}
|
|
854
1198
|
}
|
|
1199
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1200
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1201
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1202
|
+
uint8_t sv = *q2;
|
|
1203
|
+
p2 = &sv;
|
|
1204
|
+
for (k=0; k<n; k++) {
|
|
1205
|
+
p1 = q1 + k;
|
|
1206
|
+
p3 = q3 + k;
|
|
1207
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1208
|
+
}
|
|
1209
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1210
|
+
uint8_t sv = *q1;
|
|
1211
|
+
p1 = &sv;
|
|
1212
|
+
for (k=0; k<n; k++) {
|
|
1213
|
+
p2 = q2 + k;
|
|
1214
|
+
p3 = q3 + k;
|
|
1215
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1216
|
+
}
|
|
855
1217
|
} else {
|
|
856
1218
|
for (k=0; k<n; k++) {
|
|
857
1219
|
p1 = q1 + k*i1;
|
|
@@ -869,8 +1231,8 @@ ca_bincmp_ne_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
869
1231
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
870
1232
|
double tol)
|
|
871
1233
|
{
|
|
872
|
-
|
|
873
|
-
|
|
1234
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
1235
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
874
1236
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
875
1237
|
boolean8_t *p3 = q3;
|
|
876
1238
|
ca_size_t k;
|
|
@@ -887,6 +1249,24 @@ ca_bincmp_ne_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
887
1249
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
888
1250
|
}
|
|
889
1251
|
}
|
|
1252
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1253
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1254
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1255
|
+
ca_u_int16_t sv = *q2;
|
|
1256
|
+
p2 = &sv;
|
|
1257
|
+
for (k=0; k<n; k++) {
|
|
1258
|
+
p1 = q1 + k;
|
|
1259
|
+
p3 = q3 + k;
|
|
1260
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1261
|
+
}
|
|
1262
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1263
|
+
ca_u_int16_t sv = *q1;
|
|
1264
|
+
p1 = &sv;
|
|
1265
|
+
for (k=0; k<n; k++) {
|
|
1266
|
+
p2 = q2 + k;
|
|
1267
|
+
p3 = q3 + k;
|
|
1268
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1269
|
+
}
|
|
890
1270
|
} else {
|
|
891
1271
|
for (k=0; k<n; k++) {
|
|
892
1272
|
p1 = q1 + k*i1;
|
|
@@ -904,8 +1284,8 @@ ca_bincmp_ne_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
904
1284
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
905
1285
|
double tol)
|
|
906
1286
|
{
|
|
907
|
-
|
|
908
|
-
|
|
1287
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
1288
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
909
1289
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
910
1290
|
boolean8_t *p3 = q3;
|
|
911
1291
|
ca_size_t k;
|
|
@@ -922,6 +1302,24 @@ ca_bincmp_ne_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
922
1302
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
923
1303
|
}
|
|
924
1304
|
}
|
|
1305
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1306
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1307
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1308
|
+
ca_u_uint16_t sv = *q2;
|
|
1309
|
+
p2 = &sv;
|
|
1310
|
+
for (k=0; k<n; k++) {
|
|
1311
|
+
p1 = q1 + k;
|
|
1312
|
+
p3 = q3 + k;
|
|
1313
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1314
|
+
}
|
|
1315
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1316
|
+
ca_u_uint16_t sv = *q1;
|
|
1317
|
+
p1 = &sv;
|
|
1318
|
+
for (k=0; k<n; k++) {
|
|
1319
|
+
p2 = q2 + k;
|
|
1320
|
+
p3 = q3 + k;
|
|
1321
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1322
|
+
}
|
|
925
1323
|
} else {
|
|
926
1324
|
for (k=0; k<n; k++) {
|
|
927
1325
|
p1 = q1 + k*i1;
|
|
@@ -939,8 +1337,8 @@ ca_bincmp_ne_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
939
1337
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
940
1338
|
double tol)
|
|
941
1339
|
{
|
|
942
|
-
|
|
943
|
-
|
|
1340
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
1341
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
944
1342
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
945
1343
|
boolean8_t *p3 = q3;
|
|
946
1344
|
ca_size_t k;
|
|
@@ -957,6 +1355,24 @@ ca_bincmp_ne_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
957
1355
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
958
1356
|
}
|
|
959
1357
|
}
|
|
1358
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1359
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1360
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1361
|
+
ca_u_int32_t sv = *q2;
|
|
1362
|
+
p2 = &sv;
|
|
1363
|
+
for (k=0; k<n; k++) {
|
|
1364
|
+
p1 = q1 + k;
|
|
1365
|
+
p3 = q3 + k;
|
|
1366
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1367
|
+
}
|
|
1368
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1369
|
+
ca_u_int32_t sv = *q1;
|
|
1370
|
+
p1 = &sv;
|
|
1371
|
+
for (k=0; k<n; k++) {
|
|
1372
|
+
p2 = q2 + k;
|
|
1373
|
+
p3 = q3 + k;
|
|
1374
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1375
|
+
}
|
|
960
1376
|
} else {
|
|
961
1377
|
for (k=0; k<n; k++) {
|
|
962
1378
|
p1 = q1 + k*i1;
|
|
@@ -974,8 +1390,8 @@ ca_bincmp_ne_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
974
1390
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
975
1391
|
double tol)
|
|
976
1392
|
{
|
|
977
|
-
|
|
978
|
-
|
|
1393
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
1394
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
979
1395
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
980
1396
|
boolean8_t *p3 = q3;
|
|
981
1397
|
ca_size_t k;
|
|
@@ -992,6 +1408,24 @@ ca_bincmp_ne_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
992
1408
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
993
1409
|
}
|
|
994
1410
|
}
|
|
1411
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1412
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1413
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1414
|
+
ca_u_uint32_t sv = *q2;
|
|
1415
|
+
p2 = &sv;
|
|
1416
|
+
for (k=0; k<n; k++) {
|
|
1417
|
+
p1 = q1 + k;
|
|
1418
|
+
p3 = q3 + k;
|
|
1419
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1420
|
+
}
|
|
1421
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1422
|
+
ca_u_uint32_t sv = *q1;
|
|
1423
|
+
p1 = &sv;
|
|
1424
|
+
for (k=0; k<n; k++) {
|
|
1425
|
+
p2 = q2 + k;
|
|
1426
|
+
p3 = q3 + k;
|
|
1427
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1428
|
+
}
|
|
995
1429
|
} else {
|
|
996
1430
|
for (k=0; k<n; k++) {
|
|
997
1431
|
p1 = q1 + k*i1;
|
|
@@ -1009,8 +1443,8 @@ ca_bincmp_ne_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
1009
1443
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1010
1444
|
double tol)
|
|
1011
1445
|
{
|
|
1012
|
-
|
|
1013
|
-
|
|
1446
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
1447
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
1014
1448
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1015
1449
|
boolean8_t *p3 = q3;
|
|
1016
1450
|
ca_size_t k;
|
|
@@ -1027,6 +1461,24 @@ ca_bincmp_ne_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
1027
1461
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1028
1462
|
}
|
|
1029
1463
|
}
|
|
1464
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1465
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1466
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1467
|
+
ca_u_int64_t sv = *q2;
|
|
1468
|
+
p2 = &sv;
|
|
1469
|
+
for (k=0; k<n; k++) {
|
|
1470
|
+
p1 = q1 + k;
|
|
1471
|
+
p3 = q3 + k;
|
|
1472
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1473
|
+
}
|
|
1474
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1475
|
+
ca_u_int64_t sv = *q1;
|
|
1476
|
+
p1 = &sv;
|
|
1477
|
+
for (k=0; k<n; k++) {
|
|
1478
|
+
p2 = q2 + k;
|
|
1479
|
+
p3 = q3 + k;
|
|
1480
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1481
|
+
}
|
|
1030
1482
|
} else {
|
|
1031
1483
|
for (k=0; k<n; k++) {
|
|
1032
1484
|
p1 = q1 + k*i1;
|
|
@@ -1044,8 +1496,8 @@ ca_bincmp_ne_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
1044
1496
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1045
1497
|
double tol)
|
|
1046
1498
|
{
|
|
1047
|
-
|
|
1048
|
-
|
|
1499
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
1500
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
1049
1501
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1050
1502
|
boolean8_t *p3 = q3;
|
|
1051
1503
|
ca_size_t k;
|
|
@@ -1062,6 +1514,24 @@ ca_bincmp_ne_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
1062
1514
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1063
1515
|
}
|
|
1064
1516
|
}
|
|
1517
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1518
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1519
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1520
|
+
ca_u_uint64_t sv = *q2;
|
|
1521
|
+
p2 = &sv;
|
|
1522
|
+
for (k=0; k<n; k++) {
|
|
1523
|
+
p1 = q1 + k;
|
|
1524
|
+
p3 = q3 + k;
|
|
1525
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1526
|
+
}
|
|
1527
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1528
|
+
ca_u_uint64_t sv = *q1;
|
|
1529
|
+
p1 = &sv;
|
|
1530
|
+
for (k=0; k<n; k++) {
|
|
1531
|
+
p2 = q2 + k;
|
|
1532
|
+
p3 = q3 + k;
|
|
1533
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1534
|
+
}
|
|
1065
1535
|
} else {
|
|
1066
1536
|
for (k=0; k<n; k++) {
|
|
1067
1537
|
p1 = q1 + k*i1;
|
|
@@ -1079,8 +1549,8 @@ ca_bincmp_ne_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1079
1549
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1080
1550
|
double tol)
|
|
1081
1551
|
{
|
|
1082
|
-
|
|
1083
|
-
|
|
1552
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
1553
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
1084
1554
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1085
1555
|
boolean8_t *p3 = q3;
|
|
1086
1556
|
ca_size_t k;
|
|
@@ -1097,6 +1567,24 @@ ca_bincmp_ne_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1097
1567
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1098
1568
|
}
|
|
1099
1569
|
}
|
|
1570
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1571
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1572
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1573
|
+
ca_u_float32_t sv = *q2;
|
|
1574
|
+
p2 = &sv;
|
|
1575
|
+
for (k=0; k<n; k++) {
|
|
1576
|
+
p1 = q1 + k;
|
|
1577
|
+
p3 = q3 + k;
|
|
1578
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1579
|
+
}
|
|
1580
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1581
|
+
ca_u_float32_t sv = *q1;
|
|
1582
|
+
p1 = &sv;
|
|
1583
|
+
for (k=0; k<n; k++) {
|
|
1584
|
+
p2 = q2 + k;
|
|
1585
|
+
p3 = q3 + k;
|
|
1586
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1587
|
+
}
|
|
1100
1588
|
} else {
|
|
1101
1589
|
for (k=0; k<n; k++) {
|
|
1102
1590
|
p1 = q1 + k*i1;
|
|
@@ -1114,8 +1602,8 @@ ca_bincmp_ne_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1114
1602
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1115
1603
|
double tol)
|
|
1116
1604
|
{
|
|
1117
|
-
|
|
1118
|
-
|
|
1605
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
1606
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
1119
1607
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1120
1608
|
boolean8_t *p3 = q3;
|
|
1121
1609
|
ca_size_t k;
|
|
@@ -1132,6 +1620,24 @@ ca_bincmp_ne_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1132
1620
|
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1133
1621
|
}
|
|
1134
1622
|
}
|
|
1623
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1624
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1625
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1626
|
+
ca_u_float64_t sv = *q2;
|
|
1627
|
+
p2 = &sv;
|
|
1628
|
+
for (k=0; k<n; k++) {
|
|
1629
|
+
p1 = q1 + k;
|
|
1630
|
+
p3 = q3 + k;
|
|
1631
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1632
|
+
}
|
|
1633
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1634
|
+
ca_u_float64_t sv = *q1;
|
|
1635
|
+
p1 = &sv;
|
|
1636
|
+
for (k=0; k<n; k++) {
|
|
1637
|
+
p2 = q2 + k;
|
|
1638
|
+
p3 = q3 + k;
|
|
1639
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1640
|
+
}
|
|
1135
1641
|
} else {
|
|
1136
1642
|
for (k=0; k<n; k++) {
|
|
1137
1643
|
p1 = q1 + k*i1;
|
|
@@ -1167,6 +1673,24 @@ ca_bincmp_ne_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
1167
1673
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 0 : 1; }
|
|
1168
1674
|
}
|
|
1169
1675
|
}
|
|
1676
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1677
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1678
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1679
|
+
VALUE sv = *q2;
|
|
1680
|
+
p2 = &sv;
|
|
1681
|
+
for (k=0; k<n; k++) {
|
|
1682
|
+
p1 = q1 + k;
|
|
1683
|
+
p3 = q3 + k;
|
|
1684
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 0 : 1; }
|
|
1685
|
+
}
|
|
1686
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1687
|
+
VALUE sv = *q1;
|
|
1688
|
+
p1 = &sv;
|
|
1689
|
+
for (k=0; k<n; k++) {
|
|
1690
|
+
p2 = q2 + k;
|
|
1691
|
+
p3 = q3 + k;
|
|
1692
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 0 : 1; }
|
|
1693
|
+
}
|
|
1170
1694
|
} else {
|
|
1171
1695
|
for (k=0; k<n; k++) {
|
|
1172
1696
|
p1 = q1 + k*i1;
|
|
@@ -1184,8 +1708,8 @@ ca_bincmp_ne_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
1184
1708
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1185
1709
|
double tol)
|
|
1186
1710
|
{
|
|
1187
|
-
|
|
1188
|
-
|
|
1711
|
+
ca_u_cmplx64_t *q1 = (ca_u_cmplx64_t *) ptr1, *q2 = (ca_u_cmplx64_t *) ptr2;
|
|
1712
|
+
ca_u_cmplx64_t *p1 = q1, *p2 = q2;
|
|
1189
1713
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1190
1714
|
boolean8_t *p3 = q3;
|
|
1191
1715
|
ca_size_t k;
|
|
@@ -1202,6 +1726,24 @@ ca_bincmp_ne_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
1202
1726
|
{ (*p3) = (*p1) != (*p2); }
|
|
1203
1727
|
}
|
|
1204
1728
|
}
|
|
1729
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1730
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1731
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1732
|
+
ca_u_cmplx64_t sv = *q2;
|
|
1733
|
+
p2 = &sv;
|
|
1734
|
+
for (k=0; k<n; k++) {
|
|
1735
|
+
p1 = q1 + k;
|
|
1736
|
+
p3 = q3 + k;
|
|
1737
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1738
|
+
}
|
|
1739
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1740
|
+
ca_u_cmplx64_t sv = *q1;
|
|
1741
|
+
p1 = &sv;
|
|
1742
|
+
for (k=0; k<n; k++) {
|
|
1743
|
+
p2 = q2 + k;
|
|
1744
|
+
p3 = q3 + k;
|
|
1745
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1746
|
+
}
|
|
1205
1747
|
} else {
|
|
1206
1748
|
for (k=0; k<n; k++) {
|
|
1207
1749
|
p1 = q1 + k*i1;
|
|
@@ -1219,8 +1761,8 @@ ca_bincmp_ne_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
1219
1761
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1220
1762
|
double tol)
|
|
1221
1763
|
{
|
|
1222
|
-
|
|
1223
|
-
|
|
1764
|
+
ca_u_cmplx128_t *q1 = (ca_u_cmplx128_t *) ptr1, *q2 = (ca_u_cmplx128_t *) ptr2;
|
|
1765
|
+
ca_u_cmplx128_t *p1 = q1, *p2 = q2;
|
|
1224
1766
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1225
1767
|
boolean8_t *p3 = q3;
|
|
1226
1768
|
ca_size_t k;
|
|
@@ -1237,6 +1779,24 @@ ca_bincmp_ne_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
1237
1779
|
{ (*p3) = (*p1) != (*p2); }
|
|
1238
1780
|
}
|
|
1239
1781
|
}
|
|
1782
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1783
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1784
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1785
|
+
ca_u_cmplx128_t sv = *q2;
|
|
1786
|
+
p2 = &sv;
|
|
1787
|
+
for (k=0; k<n; k++) {
|
|
1788
|
+
p1 = q1 + k;
|
|
1789
|
+
p3 = q3 + k;
|
|
1790
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1791
|
+
}
|
|
1792
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1793
|
+
ca_u_cmplx128_t sv = *q1;
|
|
1794
|
+
p1 = &sv;
|
|
1795
|
+
for (k=0; k<n; k++) {
|
|
1796
|
+
p2 = q2 + k;
|
|
1797
|
+
p3 = q3 + k;
|
|
1798
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1799
|
+
}
|
|
1240
1800
|
} else {
|
|
1241
1801
|
for (k=0; k<n; k++) {
|
|
1242
1802
|
p1 = q1 + k*i1;
|
|
@@ -1344,6 +1904,24 @@ ca_bincmp_gt_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
1344
1904
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1345
1905
|
}
|
|
1346
1906
|
}
|
|
1907
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1908
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1909
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1910
|
+
boolean8_t sv = *q2;
|
|
1911
|
+
p2 = &sv;
|
|
1912
|
+
for (k=0; k<n; k++) {
|
|
1913
|
+
p1 = q1 + k;
|
|
1914
|
+
p3 = q3 + k;
|
|
1915
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1916
|
+
}
|
|
1917
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1918
|
+
boolean8_t sv = *q1;
|
|
1919
|
+
p1 = &sv;
|
|
1920
|
+
for (k=0; k<n; k++) {
|
|
1921
|
+
p2 = q2 + k;
|
|
1922
|
+
p3 = q3 + k;
|
|
1923
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1924
|
+
}
|
|
1347
1925
|
} else {
|
|
1348
1926
|
for (k=0; k<n; k++) {
|
|
1349
1927
|
p1 = q1 + k*i1;
|
|
@@ -1379,6 +1957,24 @@ ca_bincmp_gt_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
1379
1957
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1380
1958
|
}
|
|
1381
1959
|
}
|
|
1960
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
1961
|
+
/* scalar on the right: read it once, so the boolean store
|
|
1962
|
+
cannot be taken to change it and the loop vectorizes */
|
|
1963
|
+
int8_t sv = *q2;
|
|
1964
|
+
p2 = &sv;
|
|
1965
|
+
for (k=0; k<n; k++) {
|
|
1966
|
+
p1 = q1 + k;
|
|
1967
|
+
p3 = q3 + k;
|
|
1968
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1969
|
+
}
|
|
1970
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
1971
|
+
int8_t sv = *q1;
|
|
1972
|
+
p1 = &sv;
|
|
1973
|
+
for (k=0; k<n; k++) {
|
|
1974
|
+
p2 = q2 + k;
|
|
1975
|
+
p3 = q3 + k;
|
|
1976
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1977
|
+
}
|
|
1382
1978
|
} else {
|
|
1383
1979
|
for (k=0; k<n; k++) {
|
|
1384
1980
|
p1 = q1 + k*i1;
|
|
@@ -1414,6 +2010,24 @@ ca_bincmp_gt_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
1414
2010
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1415
2011
|
}
|
|
1416
2012
|
}
|
|
2013
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2014
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2015
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2016
|
+
uint8_t sv = *q2;
|
|
2017
|
+
p2 = &sv;
|
|
2018
|
+
for (k=0; k<n; k++) {
|
|
2019
|
+
p1 = q1 + k;
|
|
2020
|
+
p3 = q3 + k;
|
|
2021
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2022
|
+
}
|
|
2023
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2024
|
+
uint8_t sv = *q1;
|
|
2025
|
+
p1 = &sv;
|
|
2026
|
+
for (k=0; k<n; k++) {
|
|
2027
|
+
p2 = q2 + k;
|
|
2028
|
+
p3 = q3 + k;
|
|
2029
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2030
|
+
}
|
|
1417
2031
|
} else {
|
|
1418
2032
|
for (k=0; k<n; k++) {
|
|
1419
2033
|
p1 = q1 + k*i1;
|
|
@@ -1431,8 +2045,8 @@ ca_bincmp_gt_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
1431
2045
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1432
2046
|
double tol)
|
|
1433
2047
|
{
|
|
1434
|
-
|
|
1435
|
-
|
|
2048
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
2049
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
1436
2050
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1437
2051
|
boolean8_t *p3 = q3;
|
|
1438
2052
|
ca_size_t k;
|
|
@@ -1449,6 +2063,24 @@ ca_bincmp_gt_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
1449
2063
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1450
2064
|
}
|
|
1451
2065
|
}
|
|
2066
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2067
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2068
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2069
|
+
ca_u_int16_t sv = *q2;
|
|
2070
|
+
p2 = &sv;
|
|
2071
|
+
for (k=0; k<n; k++) {
|
|
2072
|
+
p1 = q1 + k;
|
|
2073
|
+
p3 = q3 + k;
|
|
2074
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2075
|
+
}
|
|
2076
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2077
|
+
ca_u_int16_t sv = *q1;
|
|
2078
|
+
p1 = &sv;
|
|
2079
|
+
for (k=0; k<n; k++) {
|
|
2080
|
+
p2 = q2 + k;
|
|
2081
|
+
p3 = q3 + k;
|
|
2082
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2083
|
+
}
|
|
1452
2084
|
} else {
|
|
1453
2085
|
for (k=0; k<n; k++) {
|
|
1454
2086
|
p1 = q1 + k*i1;
|
|
@@ -1466,8 +2098,8 @@ ca_bincmp_gt_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
1466
2098
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1467
2099
|
double tol)
|
|
1468
2100
|
{
|
|
1469
|
-
|
|
1470
|
-
|
|
2101
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
2102
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
1471
2103
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1472
2104
|
boolean8_t *p3 = q3;
|
|
1473
2105
|
ca_size_t k;
|
|
@@ -1484,6 +2116,24 @@ ca_bincmp_gt_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
1484
2116
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1485
2117
|
}
|
|
1486
2118
|
}
|
|
2119
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2120
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2121
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2122
|
+
ca_u_uint16_t sv = *q2;
|
|
2123
|
+
p2 = &sv;
|
|
2124
|
+
for (k=0; k<n; k++) {
|
|
2125
|
+
p1 = q1 + k;
|
|
2126
|
+
p3 = q3 + k;
|
|
2127
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2128
|
+
}
|
|
2129
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2130
|
+
ca_u_uint16_t sv = *q1;
|
|
2131
|
+
p1 = &sv;
|
|
2132
|
+
for (k=0; k<n; k++) {
|
|
2133
|
+
p2 = q2 + k;
|
|
2134
|
+
p3 = q3 + k;
|
|
2135
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2136
|
+
}
|
|
1487
2137
|
} else {
|
|
1488
2138
|
for (k=0; k<n; k++) {
|
|
1489
2139
|
p1 = q1 + k*i1;
|
|
@@ -1501,8 +2151,8 @@ ca_bincmp_gt_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
1501
2151
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1502
2152
|
double tol)
|
|
1503
2153
|
{
|
|
1504
|
-
|
|
1505
|
-
|
|
2154
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
2155
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
1506
2156
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1507
2157
|
boolean8_t *p3 = q3;
|
|
1508
2158
|
ca_size_t k;
|
|
@@ -1519,6 +2169,24 @@ ca_bincmp_gt_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
1519
2169
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1520
2170
|
}
|
|
1521
2171
|
}
|
|
2172
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2173
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2174
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2175
|
+
ca_u_int32_t sv = *q2;
|
|
2176
|
+
p2 = &sv;
|
|
2177
|
+
for (k=0; k<n; k++) {
|
|
2178
|
+
p1 = q1 + k;
|
|
2179
|
+
p3 = q3 + k;
|
|
2180
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2181
|
+
}
|
|
2182
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2183
|
+
ca_u_int32_t sv = *q1;
|
|
2184
|
+
p1 = &sv;
|
|
2185
|
+
for (k=0; k<n; k++) {
|
|
2186
|
+
p2 = q2 + k;
|
|
2187
|
+
p3 = q3 + k;
|
|
2188
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2189
|
+
}
|
|
1522
2190
|
} else {
|
|
1523
2191
|
for (k=0; k<n; k++) {
|
|
1524
2192
|
p1 = q1 + k*i1;
|
|
@@ -1536,8 +2204,8 @@ ca_bincmp_gt_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
1536
2204
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1537
2205
|
double tol)
|
|
1538
2206
|
{
|
|
1539
|
-
|
|
1540
|
-
|
|
2207
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
2208
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
1541
2209
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1542
2210
|
boolean8_t *p3 = q3;
|
|
1543
2211
|
ca_size_t k;
|
|
@@ -1554,6 +2222,24 @@ ca_bincmp_gt_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
1554
2222
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1555
2223
|
}
|
|
1556
2224
|
}
|
|
2225
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2226
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2227
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2228
|
+
ca_u_uint32_t sv = *q2;
|
|
2229
|
+
p2 = &sv;
|
|
2230
|
+
for (k=0; k<n; k++) {
|
|
2231
|
+
p1 = q1 + k;
|
|
2232
|
+
p3 = q3 + k;
|
|
2233
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2234
|
+
}
|
|
2235
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2236
|
+
ca_u_uint32_t sv = *q1;
|
|
2237
|
+
p1 = &sv;
|
|
2238
|
+
for (k=0; k<n; k++) {
|
|
2239
|
+
p2 = q2 + k;
|
|
2240
|
+
p3 = q3 + k;
|
|
2241
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2242
|
+
}
|
|
1557
2243
|
} else {
|
|
1558
2244
|
for (k=0; k<n; k++) {
|
|
1559
2245
|
p1 = q1 + k*i1;
|
|
@@ -1571,8 +2257,8 @@ ca_bincmp_gt_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
1571
2257
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1572
2258
|
double tol)
|
|
1573
2259
|
{
|
|
1574
|
-
|
|
1575
|
-
|
|
2260
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
2261
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
1576
2262
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1577
2263
|
boolean8_t *p3 = q3;
|
|
1578
2264
|
ca_size_t k;
|
|
@@ -1589,6 +2275,24 @@ ca_bincmp_gt_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
1589
2275
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1590
2276
|
}
|
|
1591
2277
|
}
|
|
2278
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2279
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2280
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2281
|
+
ca_u_int64_t sv = *q2;
|
|
2282
|
+
p2 = &sv;
|
|
2283
|
+
for (k=0; k<n; k++) {
|
|
2284
|
+
p1 = q1 + k;
|
|
2285
|
+
p3 = q3 + k;
|
|
2286
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2287
|
+
}
|
|
2288
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2289
|
+
ca_u_int64_t sv = *q1;
|
|
2290
|
+
p1 = &sv;
|
|
2291
|
+
for (k=0; k<n; k++) {
|
|
2292
|
+
p2 = q2 + k;
|
|
2293
|
+
p3 = q3 + k;
|
|
2294
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2295
|
+
}
|
|
1592
2296
|
} else {
|
|
1593
2297
|
for (k=0; k<n; k++) {
|
|
1594
2298
|
p1 = q1 + k*i1;
|
|
@@ -1606,8 +2310,8 @@ ca_bincmp_gt_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
1606
2310
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1607
2311
|
double tol)
|
|
1608
2312
|
{
|
|
1609
|
-
|
|
1610
|
-
|
|
2313
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
2314
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
1611
2315
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1612
2316
|
boolean8_t *p3 = q3;
|
|
1613
2317
|
ca_size_t k;
|
|
@@ -1624,6 +2328,24 @@ ca_bincmp_gt_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
1624
2328
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1625
2329
|
}
|
|
1626
2330
|
}
|
|
2331
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2332
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2333
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2334
|
+
ca_u_uint64_t sv = *q2;
|
|
2335
|
+
p2 = &sv;
|
|
2336
|
+
for (k=0; k<n; k++) {
|
|
2337
|
+
p1 = q1 + k;
|
|
2338
|
+
p3 = q3 + k;
|
|
2339
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2340
|
+
}
|
|
2341
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2342
|
+
ca_u_uint64_t sv = *q1;
|
|
2343
|
+
p1 = &sv;
|
|
2344
|
+
for (k=0; k<n; k++) {
|
|
2345
|
+
p2 = q2 + k;
|
|
2346
|
+
p3 = q3 + k;
|
|
2347
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2348
|
+
}
|
|
1627
2349
|
} else {
|
|
1628
2350
|
for (k=0; k<n; k++) {
|
|
1629
2351
|
p1 = q1 + k*i1;
|
|
@@ -1641,8 +2363,8 @@ ca_bincmp_gt_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1641
2363
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1642
2364
|
double tol)
|
|
1643
2365
|
{
|
|
1644
|
-
|
|
1645
|
-
|
|
2366
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
2367
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
1646
2368
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1647
2369
|
boolean8_t *p3 = q3;
|
|
1648
2370
|
ca_size_t k;
|
|
@@ -1659,6 +2381,24 @@ ca_bincmp_gt_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1659
2381
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1660
2382
|
}
|
|
1661
2383
|
}
|
|
2384
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2385
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2386
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2387
|
+
ca_u_float32_t sv = *q2;
|
|
2388
|
+
p2 = &sv;
|
|
2389
|
+
for (k=0; k<n; k++) {
|
|
2390
|
+
p1 = q1 + k;
|
|
2391
|
+
p3 = q3 + k;
|
|
2392
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2393
|
+
}
|
|
2394
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2395
|
+
ca_u_float32_t sv = *q1;
|
|
2396
|
+
p1 = &sv;
|
|
2397
|
+
for (k=0; k<n; k++) {
|
|
2398
|
+
p2 = q2 + k;
|
|
2399
|
+
p3 = q3 + k;
|
|
2400
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2401
|
+
}
|
|
1662
2402
|
} else {
|
|
1663
2403
|
for (k=0; k<n; k++) {
|
|
1664
2404
|
p1 = q1 + k*i1;
|
|
@@ -1676,8 +2416,8 @@ ca_bincmp_gt_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1676
2416
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1677
2417
|
double tol)
|
|
1678
2418
|
{
|
|
1679
|
-
|
|
1680
|
-
|
|
2419
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
2420
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
1681
2421
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1682
2422
|
boolean8_t *p3 = q3;
|
|
1683
2423
|
ca_size_t k;
|
|
@@ -1694,6 +2434,24 @@ ca_bincmp_gt_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1694
2434
|
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1695
2435
|
}
|
|
1696
2436
|
}
|
|
2437
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2438
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2439
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2440
|
+
ca_u_float64_t sv = *q2;
|
|
2441
|
+
p2 = &sv;
|
|
2442
|
+
for (k=0; k<n; k++) {
|
|
2443
|
+
p1 = q1 + k;
|
|
2444
|
+
p3 = q3 + k;
|
|
2445
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2446
|
+
}
|
|
2447
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2448
|
+
ca_u_float64_t sv = *q1;
|
|
2449
|
+
p1 = &sv;
|
|
2450
|
+
for (k=0; k<n; k++) {
|
|
2451
|
+
p2 = q2 + k;
|
|
2452
|
+
p3 = q3 + k;
|
|
2453
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
2454
|
+
}
|
|
1697
2455
|
} else {
|
|
1698
2456
|
for (k=0; k<n; k++) {
|
|
1699
2457
|
p1 = q1 + k*i1;
|
|
@@ -1729,9 +2487,27 @@ ca_bincmp_gt_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
1729
2487
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">"), 1, (*p2))) ? 1 : 0; }
|
|
1730
2488
|
}
|
|
1731
2489
|
}
|
|
1732
|
-
} else {
|
|
2490
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2491
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2492
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2493
|
+
VALUE sv = *q2;
|
|
2494
|
+
p2 = &sv;
|
|
1733
2495
|
for (k=0; k<n; k++) {
|
|
1734
|
-
p1 = q1 + k
|
|
2496
|
+
p1 = q1 + k;
|
|
2497
|
+
p3 = q3 + k;
|
|
2498
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">"), 1, (*p2))) ? 1 : 0; }
|
|
2499
|
+
}
|
|
2500
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2501
|
+
VALUE sv = *q1;
|
|
2502
|
+
p1 = &sv;
|
|
2503
|
+
for (k=0; k<n; k++) {
|
|
2504
|
+
p2 = q2 + k;
|
|
2505
|
+
p3 = q3 + k;
|
|
2506
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">"), 1, (*p2))) ? 1 : 0; }
|
|
2507
|
+
}
|
|
2508
|
+
} else {
|
|
2509
|
+
for (k=0; k<n; k++) {
|
|
2510
|
+
p1 = q1 + k*i1;
|
|
1735
2511
|
p2 = q2 + k*i2;
|
|
1736
2512
|
p3 = q3 + k*i3;
|
|
1737
2513
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">"), 1, (*p2))) ? 1 : 0; }
|
|
@@ -1836,6 +2612,24 @@ ca_bincmp_lt_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
1836
2612
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1837
2613
|
}
|
|
1838
2614
|
}
|
|
2615
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2616
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2617
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2618
|
+
boolean8_t sv = *q2;
|
|
2619
|
+
p2 = &sv;
|
|
2620
|
+
for (k=0; k<n; k++) {
|
|
2621
|
+
p1 = q1 + k;
|
|
2622
|
+
p3 = q3 + k;
|
|
2623
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2624
|
+
}
|
|
2625
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2626
|
+
boolean8_t sv = *q1;
|
|
2627
|
+
p1 = &sv;
|
|
2628
|
+
for (k=0; k<n; k++) {
|
|
2629
|
+
p2 = q2 + k;
|
|
2630
|
+
p3 = q3 + k;
|
|
2631
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2632
|
+
}
|
|
1839
2633
|
} else {
|
|
1840
2634
|
for (k=0; k<n; k++) {
|
|
1841
2635
|
p1 = q1 + k*i1;
|
|
@@ -1871,6 +2665,24 @@ ca_bincmp_lt_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
1871
2665
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1872
2666
|
}
|
|
1873
2667
|
}
|
|
2668
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2669
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2670
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2671
|
+
int8_t sv = *q2;
|
|
2672
|
+
p2 = &sv;
|
|
2673
|
+
for (k=0; k<n; k++) {
|
|
2674
|
+
p1 = q1 + k;
|
|
2675
|
+
p3 = q3 + k;
|
|
2676
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2677
|
+
}
|
|
2678
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2679
|
+
int8_t sv = *q1;
|
|
2680
|
+
p1 = &sv;
|
|
2681
|
+
for (k=0; k<n; k++) {
|
|
2682
|
+
p2 = q2 + k;
|
|
2683
|
+
p3 = q3 + k;
|
|
2684
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2685
|
+
}
|
|
1874
2686
|
} else {
|
|
1875
2687
|
for (k=0; k<n; k++) {
|
|
1876
2688
|
p1 = q1 + k*i1;
|
|
@@ -1906,6 +2718,24 @@ ca_bincmp_lt_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
1906
2718
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1907
2719
|
}
|
|
1908
2720
|
}
|
|
2721
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2722
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2723
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2724
|
+
uint8_t sv = *q2;
|
|
2725
|
+
p2 = &sv;
|
|
2726
|
+
for (k=0; k<n; k++) {
|
|
2727
|
+
p1 = q1 + k;
|
|
2728
|
+
p3 = q3 + k;
|
|
2729
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2730
|
+
}
|
|
2731
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2732
|
+
uint8_t sv = *q1;
|
|
2733
|
+
p1 = &sv;
|
|
2734
|
+
for (k=0; k<n; k++) {
|
|
2735
|
+
p2 = q2 + k;
|
|
2736
|
+
p3 = q3 + k;
|
|
2737
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2738
|
+
}
|
|
1909
2739
|
} else {
|
|
1910
2740
|
for (k=0; k<n; k++) {
|
|
1911
2741
|
p1 = q1 + k*i1;
|
|
@@ -1923,8 +2753,8 @@ ca_bincmp_lt_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
1923
2753
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1924
2754
|
double tol)
|
|
1925
2755
|
{
|
|
1926
|
-
|
|
1927
|
-
|
|
2756
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
2757
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
1928
2758
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1929
2759
|
boolean8_t *p3 = q3;
|
|
1930
2760
|
ca_size_t k;
|
|
@@ -1941,6 +2771,24 @@ ca_bincmp_lt_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
1941
2771
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1942
2772
|
}
|
|
1943
2773
|
}
|
|
2774
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2775
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2776
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2777
|
+
ca_u_int16_t sv = *q2;
|
|
2778
|
+
p2 = &sv;
|
|
2779
|
+
for (k=0; k<n; k++) {
|
|
2780
|
+
p1 = q1 + k;
|
|
2781
|
+
p3 = q3 + k;
|
|
2782
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2783
|
+
}
|
|
2784
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2785
|
+
ca_u_int16_t sv = *q1;
|
|
2786
|
+
p1 = &sv;
|
|
2787
|
+
for (k=0; k<n; k++) {
|
|
2788
|
+
p2 = q2 + k;
|
|
2789
|
+
p3 = q3 + k;
|
|
2790
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2791
|
+
}
|
|
1944
2792
|
} else {
|
|
1945
2793
|
for (k=0; k<n; k++) {
|
|
1946
2794
|
p1 = q1 + k*i1;
|
|
@@ -1958,8 +2806,8 @@ ca_bincmp_lt_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
1958
2806
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1959
2807
|
double tol)
|
|
1960
2808
|
{
|
|
1961
|
-
|
|
1962
|
-
|
|
2809
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
2810
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
1963
2811
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1964
2812
|
boolean8_t *p3 = q3;
|
|
1965
2813
|
ca_size_t k;
|
|
@@ -1976,6 +2824,24 @@ ca_bincmp_lt_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
1976
2824
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1977
2825
|
}
|
|
1978
2826
|
}
|
|
2827
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2828
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2829
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2830
|
+
ca_u_uint16_t sv = *q2;
|
|
2831
|
+
p2 = &sv;
|
|
2832
|
+
for (k=0; k<n; k++) {
|
|
2833
|
+
p1 = q1 + k;
|
|
2834
|
+
p3 = q3 + k;
|
|
2835
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2836
|
+
}
|
|
2837
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2838
|
+
ca_u_uint16_t sv = *q1;
|
|
2839
|
+
p1 = &sv;
|
|
2840
|
+
for (k=0; k<n; k++) {
|
|
2841
|
+
p2 = q2 + k;
|
|
2842
|
+
p3 = q3 + k;
|
|
2843
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2844
|
+
}
|
|
1979
2845
|
} else {
|
|
1980
2846
|
for (k=0; k<n; k++) {
|
|
1981
2847
|
p1 = q1 + k*i1;
|
|
@@ -1993,8 +2859,8 @@ ca_bincmp_lt_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
1993
2859
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1994
2860
|
double tol)
|
|
1995
2861
|
{
|
|
1996
|
-
|
|
1997
|
-
|
|
2862
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
2863
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
1998
2864
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1999
2865
|
boolean8_t *p3 = q3;
|
|
2000
2866
|
ca_size_t k;
|
|
@@ -2011,6 +2877,24 @@ ca_bincmp_lt_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
2011
2877
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2012
2878
|
}
|
|
2013
2879
|
}
|
|
2880
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2881
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2882
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2883
|
+
ca_u_int32_t sv = *q2;
|
|
2884
|
+
p2 = &sv;
|
|
2885
|
+
for (k=0; k<n; k++) {
|
|
2886
|
+
p1 = q1 + k;
|
|
2887
|
+
p3 = q3 + k;
|
|
2888
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2889
|
+
}
|
|
2890
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2891
|
+
ca_u_int32_t sv = *q1;
|
|
2892
|
+
p1 = &sv;
|
|
2893
|
+
for (k=0; k<n; k++) {
|
|
2894
|
+
p2 = q2 + k;
|
|
2895
|
+
p3 = q3 + k;
|
|
2896
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2897
|
+
}
|
|
2014
2898
|
} else {
|
|
2015
2899
|
for (k=0; k<n; k++) {
|
|
2016
2900
|
p1 = q1 + k*i1;
|
|
@@ -2028,8 +2912,8 @@ ca_bincmp_lt_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
2028
2912
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2029
2913
|
double tol)
|
|
2030
2914
|
{
|
|
2031
|
-
|
|
2032
|
-
|
|
2915
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
2916
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
2033
2917
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2034
2918
|
boolean8_t *p3 = q3;
|
|
2035
2919
|
ca_size_t k;
|
|
@@ -2046,6 +2930,24 @@ ca_bincmp_lt_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
2046
2930
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2047
2931
|
}
|
|
2048
2932
|
}
|
|
2933
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2934
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2935
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2936
|
+
ca_u_uint32_t sv = *q2;
|
|
2937
|
+
p2 = &sv;
|
|
2938
|
+
for (k=0; k<n; k++) {
|
|
2939
|
+
p1 = q1 + k;
|
|
2940
|
+
p3 = q3 + k;
|
|
2941
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2942
|
+
}
|
|
2943
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2944
|
+
ca_u_uint32_t sv = *q1;
|
|
2945
|
+
p1 = &sv;
|
|
2946
|
+
for (k=0; k<n; k++) {
|
|
2947
|
+
p2 = q2 + k;
|
|
2948
|
+
p3 = q3 + k;
|
|
2949
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2950
|
+
}
|
|
2049
2951
|
} else {
|
|
2050
2952
|
for (k=0; k<n; k++) {
|
|
2051
2953
|
p1 = q1 + k*i1;
|
|
@@ -2063,8 +2965,8 @@ ca_bincmp_lt_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
2063
2965
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2064
2966
|
double tol)
|
|
2065
2967
|
{
|
|
2066
|
-
|
|
2067
|
-
|
|
2968
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
2969
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
2068
2970
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2069
2971
|
boolean8_t *p3 = q3;
|
|
2070
2972
|
ca_size_t k;
|
|
@@ -2081,6 +2983,24 @@ ca_bincmp_lt_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
2081
2983
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2082
2984
|
}
|
|
2083
2985
|
}
|
|
2986
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
2987
|
+
/* scalar on the right: read it once, so the boolean store
|
|
2988
|
+
cannot be taken to change it and the loop vectorizes */
|
|
2989
|
+
ca_u_int64_t sv = *q2;
|
|
2990
|
+
p2 = &sv;
|
|
2991
|
+
for (k=0; k<n; k++) {
|
|
2992
|
+
p1 = q1 + k;
|
|
2993
|
+
p3 = q3 + k;
|
|
2994
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2995
|
+
}
|
|
2996
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
2997
|
+
ca_u_int64_t sv = *q1;
|
|
2998
|
+
p1 = &sv;
|
|
2999
|
+
for (k=0; k<n; k++) {
|
|
3000
|
+
p2 = q2 + k;
|
|
3001
|
+
p3 = q3 + k;
|
|
3002
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
3003
|
+
}
|
|
2084
3004
|
} else {
|
|
2085
3005
|
for (k=0; k<n; k++) {
|
|
2086
3006
|
p1 = q1 + k*i1;
|
|
@@ -2098,8 +3018,8 @@ ca_bincmp_lt_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
2098
3018
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2099
3019
|
double tol)
|
|
2100
3020
|
{
|
|
2101
|
-
|
|
2102
|
-
|
|
3021
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
3022
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
2103
3023
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2104
3024
|
boolean8_t *p3 = q3;
|
|
2105
3025
|
ca_size_t k;
|
|
@@ -2116,6 +3036,24 @@ ca_bincmp_lt_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
2116
3036
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2117
3037
|
}
|
|
2118
3038
|
}
|
|
3039
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3040
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3041
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3042
|
+
ca_u_uint64_t sv = *q2;
|
|
3043
|
+
p2 = &sv;
|
|
3044
|
+
for (k=0; k<n; k++) {
|
|
3045
|
+
p1 = q1 + k;
|
|
3046
|
+
p3 = q3 + k;
|
|
3047
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
3048
|
+
}
|
|
3049
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3050
|
+
ca_u_uint64_t sv = *q1;
|
|
3051
|
+
p1 = &sv;
|
|
3052
|
+
for (k=0; k<n; k++) {
|
|
3053
|
+
p2 = q2 + k;
|
|
3054
|
+
p3 = q3 + k;
|
|
3055
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
3056
|
+
}
|
|
2119
3057
|
} else {
|
|
2120
3058
|
for (k=0; k<n; k++) {
|
|
2121
3059
|
p1 = q1 + k*i1;
|
|
@@ -2133,8 +3071,8 @@ ca_bincmp_lt_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
2133
3071
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2134
3072
|
double tol)
|
|
2135
3073
|
{
|
|
2136
|
-
|
|
2137
|
-
|
|
3074
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
3075
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
2138
3076
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2139
3077
|
boolean8_t *p3 = q3;
|
|
2140
3078
|
ca_size_t k;
|
|
@@ -2151,6 +3089,24 @@ ca_bincmp_lt_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
2151
3089
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2152
3090
|
}
|
|
2153
3091
|
}
|
|
3092
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3093
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3094
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3095
|
+
ca_u_float32_t sv = *q2;
|
|
3096
|
+
p2 = &sv;
|
|
3097
|
+
for (k=0; k<n; k++) {
|
|
3098
|
+
p1 = q1 + k;
|
|
3099
|
+
p3 = q3 + k;
|
|
3100
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
3101
|
+
}
|
|
3102
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3103
|
+
ca_u_float32_t sv = *q1;
|
|
3104
|
+
p1 = &sv;
|
|
3105
|
+
for (k=0; k<n; k++) {
|
|
3106
|
+
p2 = q2 + k;
|
|
3107
|
+
p3 = q3 + k;
|
|
3108
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
3109
|
+
}
|
|
2154
3110
|
} else {
|
|
2155
3111
|
for (k=0; k<n; k++) {
|
|
2156
3112
|
p1 = q1 + k*i1;
|
|
@@ -2168,8 +3124,8 @@ ca_bincmp_lt_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
2168
3124
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2169
3125
|
double tol)
|
|
2170
3126
|
{
|
|
2171
|
-
|
|
2172
|
-
|
|
3127
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
3128
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
2173
3129
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2174
3130
|
boolean8_t *p3 = q3;
|
|
2175
3131
|
ca_size_t k;
|
|
@@ -2186,6 +3142,24 @@ ca_bincmp_lt_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
2186
3142
|
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2187
3143
|
}
|
|
2188
3144
|
}
|
|
3145
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3146
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3147
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3148
|
+
ca_u_float64_t sv = *q2;
|
|
3149
|
+
p2 = &sv;
|
|
3150
|
+
for (k=0; k<n; k++) {
|
|
3151
|
+
p1 = q1 + k;
|
|
3152
|
+
p3 = q3 + k;
|
|
3153
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
3154
|
+
}
|
|
3155
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3156
|
+
ca_u_float64_t sv = *q1;
|
|
3157
|
+
p1 = &sv;
|
|
3158
|
+
for (k=0; k<n; k++) {
|
|
3159
|
+
p2 = q2 + k;
|
|
3160
|
+
p3 = q3 + k;
|
|
3161
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
3162
|
+
}
|
|
2189
3163
|
} else {
|
|
2190
3164
|
for (k=0; k<n; k++) {
|
|
2191
3165
|
p1 = q1 + k*i1;
|
|
@@ -2221,6 +3195,24 @@ ca_bincmp_lt_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
2221
3195
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<"), 1, (*p2))) ? 1 : 0; }
|
|
2222
3196
|
}
|
|
2223
3197
|
}
|
|
3198
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3199
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3200
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3201
|
+
VALUE sv = *q2;
|
|
3202
|
+
p2 = &sv;
|
|
3203
|
+
for (k=0; k<n; k++) {
|
|
3204
|
+
p1 = q1 + k;
|
|
3205
|
+
p3 = q3 + k;
|
|
3206
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<"), 1, (*p2))) ? 1 : 0; }
|
|
3207
|
+
}
|
|
3208
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3209
|
+
VALUE sv = *q1;
|
|
3210
|
+
p1 = &sv;
|
|
3211
|
+
for (k=0; k<n; k++) {
|
|
3212
|
+
p2 = q2 + k;
|
|
3213
|
+
p3 = q3 + k;
|
|
3214
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<"), 1, (*p2))) ? 1 : 0; }
|
|
3215
|
+
}
|
|
2224
3216
|
} else {
|
|
2225
3217
|
for (k=0; k<n; k++) {
|
|
2226
3218
|
p1 = q1 + k*i1;
|
|
@@ -2328,6 +3320,24 @@ ca_bincmp_ge_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
2328
3320
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2329
3321
|
}
|
|
2330
3322
|
}
|
|
3323
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3324
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3325
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3326
|
+
boolean8_t sv = *q2;
|
|
3327
|
+
p2 = &sv;
|
|
3328
|
+
for (k=0; k<n; k++) {
|
|
3329
|
+
p1 = q1 + k;
|
|
3330
|
+
p3 = q3 + k;
|
|
3331
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3332
|
+
}
|
|
3333
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3334
|
+
boolean8_t sv = *q1;
|
|
3335
|
+
p1 = &sv;
|
|
3336
|
+
for (k=0; k<n; k++) {
|
|
3337
|
+
p2 = q2 + k;
|
|
3338
|
+
p3 = q3 + k;
|
|
3339
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3340
|
+
}
|
|
2331
3341
|
} else {
|
|
2332
3342
|
for (k=0; k<n; k++) {
|
|
2333
3343
|
p1 = q1 + k*i1;
|
|
@@ -2363,6 +3373,24 @@ ca_bincmp_ge_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
2363
3373
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2364
3374
|
}
|
|
2365
3375
|
}
|
|
3376
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3377
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3378
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3379
|
+
int8_t sv = *q2;
|
|
3380
|
+
p2 = &sv;
|
|
3381
|
+
for (k=0; k<n; k++) {
|
|
3382
|
+
p1 = q1 + k;
|
|
3383
|
+
p3 = q3 + k;
|
|
3384
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3385
|
+
}
|
|
3386
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3387
|
+
int8_t sv = *q1;
|
|
3388
|
+
p1 = &sv;
|
|
3389
|
+
for (k=0; k<n; k++) {
|
|
3390
|
+
p2 = q2 + k;
|
|
3391
|
+
p3 = q3 + k;
|
|
3392
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3393
|
+
}
|
|
2366
3394
|
} else {
|
|
2367
3395
|
for (k=0; k<n; k++) {
|
|
2368
3396
|
p1 = q1 + k*i1;
|
|
@@ -2398,6 +3426,24 @@ ca_bincmp_ge_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
2398
3426
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2399
3427
|
}
|
|
2400
3428
|
}
|
|
3429
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3430
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3431
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3432
|
+
uint8_t sv = *q2;
|
|
3433
|
+
p2 = &sv;
|
|
3434
|
+
for (k=0; k<n; k++) {
|
|
3435
|
+
p1 = q1 + k;
|
|
3436
|
+
p3 = q3 + k;
|
|
3437
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3438
|
+
}
|
|
3439
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3440
|
+
uint8_t sv = *q1;
|
|
3441
|
+
p1 = &sv;
|
|
3442
|
+
for (k=0; k<n; k++) {
|
|
3443
|
+
p2 = q2 + k;
|
|
3444
|
+
p3 = q3 + k;
|
|
3445
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3446
|
+
}
|
|
2401
3447
|
} else {
|
|
2402
3448
|
for (k=0; k<n; k++) {
|
|
2403
3449
|
p1 = q1 + k*i1;
|
|
@@ -2415,8 +3461,8 @@ ca_bincmp_ge_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
2415
3461
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2416
3462
|
double tol)
|
|
2417
3463
|
{
|
|
2418
|
-
|
|
2419
|
-
|
|
3464
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
3465
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
2420
3466
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2421
3467
|
boolean8_t *p3 = q3;
|
|
2422
3468
|
ca_size_t k;
|
|
@@ -2433,6 +3479,24 @@ ca_bincmp_ge_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
2433
3479
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2434
3480
|
}
|
|
2435
3481
|
}
|
|
3482
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3483
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3484
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3485
|
+
ca_u_int16_t sv = *q2;
|
|
3486
|
+
p2 = &sv;
|
|
3487
|
+
for (k=0; k<n; k++) {
|
|
3488
|
+
p1 = q1 + k;
|
|
3489
|
+
p3 = q3 + k;
|
|
3490
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3491
|
+
}
|
|
3492
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3493
|
+
ca_u_int16_t sv = *q1;
|
|
3494
|
+
p1 = &sv;
|
|
3495
|
+
for (k=0; k<n; k++) {
|
|
3496
|
+
p2 = q2 + k;
|
|
3497
|
+
p3 = q3 + k;
|
|
3498
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3499
|
+
}
|
|
2436
3500
|
} else {
|
|
2437
3501
|
for (k=0; k<n; k++) {
|
|
2438
3502
|
p1 = q1 + k*i1;
|
|
@@ -2450,8 +3514,8 @@ ca_bincmp_ge_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
2450
3514
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2451
3515
|
double tol)
|
|
2452
3516
|
{
|
|
2453
|
-
|
|
2454
|
-
|
|
3517
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
3518
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
2455
3519
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2456
3520
|
boolean8_t *p3 = q3;
|
|
2457
3521
|
ca_size_t k;
|
|
@@ -2468,6 +3532,24 @@ ca_bincmp_ge_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
2468
3532
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2469
3533
|
}
|
|
2470
3534
|
}
|
|
3535
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3536
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3537
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3538
|
+
ca_u_uint16_t sv = *q2;
|
|
3539
|
+
p2 = &sv;
|
|
3540
|
+
for (k=0; k<n; k++) {
|
|
3541
|
+
p1 = q1 + k;
|
|
3542
|
+
p3 = q3 + k;
|
|
3543
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3544
|
+
}
|
|
3545
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3546
|
+
ca_u_uint16_t sv = *q1;
|
|
3547
|
+
p1 = &sv;
|
|
3548
|
+
for (k=0; k<n; k++) {
|
|
3549
|
+
p2 = q2 + k;
|
|
3550
|
+
p3 = q3 + k;
|
|
3551
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3552
|
+
}
|
|
2471
3553
|
} else {
|
|
2472
3554
|
for (k=0; k<n; k++) {
|
|
2473
3555
|
p1 = q1 + k*i1;
|
|
@@ -2485,8 +3567,8 @@ ca_bincmp_ge_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
2485
3567
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2486
3568
|
double tol)
|
|
2487
3569
|
{
|
|
2488
|
-
|
|
2489
|
-
|
|
3570
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
3571
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
2490
3572
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2491
3573
|
boolean8_t *p3 = q3;
|
|
2492
3574
|
ca_size_t k;
|
|
@@ -2503,6 +3585,24 @@ ca_bincmp_ge_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
2503
3585
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2504
3586
|
}
|
|
2505
3587
|
}
|
|
3588
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3589
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3590
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3591
|
+
ca_u_int32_t sv = *q2;
|
|
3592
|
+
p2 = &sv;
|
|
3593
|
+
for (k=0; k<n; k++) {
|
|
3594
|
+
p1 = q1 + k;
|
|
3595
|
+
p3 = q3 + k;
|
|
3596
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3597
|
+
}
|
|
3598
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3599
|
+
ca_u_int32_t sv = *q1;
|
|
3600
|
+
p1 = &sv;
|
|
3601
|
+
for (k=0; k<n; k++) {
|
|
3602
|
+
p2 = q2 + k;
|
|
3603
|
+
p3 = q3 + k;
|
|
3604
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3605
|
+
}
|
|
2506
3606
|
} else {
|
|
2507
3607
|
for (k=0; k<n; k++) {
|
|
2508
3608
|
p1 = q1 + k*i1;
|
|
@@ -2520,8 +3620,8 @@ ca_bincmp_ge_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
2520
3620
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2521
3621
|
double tol)
|
|
2522
3622
|
{
|
|
2523
|
-
|
|
2524
|
-
|
|
3623
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
3624
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
2525
3625
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2526
3626
|
boolean8_t *p3 = q3;
|
|
2527
3627
|
ca_size_t k;
|
|
@@ -2538,6 +3638,24 @@ ca_bincmp_ge_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
2538
3638
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2539
3639
|
}
|
|
2540
3640
|
}
|
|
3641
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3642
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3643
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3644
|
+
ca_u_uint32_t sv = *q2;
|
|
3645
|
+
p2 = &sv;
|
|
3646
|
+
for (k=0; k<n; k++) {
|
|
3647
|
+
p1 = q1 + k;
|
|
3648
|
+
p3 = q3 + k;
|
|
3649
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3650
|
+
}
|
|
3651
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3652
|
+
ca_u_uint32_t sv = *q1;
|
|
3653
|
+
p1 = &sv;
|
|
3654
|
+
for (k=0; k<n; k++) {
|
|
3655
|
+
p2 = q2 + k;
|
|
3656
|
+
p3 = q3 + k;
|
|
3657
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3658
|
+
}
|
|
2541
3659
|
} else {
|
|
2542
3660
|
for (k=0; k<n; k++) {
|
|
2543
3661
|
p1 = q1 + k*i1;
|
|
@@ -2555,8 +3673,8 @@ ca_bincmp_ge_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
2555
3673
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2556
3674
|
double tol)
|
|
2557
3675
|
{
|
|
2558
|
-
|
|
2559
|
-
|
|
3676
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
3677
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
2560
3678
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2561
3679
|
boolean8_t *p3 = q3;
|
|
2562
3680
|
ca_size_t k;
|
|
@@ -2573,6 +3691,24 @@ ca_bincmp_ge_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
2573
3691
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2574
3692
|
}
|
|
2575
3693
|
}
|
|
3694
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3695
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3696
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3697
|
+
ca_u_int64_t sv = *q2;
|
|
3698
|
+
p2 = &sv;
|
|
3699
|
+
for (k=0; k<n; k++) {
|
|
3700
|
+
p1 = q1 + k;
|
|
3701
|
+
p3 = q3 + k;
|
|
3702
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3703
|
+
}
|
|
3704
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3705
|
+
ca_u_int64_t sv = *q1;
|
|
3706
|
+
p1 = &sv;
|
|
3707
|
+
for (k=0; k<n; k++) {
|
|
3708
|
+
p2 = q2 + k;
|
|
3709
|
+
p3 = q3 + k;
|
|
3710
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3711
|
+
}
|
|
2576
3712
|
} else {
|
|
2577
3713
|
for (k=0; k<n; k++) {
|
|
2578
3714
|
p1 = q1 + k*i1;
|
|
@@ -2590,8 +3726,8 @@ ca_bincmp_ge_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
2590
3726
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2591
3727
|
double tol)
|
|
2592
3728
|
{
|
|
2593
|
-
|
|
2594
|
-
|
|
3729
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
3730
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
2595
3731
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2596
3732
|
boolean8_t *p3 = q3;
|
|
2597
3733
|
ca_size_t k;
|
|
@@ -2608,6 +3744,24 @@ ca_bincmp_ge_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
2608
3744
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2609
3745
|
}
|
|
2610
3746
|
}
|
|
3747
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3748
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3749
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3750
|
+
ca_u_uint64_t sv = *q2;
|
|
3751
|
+
p2 = &sv;
|
|
3752
|
+
for (k=0; k<n; k++) {
|
|
3753
|
+
p1 = q1 + k;
|
|
3754
|
+
p3 = q3 + k;
|
|
3755
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3756
|
+
}
|
|
3757
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3758
|
+
ca_u_uint64_t sv = *q1;
|
|
3759
|
+
p1 = &sv;
|
|
3760
|
+
for (k=0; k<n; k++) {
|
|
3761
|
+
p2 = q2 + k;
|
|
3762
|
+
p3 = q3 + k;
|
|
3763
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3764
|
+
}
|
|
2611
3765
|
} else {
|
|
2612
3766
|
for (k=0; k<n; k++) {
|
|
2613
3767
|
p1 = q1 + k*i1;
|
|
@@ -2625,8 +3779,8 @@ ca_bincmp_ge_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
2625
3779
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2626
3780
|
double tol)
|
|
2627
3781
|
{
|
|
2628
|
-
|
|
2629
|
-
|
|
3782
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
3783
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
2630
3784
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2631
3785
|
boolean8_t *p3 = q3;
|
|
2632
3786
|
ca_size_t k;
|
|
@@ -2643,6 +3797,24 @@ ca_bincmp_ge_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
2643
3797
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2644
3798
|
}
|
|
2645
3799
|
}
|
|
3800
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3801
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3802
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3803
|
+
ca_u_float32_t sv = *q2;
|
|
3804
|
+
p2 = &sv;
|
|
3805
|
+
for (k=0; k<n; k++) {
|
|
3806
|
+
p1 = q1 + k;
|
|
3807
|
+
p3 = q3 + k;
|
|
3808
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3809
|
+
}
|
|
3810
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3811
|
+
ca_u_float32_t sv = *q1;
|
|
3812
|
+
p1 = &sv;
|
|
3813
|
+
for (k=0; k<n; k++) {
|
|
3814
|
+
p2 = q2 + k;
|
|
3815
|
+
p3 = q3 + k;
|
|
3816
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3817
|
+
}
|
|
2646
3818
|
} else {
|
|
2647
3819
|
for (k=0; k<n; k++) {
|
|
2648
3820
|
p1 = q1 + k*i1;
|
|
@@ -2660,8 +3832,8 @@ ca_bincmp_ge_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
2660
3832
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2661
3833
|
double tol)
|
|
2662
3834
|
{
|
|
2663
|
-
|
|
2664
|
-
|
|
3835
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
3836
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
2665
3837
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2666
3838
|
boolean8_t *p3 = q3;
|
|
2667
3839
|
ca_size_t k;
|
|
@@ -2678,6 +3850,24 @@ ca_bincmp_ge_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
2678
3850
|
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2679
3851
|
}
|
|
2680
3852
|
}
|
|
3853
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3854
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3855
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3856
|
+
ca_u_float64_t sv = *q2;
|
|
3857
|
+
p2 = &sv;
|
|
3858
|
+
for (k=0; k<n; k++) {
|
|
3859
|
+
p1 = q1 + k;
|
|
3860
|
+
p3 = q3 + k;
|
|
3861
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3862
|
+
}
|
|
3863
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3864
|
+
ca_u_float64_t sv = *q1;
|
|
3865
|
+
p1 = &sv;
|
|
3866
|
+
for (k=0; k<n; k++) {
|
|
3867
|
+
p2 = q2 + k;
|
|
3868
|
+
p3 = q3 + k;
|
|
3869
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
3870
|
+
}
|
|
2681
3871
|
} else {
|
|
2682
3872
|
for (k=0; k<n; k++) {
|
|
2683
3873
|
p1 = q1 + k*i1;
|
|
@@ -2713,6 +3903,24 @@ ca_bincmp_ge_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
2713
3903
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">="), 1, (*p2))) ? 1 : 0; }
|
|
2714
3904
|
}
|
|
2715
3905
|
}
|
|
3906
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
3907
|
+
/* scalar on the right: read it once, so the boolean store
|
|
3908
|
+
cannot be taken to change it and the loop vectorizes */
|
|
3909
|
+
VALUE sv = *q2;
|
|
3910
|
+
p2 = &sv;
|
|
3911
|
+
for (k=0; k<n; k++) {
|
|
3912
|
+
p1 = q1 + k;
|
|
3913
|
+
p3 = q3 + k;
|
|
3914
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">="), 1, (*p2))) ? 1 : 0; }
|
|
3915
|
+
}
|
|
3916
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
3917
|
+
VALUE sv = *q1;
|
|
3918
|
+
p1 = &sv;
|
|
3919
|
+
for (k=0; k<n; k++) {
|
|
3920
|
+
p2 = q2 + k;
|
|
3921
|
+
p3 = q3 + k;
|
|
3922
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">="), 1, (*p2))) ? 1 : 0; }
|
|
3923
|
+
}
|
|
2716
3924
|
} else {
|
|
2717
3925
|
for (k=0; k<n; k++) {
|
|
2718
3926
|
p1 = q1 + k*i1;
|
|
@@ -2820,6 +4028,24 @@ ca_bincmp_le_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
2820
4028
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2821
4029
|
}
|
|
2822
4030
|
}
|
|
4031
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4032
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4033
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4034
|
+
boolean8_t sv = *q2;
|
|
4035
|
+
p2 = &sv;
|
|
4036
|
+
for (k=0; k<n; k++) {
|
|
4037
|
+
p1 = q1 + k;
|
|
4038
|
+
p3 = q3 + k;
|
|
4039
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4040
|
+
}
|
|
4041
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4042
|
+
boolean8_t sv = *q1;
|
|
4043
|
+
p1 = &sv;
|
|
4044
|
+
for (k=0; k<n; k++) {
|
|
4045
|
+
p2 = q2 + k;
|
|
4046
|
+
p3 = q3 + k;
|
|
4047
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4048
|
+
}
|
|
2823
4049
|
} else {
|
|
2824
4050
|
for (k=0; k<n; k++) {
|
|
2825
4051
|
p1 = q1 + k*i1;
|
|
@@ -2855,6 +4081,24 @@ ca_bincmp_le_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
2855
4081
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2856
4082
|
}
|
|
2857
4083
|
}
|
|
4084
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4085
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4086
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4087
|
+
int8_t sv = *q2;
|
|
4088
|
+
p2 = &sv;
|
|
4089
|
+
for (k=0; k<n; k++) {
|
|
4090
|
+
p1 = q1 + k;
|
|
4091
|
+
p3 = q3 + k;
|
|
4092
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4093
|
+
}
|
|
4094
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4095
|
+
int8_t sv = *q1;
|
|
4096
|
+
p1 = &sv;
|
|
4097
|
+
for (k=0; k<n; k++) {
|
|
4098
|
+
p2 = q2 + k;
|
|
4099
|
+
p3 = q3 + k;
|
|
4100
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4101
|
+
}
|
|
2858
4102
|
} else {
|
|
2859
4103
|
for (k=0; k<n; k++) {
|
|
2860
4104
|
p1 = q1 + k*i1;
|
|
@@ -2890,6 +4134,24 @@ ca_bincmp_le_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
2890
4134
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2891
4135
|
}
|
|
2892
4136
|
}
|
|
4137
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4138
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4139
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4140
|
+
uint8_t sv = *q2;
|
|
4141
|
+
p2 = &sv;
|
|
4142
|
+
for (k=0; k<n; k++) {
|
|
4143
|
+
p1 = q1 + k;
|
|
4144
|
+
p3 = q3 + k;
|
|
4145
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4146
|
+
}
|
|
4147
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4148
|
+
uint8_t sv = *q1;
|
|
4149
|
+
p1 = &sv;
|
|
4150
|
+
for (k=0; k<n; k++) {
|
|
4151
|
+
p2 = q2 + k;
|
|
4152
|
+
p3 = q3 + k;
|
|
4153
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4154
|
+
}
|
|
2893
4155
|
} else {
|
|
2894
4156
|
for (k=0; k<n; k++) {
|
|
2895
4157
|
p1 = q1 + k*i1;
|
|
@@ -2907,8 +4169,8 @@ ca_bincmp_le_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
2907
4169
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2908
4170
|
double tol)
|
|
2909
4171
|
{
|
|
2910
|
-
|
|
2911
|
-
|
|
4172
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
4173
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
2912
4174
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2913
4175
|
boolean8_t *p3 = q3;
|
|
2914
4176
|
ca_size_t k;
|
|
@@ -2925,6 +4187,24 @@ ca_bincmp_le_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
2925
4187
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2926
4188
|
}
|
|
2927
4189
|
}
|
|
4190
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4191
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4192
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4193
|
+
ca_u_int16_t sv = *q2;
|
|
4194
|
+
p2 = &sv;
|
|
4195
|
+
for (k=0; k<n; k++) {
|
|
4196
|
+
p1 = q1 + k;
|
|
4197
|
+
p3 = q3 + k;
|
|
4198
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4199
|
+
}
|
|
4200
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4201
|
+
ca_u_int16_t sv = *q1;
|
|
4202
|
+
p1 = &sv;
|
|
4203
|
+
for (k=0; k<n; k++) {
|
|
4204
|
+
p2 = q2 + k;
|
|
4205
|
+
p3 = q3 + k;
|
|
4206
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4207
|
+
}
|
|
2928
4208
|
} else {
|
|
2929
4209
|
for (k=0; k<n; k++) {
|
|
2930
4210
|
p1 = q1 + k*i1;
|
|
@@ -2942,8 +4222,8 @@ ca_bincmp_le_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
2942
4222
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2943
4223
|
double tol)
|
|
2944
4224
|
{
|
|
2945
|
-
|
|
2946
|
-
|
|
4225
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
4226
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
2947
4227
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2948
4228
|
boolean8_t *p3 = q3;
|
|
2949
4229
|
ca_size_t k;
|
|
@@ -2960,6 +4240,24 @@ ca_bincmp_le_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
2960
4240
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2961
4241
|
}
|
|
2962
4242
|
}
|
|
4243
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4244
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4245
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4246
|
+
ca_u_uint16_t sv = *q2;
|
|
4247
|
+
p2 = &sv;
|
|
4248
|
+
for (k=0; k<n; k++) {
|
|
4249
|
+
p1 = q1 + k;
|
|
4250
|
+
p3 = q3 + k;
|
|
4251
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4252
|
+
}
|
|
4253
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4254
|
+
ca_u_uint16_t sv = *q1;
|
|
4255
|
+
p1 = &sv;
|
|
4256
|
+
for (k=0; k<n; k++) {
|
|
4257
|
+
p2 = q2 + k;
|
|
4258
|
+
p3 = q3 + k;
|
|
4259
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4260
|
+
}
|
|
2963
4261
|
} else {
|
|
2964
4262
|
for (k=0; k<n; k++) {
|
|
2965
4263
|
p1 = q1 + k*i1;
|
|
@@ -2977,8 +4275,8 @@ ca_bincmp_le_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
2977
4275
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2978
4276
|
double tol)
|
|
2979
4277
|
{
|
|
2980
|
-
|
|
2981
|
-
|
|
4278
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
4279
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
2982
4280
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2983
4281
|
boolean8_t *p3 = q3;
|
|
2984
4282
|
ca_size_t k;
|
|
@@ -2995,6 +4293,24 @@ ca_bincmp_le_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
2995
4293
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2996
4294
|
}
|
|
2997
4295
|
}
|
|
4296
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4297
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4298
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4299
|
+
ca_u_int32_t sv = *q2;
|
|
4300
|
+
p2 = &sv;
|
|
4301
|
+
for (k=0; k<n; k++) {
|
|
4302
|
+
p1 = q1 + k;
|
|
4303
|
+
p3 = q3 + k;
|
|
4304
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4305
|
+
}
|
|
4306
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4307
|
+
ca_u_int32_t sv = *q1;
|
|
4308
|
+
p1 = &sv;
|
|
4309
|
+
for (k=0; k<n; k++) {
|
|
4310
|
+
p2 = q2 + k;
|
|
4311
|
+
p3 = q3 + k;
|
|
4312
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4313
|
+
}
|
|
2998
4314
|
} else {
|
|
2999
4315
|
for (k=0; k<n; k++) {
|
|
3000
4316
|
p1 = q1 + k*i1;
|
|
@@ -3012,8 +4328,8 @@ ca_bincmp_le_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
3012
4328
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3013
4329
|
double tol)
|
|
3014
4330
|
{
|
|
3015
|
-
|
|
3016
|
-
|
|
4331
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
4332
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
3017
4333
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3018
4334
|
boolean8_t *p3 = q3;
|
|
3019
4335
|
ca_size_t k;
|
|
@@ -3030,6 +4346,24 @@ ca_bincmp_le_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
3030
4346
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3031
4347
|
}
|
|
3032
4348
|
}
|
|
4349
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4350
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4351
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4352
|
+
ca_u_uint32_t sv = *q2;
|
|
4353
|
+
p2 = &sv;
|
|
4354
|
+
for (k=0; k<n; k++) {
|
|
4355
|
+
p1 = q1 + k;
|
|
4356
|
+
p3 = q3 + k;
|
|
4357
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4358
|
+
}
|
|
4359
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4360
|
+
ca_u_uint32_t sv = *q1;
|
|
4361
|
+
p1 = &sv;
|
|
4362
|
+
for (k=0; k<n; k++) {
|
|
4363
|
+
p2 = q2 + k;
|
|
4364
|
+
p3 = q3 + k;
|
|
4365
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4366
|
+
}
|
|
3033
4367
|
} else {
|
|
3034
4368
|
for (k=0; k<n; k++) {
|
|
3035
4369
|
p1 = q1 + k*i1;
|
|
@@ -3047,8 +4381,8 @@ ca_bincmp_le_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
3047
4381
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3048
4382
|
double tol)
|
|
3049
4383
|
{
|
|
3050
|
-
|
|
3051
|
-
|
|
4384
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
4385
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
3052
4386
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3053
4387
|
boolean8_t *p3 = q3;
|
|
3054
4388
|
ca_size_t k;
|
|
@@ -3065,6 +4399,24 @@ ca_bincmp_le_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
3065
4399
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3066
4400
|
}
|
|
3067
4401
|
}
|
|
4402
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4403
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4404
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4405
|
+
ca_u_int64_t sv = *q2;
|
|
4406
|
+
p2 = &sv;
|
|
4407
|
+
for (k=0; k<n; k++) {
|
|
4408
|
+
p1 = q1 + k;
|
|
4409
|
+
p3 = q3 + k;
|
|
4410
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4411
|
+
}
|
|
4412
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4413
|
+
ca_u_int64_t sv = *q1;
|
|
4414
|
+
p1 = &sv;
|
|
4415
|
+
for (k=0; k<n; k++) {
|
|
4416
|
+
p2 = q2 + k;
|
|
4417
|
+
p3 = q3 + k;
|
|
4418
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4419
|
+
}
|
|
3068
4420
|
} else {
|
|
3069
4421
|
for (k=0; k<n; k++) {
|
|
3070
4422
|
p1 = q1 + k*i1;
|
|
@@ -3082,8 +4434,8 @@ ca_bincmp_le_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
3082
4434
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3083
4435
|
double tol)
|
|
3084
4436
|
{
|
|
3085
|
-
|
|
3086
|
-
|
|
4437
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
4438
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
3087
4439
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3088
4440
|
boolean8_t *p3 = q3;
|
|
3089
4441
|
ca_size_t k;
|
|
@@ -3100,6 +4452,24 @@ ca_bincmp_le_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
3100
4452
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3101
4453
|
}
|
|
3102
4454
|
}
|
|
4455
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4456
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4457
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4458
|
+
ca_u_uint64_t sv = *q2;
|
|
4459
|
+
p2 = &sv;
|
|
4460
|
+
for (k=0; k<n; k++) {
|
|
4461
|
+
p1 = q1 + k;
|
|
4462
|
+
p3 = q3 + k;
|
|
4463
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4464
|
+
}
|
|
4465
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4466
|
+
ca_u_uint64_t sv = *q1;
|
|
4467
|
+
p1 = &sv;
|
|
4468
|
+
for (k=0; k<n; k++) {
|
|
4469
|
+
p2 = q2 + k;
|
|
4470
|
+
p3 = q3 + k;
|
|
4471
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4472
|
+
}
|
|
3103
4473
|
} else {
|
|
3104
4474
|
for (k=0; k<n; k++) {
|
|
3105
4475
|
p1 = q1 + k*i1;
|
|
@@ -3117,8 +4487,8 @@ ca_bincmp_le_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
3117
4487
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3118
4488
|
double tol)
|
|
3119
4489
|
{
|
|
3120
|
-
|
|
3121
|
-
|
|
4490
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
4491
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
3122
4492
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3123
4493
|
boolean8_t *p3 = q3;
|
|
3124
4494
|
ca_size_t k;
|
|
@@ -3135,6 +4505,24 @@ ca_bincmp_le_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
3135
4505
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3136
4506
|
}
|
|
3137
4507
|
}
|
|
4508
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4509
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4510
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4511
|
+
ca_u_float32_t sv = *q2;
|
|
4512
|
+
p2 = &sv;
|
|
4513
|
+
for (k=0; k<n; k++) {
|
|
4514
|
+
p1 = q1 + k;
|
|
4515
|
+
p3 = q3 + k;
|
|
4516
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4517
|
+
}
|
|
4518
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4519
|
+
ca_u_float32_t sv = *q1;
|
|
4520
|
+
p1 = &sv;
|
|
4521
|
+
for (k=0; k<n; k++) {
|
|
4522
|
+
p2 = q2 + k;
|
|
4523
|
+
p3 = q3 + k;
|
|
4524
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4525
|
+
}
|
|
3138
4526
|
} else {
|
|
3139
4527
|
for (k=0; k<n; k++) {
|
|
3140
4528
|
p1 = q1 + k*i1;
|
|
@@ -3152,8 +4540,8 @@ ca_bincmp_le_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
3152
4540
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3153
4541
|
double tol)
|
|
3154
4542
|
{
|
|
3155
|
-
|
|
3156
|
-
|
|
4543
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
4544
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
3157
4545
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3158
4546
|
boolean8_t *p3 = q3;
|
|
3159
4547
|
ca_size_t k;
|
|
@@ -3170,6 +4558,24 @@ ca_bincmp_le_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
3170
4558
|
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3171
4559
|
}
|
|
3172
4560
|
}
|
|
4561
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4562
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4563
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4564
|
+
ca_u_float64_t sv = *q2;
|
|
4565
|
+
p2 = &sv;
|
|
4566
|
+
for (k=0; k<n; k++) {
|
|
4567
|
+
p1 = q1 + k;
|
|
4568
|
+
p3 = q3 + k;
|
|
4569
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4570
|
+
}
|
|
4571
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4572
|
+
ca_u_float64_t sv = *q1;
|
|
4573
|
+
p1 = &sv;
|
|
4574
|
+
for (k=0; k<n; k++) {
|
|
4575
|
+
p2 = q2 + k;
|
|
4576
|
+
p3 = q3 + k;
|
|
4577
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
4578
|
+
}
|
|
3173
4579
|
} else {
|
|
3174
4580
|
for (k=0; k<n; k++) {
|
|
3175
4581
|
p1 = q1 + k*i1;
|
|
@@ -3205,6 +4611,24 @@ ca_bincmp_le_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
3205
4611
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<="), 1, (*p2))) ? 1 : 0; }
|
|
3206
4612
|
}
|
|
3207
4613
|
}
|
|
4614
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4615
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4616
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4617
|
+
VALUE sv = *q2;
|
|
4618
|
+
p2 = &sv;
|
|
4619
|
+
for (k=0; k<n; k++) {
|
|
4620
|
+
p1 = q1 + k;
|
|
4621
|
+
p3 = q3 + k;
|
|
4622
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<="), 1, (*p2))) ? 1 : 0; }
|
|
4623
|
+
}
|
|
4624
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4625
|
+
VALUE sv = *q1;
|
|
4626
|
+
p1 = &sv;
|
|
4627
|
+
for (k=0; k<n; k++) {
|
|
4628
|
+
p2 = q2 + k;
|
|
4629
|
+
p3 = q3 + k;
|
|
4630
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<="), 1, (*p2))) ? 1 : 0; }
|
|
4631
|
+
}
|
|
3208
4632
|
} else {
|
|
3209
4633
|
for (k=0; k<n; k++) {
|
|
3210
4634
|
p1 = q1 + k*i1;
|
|
@@ -3310,6 +4734,24 @@ ca_bincmp_match_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
3310
4734
|
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=~"), 1, (*p2))); }
|
|
3311
4735
|
}
|
|
3312
4736
|
}
|
|
4737
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4738
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4739
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4740
|
+
VALUE sv = *q2;
|
|
4741
|
+
p2 = &sv;
|
|
4742
|
+
for (k=0; k<n; k++) {
|
|
4743
|
+
p1 = q1 + k;
|
|
4744
|
+
p3 = q3 + k;
|
|
4745
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=~"), 1, (*p2))); }
|
|
4746
|
+
}
|
|
4747
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4748
|
+
VALUE sv = *q1;
|
|
4749
|
+
p1 = &sv;
|
|
4750
|
+
for (k=0; k<n; k++) {
|
|
4751
|
+
p2 = q2 + k;
|
|
4752
|
+
p3 = q3 + k;
|
|
4753
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=~"), 1, (*p2))); }
|
|
4754
|
+
}
|
|
3313
4755
|
} else {
|
|
3314
4756
|
for (k=0; k<n; k++) {
|
|
3315
4757
|
p1 = q1 + k*i1;
|
|
@@ -3376,6 +4818,24 @@ ca_bincmp_is_kind_of_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
3376
4818
|
{ (*p3) = RTEST(rb_obj_is_kind_of((*p1), (*p2))); }
|
|
3377
4819
|
}
|
|
3378
4820
|
}
|
|
4821
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4822
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4823
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4824
|
+
VALUE sv = *q2;
|
|
4825
|
+
p2 = &sv;
|
|
4826
|
+
for (k=0; k<n; k++) {
|
|
4827
|
+
p1 = q1 + k;
|
|
4828
|
+
p3 = q3 + k;
|
|
4829
|
+
{ (*p3) = RTEST(rb_obj_is_kind_of((*p1), (*p2))); }
|
|
4830
|
+
}
|
|
4831
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4832
|
+
VALUE sv = *q1;
|
|
4833
|
+
p1 = &sv;
|
|
4834
|
+
for (k=0; k<n; k++) {
|
|
4835
|
+
p2 = q2 + k;
|
|
4836
|
+
p3 = q3 + k;
|
|
4837
|
+
{ (*p3) = RTEST(rb_obj_is_kind_of((*p1), (*p2))); }
|
|
4838
|
+
}
|
|
3379
4839
|
} else {
|
|
3380
4840
|
for (k=0; k<n; k++) {
|
|
3381
4841
|
p1 = q1 + k*i1;
|
|
@@ -3442,6 +4902,24 @@ ca_bincmp_is_close_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
3442
4902
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3443
4903
|
}
|
|
3444
4904
|
}
|
|
4905
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4906
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4907
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4908
|
+
int8_t sv = *q2;
|
|
4909
|
+
p2 = &sv;
|
|
4910
|
+
for (k=0; k<n; k++) {
|
|
4911
|
+
p1 = q1 + k;
|
|
4912
|
+
p3 = q3 + k;
|
|
4913
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
4914
|
+
}
|
|
4915
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4916
|
+
int8_t sv = *q1;
|
|
4917
|
+
p1 = &sv;
|
|
4918
|
+
for (k=0; k<n; k++) {
|
|
4919
|
+
p2 = q2 + k;
|
|
4920
|
+
p3 = q3 + k;
|
|
4921
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
4922
|
+
}
|
|
3445
4923
|
} else {
|
|
3446
4924
|
for (k=0; k<n; k++) {
|
|
3447
4925
|
p1 = q1 + k*i1;
|
|
@@ -3477,6 +4955,24 @@ ca_bincmp_is_close_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
3477
4955
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3478
4956
|
}
|
|
3479
4957
|
}
|
|
4958
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
4959
|
+
/* scalar on the right: read it once, so the boolean store
|
|
4960
|
+
cannot be taken to change it and the loop vectorizes */
|
|
4961
|
+
uint8_t sv = *q2;
|
|
4962
|
+
p2 = &sv;
|
|
4963
|
+
for (k=0; k<n; k++) {
|
|
4964
|
+
p1 = q1 + k;
|
|
4965
|
+
p3 = q3 + k;
|
|
4966
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
4967
|
+
}
|
|
4968
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
4969
|
+
uint8_t sv = *q1;
|
|
4970
|
+
p1 = &sv;
|
|
4971
|
+
for (k=0; k<n; k++) {
|
|
4972
|
+
p2 = q2 + k;
|
|
4973
|
+
p3 = q3 + k;
|
|
4974
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
4975
|
+
}
|
|
3480
4976
|
} else {
|
|
3481
4977
|
for (k=0; k<n; k++) {
|
|
3482
4978
|
p1 = q1 + k*i1;
|
|
@@ -3494,8 +4990,8 @@ ca_bincmp_is_close_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
3494
4990
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3495
4991
|
double tol)
|
|
3496
4992
|
{
|
|
3497
|
-
|
|
3498
|
-
|
|
4993
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
4994
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
3499
4995
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3500
4996
|
boolean8_t *p3 = q3;
|
|
3501
4997
|
ca_size_t k;
|
|
@@ -3512,6 +5008,24 @@ ca_bincmp_is_close_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
3512
5008
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3513
5009
|
}
|
|
3514
5010
|
}
|
|
5011
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5012
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5013
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5014
|
+
ca_u_int16_t sv = *q2;
|
|
5015
|
+
p2 = &sv;
|
|
5016
|
+
for (k=0; k<n; k++) {
|
|
5017
|
+
p1 = q1 + k;
|
|
5018
|
+
p3 = q3 + k;
|
|
5019
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5020
|
+
}
|
|
5021
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5022
|
+
ca_u_int16_t sv = *q1;
|
|
5023
|
+
p1 = &sv;
|
|
5024
|
+
for (k=0; k<n; k++) {
|
|
5025
|
+
p2 = q2 + k;
|
|
5026
|
+
p3 = q3 + k;
|
|
5027
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5028
|
+
}
|
|
3515
5029
|
} else {
|
|
3516
5030
|
for (k=0; k<n; k++) {
|
|
3517
5031
|
p1 = q1 + k*i1;
|
|
@@ -3529,8 +5043,8 @@ ca_bincmp_is_close_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
3529
5043
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3530
5044
|
double tol)
|
|
3531
5045
|
{
|
|
3532
|
-
|
|
3533
|
-
|
|
5046
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
5047
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
3534
5048
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3535
5049
|
boolean8_t *p3 = q3;
|
|
3536
5050
|
ca_size_t k;
|
|
@@ -3547,6 +5061,24 @@ ca_bincmp_is_close_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
3547
5061
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3548
5062
|
}
|
|
3549
5063
|
}
|
|
5064
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5065
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5066
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5067
|
+
ca_u_uint16_t sv = *q2;
|
|
5068
|
+
p2 = &sv;
|
|
5069
|
+
for (k=0; k<n; k++) {
|
|
5070
|
+
p1 = q1 + k;
|
|
5071
|
+
p3 = q3 + k;
|
|
5072
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5073
|
+
}
|
|
5074
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5075
|
+
ca_u_uint16_t sv = *q1;
|
|
5076
|
+
p1 = &sv;
|
|
5077
|
+
for (k=0; k<n; k++) {
|
|
5078
|
+
p2 = q2 + k;
|
|
5079
|
+
p3 = q3 + k;
|
|
5080
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5081
|
+
}
|
|
3550
5082
|
} else {
|
|
3551
5083
|
for (k=0; k<n; k++) {
|
|
3552
5084
|
p1 = q1 + k*i1;
|
|
@@ -3564,8 +5096,8 @@ ca_bincmp_is_close_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
3564
5096
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3565
5097
|
double tol)
|
|
3566
5098
|
{
|
|
3567
|
-
|
|
3568
|
-
|
|
5099
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
5100
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
3569
5101
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3570
5102
|
boolean8_t *p3 = q3;
|
|
3571
5103
|
ca_size_t k;
|
|
@@ -3582,6 +5114,24 @@ ca_bincmp_is_close_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
3582
5114
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3583
5115
|
}
|
|
3584
5116
|
}
|
|
5117
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5118
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5119
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5120
|
+
ca_u_int32_t sv = *q2;
|
|
5121
|
+
p2 = &sv;
|
|
5122
|
+
for (k=0; k<n; k++) {
|
|
5123
|
+
p1 = q1 + k;
|
|
5124
|
+
p3 = q3 + k;
|
|
5125
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5126
|
+
}
|
|
5127
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5128
|
+
ca_u_int32_t sv = *q1;
|
|
5129
|
+
p1 = &sv;
|
|
5130
|
+
for (k=0; k<n; k++) {
|
|
5131
|
+
p2 = q2 + k;
|
|
5132
|
+
p3 = q3 + k;
|
|
5133
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5134
|
+
}
|
|
3585
5135
|
} else {
|
|
3586
5136
|
for (k=0; k<n; k++) {
|
|
3587
5137
|
p1 = q1 + k*i1;
|
|
@@ -3599,8 +5149,8 @@ ca_bincmp_is_close_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
3599
5149
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3600
5150
|
double tol)
|
|
3601
5151
|
{
|
|
3602
|
-
|
|
3603
|
-
|
|
5152
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
5153
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
3604
5154
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3605
5155
|
boolean8_t *p3 = q3;
|
|
3606
5156
|
ca_size_t k;
|
|
@@ -3617,6 +5167,24 @@ ca_bincmp_is_close_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
3617
5167
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3618
5168
|
}
|
|
3619
5169
|
}
|
|
5170
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5171
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5172
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5173
|
+
ca_u_uint32_t sv = *q2;
|
|
5174
|
+
p2 = &sv;
|
|
5175
|
+
for (k=0; k<n; k++) {
|
|
5176
|
+
p1 = q1 + k;
|
|
5177
|
+
p3 = q3 + k;
|
|
5178
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5179
|
+
}
|
|
5180
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5181
|
+
ca_u_uint32_t sv = *q1;
|
|
5182
|
+
p1 = &sv;
|
|
5183
|
+
for (k=0; k<n; k++) {
|
|
5184
|
+
p2 = q2 + k;
|
|
5185
|
+
p3 = q3 + k;
|
|
5186
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5187
|
+
}
|
|
3620
5188
|
} else {
|
|
3621
5189
|
for (k=0; k<n; k++) {
|
|
3622
5190
|
p1 = q1 + k*i1;
|
|
@@ -3634,8 +5202,8 @@ ca_bincmp_is_close_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
3634
5202
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3635
5203
|
double tol)
|
|
3636
5204
|
{
|
|
3637
|
-
|
|
3638
|
-
|
|
5205
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
5206
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
3639
5207
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3640
5208
|
boolean8_t *p3 = q3;
|
|
3641
5209
|
ca_size_t k;
|
|
@@ -3652,6 +5220,24 @@ ca_bincmp_is_close_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
3652
5220
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3653
5221
|
}
|
|
3654
5222
|
}
|
|
5223
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5224
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5225
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5226
|
+
ca_u_int64_t sv = *q2;
|
|
5227
|
+
p2 = &sv;
|
|
5228
|
+
for (k=0; k<n; k++) {
|
|
5229
|
+
p1 = q1 + k;
|
|
5230
|
+
p3 = q3 + k;
|
|
5231
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5232
|
+
}
|
|
5233
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5234
|
+
ca_u_int64_t sv = *q1;
|
|
5235
|
+
p1 = &sv;
|
|
5236
|
+
for (k=0; k<n; k++) {
|
|
5237
|
+
p2 = q2 + k;
|
|
5238
|
+
p3 = q3 + k;
|
|
5239
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5240
|
+
}
|
|
3655
5241
|
} else {
|
|
3656
5242
|
for (k=0; k<n; k++) {
|
|
3657
5243
|
p1 = q1 + k*i1;
|
|
@@ -3669,8 +5255,8 @@ ca_bincmp_is_close_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
3669
5255
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3670
5256
|
double tol)
|
|
3671
5257
|
{
|
|
3672
|
-
|
|
3673
|
-
|
|
5258
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
5259
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
3674
5260
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3675
5261
|
boolean8_t *p3 = q3;
|
|
3676
5262
|
ca_size_t k;
|
|
@@ -3687,6 +5273,24 @@ ca_bincmp_is_close_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
3687
5273
|
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3688
5274
|
}
|
|
3689
5275
|
}
|
|
5276
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5277
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5278
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5279
|
+
ca_u_uint64_t sv = *q2;
|
|
5280
|
+
p2 = &sv;
|
|
5281
|
+
for (k=0; k<n; k++) {
|
|
5282
|
+
p1 = q1 + k;
|
|
5283
|
+
p3 = q3 + k;
|
|
5284
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5285
|
+
}
|
|
5286
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5287
|
+
ca_u_uint64_t sv = *q1;
|
|
5288
|
+
p1 = &sv;
|
|
5289
|
+
for (k=0; k<n; k++) {
|
|
5290
|
+
p2 = q2 + k;
|
|
5291
|
+
p3 = q3 + k;
|
|
5292
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
5293
|
+
}
|
|
3690
5294
|
} else {
|
|
3691
5295
|
for (k=0; k<n; k++) {
|
|
3692
5296
|
p1 = q1 + k*i1;
|
|
@@ -3704,8 +5308,8 @@ ca_bincmp_is_close_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
3704
5308
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3705
5309
|
double tol)
|
|
3706
5310
|
{
|
|
3707
|
-
|
|
3708
|
-
|
|
5311
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
5312
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
3709
5313
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3710
5314
|
boolean8_t *p3 = q3;
|
|
3711
5315
|
ca_size_t k;
|
|
@@ -3722,6 +5326,24 @@ ca_bincmp_is_close_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
3722
5326
|
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3723
5327
|
}
|
|
3724
5328
|
}
|
|
5329
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5330
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5331
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5332
|
+
ca_u_float32_t sv = *q2;
|
|
5333
|
+
p2 = &sv;
|
|
5334
|
+
for (k=0; k<n; k++) {
|
|
5335
|
+
p1 = q1 + k;
|
|
5336
|
+
p3 = q3 + k;
|
|
5337
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5338
|
+
}
|
|
5339
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5340
|
+
ca_u_float32_t sv = *q1;
|
|
5341
|
+
p1 = &sv;
|
|
5342
|
+
for (k=0; k<n; k++) {
|
|
5343
|
+
p2 = q2 + k;
|
|
5344
|
+
p3 = q3 + k;
|
|
5345
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5346
|
+
}
|
|
3725
5347
|
} else {
|
|
3726
5348
|
for (k=0; k<n; k++) {
|
|
3727
5349
|
p1 = q1 + k*i1;
|
|
@@ -3739,8 +5361,8 @@ ca_bincmp_is_close_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
3739
5361
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3740
5362
|
double tol)
|
|
3741
5363
|
{
|
|
3742
|
-
|
|
3743
|
-
|
|
5364
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
5365
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
3744
5366
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3745
5367
|
boolean8_t *p3 = q3;
|
|
3746
5368
|
ca_size_t k;
|
|
@@ -3757,6 +5379,24 @@ ca_bincmp_is_close_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
3757
5379
|
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3758
5380
|
}
|
|
3759
5381
|
}
|
|
5382
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5383
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5384
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5385
|
+
ca_u_float64_t sv = *q2;
|
|
5386
|
+
p2 = &sv;
|
|
5387
|
+
for (k=0; k<n; k++) {
|
|
5388
|
+
p1 = q1 + k;
|
|
5389
|
+
p3 = q3 + k;
|
|
5390
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5391
|
+
}
|
|
5392
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5393
|
+
ca_u_float64_t sv = *q1;
|
|
5394
|
+
p1 = &sv;
|
|
5395
|
+
for (k=0; k<n; k++) {
|
|
5396
|
+
p2 = q2 + k;
|
|
5397
|
+
p3 = q3 + k;
|
|
5398
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5399
|
+
}
|
|
3760
5400
|
} else {
|
|
3761
5401
|
for (k=0; k<n; k++) {
|
|
3762
5402
|
p1 = q1 + k*i1;
|
|
@@ -3774,8 +5414,8 @@ ca_bincmp_is_close_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
3774
5414
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3775
5415
|
double tol)
|
|
3776
5416
|
{
|
|
3777
|
-
|
|
3778
|
-
|
|
5417
|
+
ca_u_cmplx64_t *q1 = (ca_u_cmplx64_t *) ptr1, *q2 = (ca_u_cmplx64_t *) ptr2;
|
|
5418
|
+
ca_u_cmplx64_t *p1 = q1, *p2 = q2;
|
|
3779
5419
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3780
5420
|
boolean8_t *p3 = q3;
|
|
3781
5421
|
ca_size_t k;
|
|
@@ -3792,6 +5432,24 @@ ca_bincmp_is_close_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
3792
5432
|
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3793
5433
|
}
|
|
3794
5434
|
}
|
|
5435
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5436
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5437
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5438
|
+
ca_u_cmplx64_t sv = *q2;
|
|
5439
|
+
p2 = &sv;
|
|
5440
|
+
for (k=0; k<n; k++) {
|
|
5441
|
+
p1 = q1 + k;
|
|
5442
|
+
p3 = q3 + k;
|
|
5443
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5444
|
+
}
|
|
5445
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5446
|
+
ca_u_cmplx64_t sv = *q1;
|
|
5447
|
+
p1 = &sv;
|
|
5448
|
+
for (k=0; k<n; k++) {
|
|
5449
|
+
p2 = q2 + k;
|
|
5450
|
+
p3 = q3 + k;
|
|
5451
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5452
|
+
}
|
|
3795
5453
|
} else {
|
|
3796
5454
|
for (k=0; k<n; k++) {
|
|
3797
5455
|
p1 = q1 + k*i1;
|
|
@@ -3809,8 +5467,8 @@ ca_bincmp_is_close_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
3809
5467
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3810
5468
|
double tol)
|
|
3811
5469
|
{
|
|
3812
|
-
|
|
3813
|
-
|
|
5470
|
+
ca_u_cmplx128_t *q1 = (ca_u_cmplx128_t *) ptr1, *q2 = (ca_u_cmplx128_t *) ptr2;
|
|
5471
|
+
ca_u_cmplx128_t *p1 = q1, *p2 = q2;
|
|
3814
5472
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3815
5473
|
boolean8_t *p3 = q3;
|
|
3816
5474
|
ca_size_t k;
|
|
@@ -3827,6 +5485,24 @@ ca_bincmp_is_close_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
3827
5485
|
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3828
5486
|
}
|
|
3829
5487
|
}
|
|
5488
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5489
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5490
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5491
|
+
ca_u_cmplx128_t sv = *q2;
|
|
5492
|
+
p2 = &sv;
|
|
5493
|
+
for (k=0; k<n; k++) {
|
|
5494
|
+
p1 = q1 + k;
|
|
5495
|
+
p3 = q3 + k;
|
|
5496
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5497
|
+
}
|
|
5498
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5499
|
+
ca_u_cmplx128_t sv = *q1;
|
|
5500
|
+
p1 = &sv;
|
|
5501
|
+
for (k=0; k<n; k++) {
|
|
5502
|
+
p2 = q2 + k;
|
|
5503
|
+
p3 = q3 + k;
|
|
5504
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
5505
|
+
}
|
|
3830
5506
|
} else {
|
|
3831
5507
|
for (k=0; k<n; k++) {
|
|
3832
5508
|
p1 = q1 + k*i1;
|
|
@@ -3899,6 +5575,34 @@ ca_bincmp_is_equiv_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
3899
5575
|
}
|
|
3900
5576
|
}
|
|
3901
5577
|
}
|
|
5578
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5579
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5580
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5581
|
+
int8_t sv = *q2;
|
|
5582
|
+
p2 = &sv;
|
|
5583
|
+
for (k=0; k<n; k++) {
|
|
5584
|
+
p1 = q1 + k;
|
|
5585
|
+
p3 = q3 + k;
|
|
5586
|
+
{
|
|
5587
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5588
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5589
|
+
double m = (aa > ab) ? aa : ab;
|
|
5590
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5591
|
+
}
|
|
5592
|
+
}
|
|
5593
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5594
|
+
int8_t sv = *q1;
|
|
5595
|
+
p1 = &sv;
|
|
5596
|
+
for (k=0; k<n; k++) {
|
|
5597
|
+
p2 = q2 + k;
|
|
5598
|
+
p3 = q3 + k;
|
|
5599
|
+
{
|
|
5600
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5601
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5602
|
+
double m = (aa > ab) ? aa : ab;
|
|
5603
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5604
|
+
}
|
|
5605
|
+
}
|
|
3902
5606
|
} else {
|
|
3903
5607
|
for (k=0; k<n; k++) {
|
|
3904
5608
|
p1 = q1 + k*i1;
|
|
@@ -3944,6 +5648,34 @@ ca_bincmp_is_equiv_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
3944
5648
|
}
|
|
3945
5649
|
}
|
|
3946
5650
|
}
|
|
5651
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5652
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5653
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5654
|
+
uint8_t sv = *q2;
|
|
5655
|
+
p2 = &sv;
|
|
5656
|
+
for (k=0; k<n; k++) {
|
|
5657
|
+
p1 = q1 + k;
|
|
5658
|
+
p3 = q3 + k;
|
|
5659
|
+
{
|
|
5660
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5661
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5662
|
+
double m = (aa > ab) ? aa : ab;
|
|
5663
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5664
|
+
}
|
|
5665
|
+
}
|
|
5666
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5667
|
+
uint8_t sv = *q1;
|
|
5668
|
+
p1 = &sv;
|
|
5669
|
+
for (k=0; k<n; k++) {
|
|
5670
|
+
p2 = q2 + k;
|
|
5671
|
+
p3 = q3 + k;
|
|
5672
|
+
{
|
|
5673
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5674
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5675
|
+
double m = (aa > ab) ? aa : ab;
|
|
5676
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5677
|
+
}
|
|
5678
|
+
}
|
|
3947
5679
|
} else {
|
|
3948
5680
|
for (k=0; k<n; k++) {
|
|
3949
5681
|
p1 = q1 + k*i1;
|
|
@@ -3966,8 +5698,8 @@ ca_bincmp_is_equiv_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
3966
5698
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3967
5699
|
double tol)
|
|
3968
5700
|
{
|
|
3969
|
-
|
|
3970
|
-
|
|
5701
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2;
|
|
5702
|
+
ca_u_int16_t *p1 = q1, *p2 = q2;
|
|
3971
5703
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3972
5704
|
boolean8_t *p3 = q3;
|
|
3973
5705
|
ca_size_t k;
|
|
@@ -3989,6 +5721,34 @@ ca_bincmp_is_equiv_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
3989
5721
|
}
|
|
3990
5722
|
}
|
|
3991
5723
|
}
|
|
5724
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5725
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5726
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5727
|
+
ca_u_int16_t sv = *q2;
|
|
5728
|
+
p2 = &sv;
|
|
5729
|
+
for (k=0; k<n; k++) {
|
|
5730
|
+
p1 = q1 + k;
|
|
5731
|
+
p3 = q3 + k;
|
|
5732
|
+
{
|
|
5733
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5734
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5735
|
+
double m = (aa > ab) ? aa : ab;
|
|
5736
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5737
|
+
}
|
|
5738
|
+
}
|
|
5739
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5740
|
+
ca_u_int16_t sv = *q1;
|
|
5741
|
+
p1 = &sv;
|
|
5742
|
+
for (k=0; k<n; k++) {
|
|
5743
|
+
p2 = q2 + k;
|
|
5744
|
+
p3 = q3 + k;
|
|
5745
|
+
{
|
|
5746
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5747
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5748
|
+
double m = (aa > ab) ? aa : ab;
|
|
5749
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5750
|
+
}
|
|
5751
|
+
}
|
|
3992
5752
|
} else {
|
|
3993
5753
|
for (k=0; k<n; k++) {
|
|
3994
5754
|
p1 = q1 + k*i1;
|
|
@@ -4011,8 +5771,8 @@ ca_bincmp_is_equiv_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
4011
5771
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4012
5772
|
double tol)
|
|
4013
5773
|
{
|
|
4014
|
-
|
|
4015
|
-
|
|
5774
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2;
|
|
5775
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2;
|
|
4016
5776
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4017
5777
|
boolean8_t *p3 = q3;
|
|
4018
5778
|
ca_size_t k;
|
|
@@ -4034,6 +5794,34 @@ ca_bincmp_is_equiv_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
4034
5794
|
}
|
|
4035
5795
|
}
|
|
4036
5796
|
}
|
|
5797
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5798
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5799
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5800
|
+
ca_u_uint16_t sv = *q2;
|
|
5801
|
+
p2 = &sv;
|
|
5802
|
+
for (k=0; k<n; k++) {
|
|
5803
|
+
p1 = q1 + k;
|
|
5804
|
+
p3 = q3 + k;
|
|
5805
|
+
{
|
|
5806
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5807
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5808
|
+
double m = (aa > ab) ? aa : ab;
|
|
5809
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5810
|
+
}
|
|
5811
|
+
}
|
|
5812
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5813
|
+
ca_u_uint16_t sv = *q1;
|
|
5814
|
+
p1 = &sv;
|
|
5815
|
+
for (k=0; k<n; k++) {
|
|
5816
|
+
p2 = q2 + k;
|
|
5817
|
+
p3 = q3 + k;
|
|
5818
|
+
{
|
|
5819
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5820
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5821
|
+
double m = (aa > ab) ? aa : ab;
|
|
5822
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5823
|
+
}
|
|
5824
|
+
}
|
|
4037
5825
|
} else {
|
|
4038
5826
|
for (k=0; k<n; k++) {
|
|
4039
5827
|
p1 = q1 + k*i1;
|
|
@@ -4056,8 +5844,8 @@ ca_bincmp_is_equiv_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4056
5844
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4057
5845
|
double tol)
|
|
4058
5846
|
{
|
|
4059
|
-
|
|
4060
|
-
|
|
5847
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2;
|
|
5848
|
+
ca_u_int32_t *p1 = q1, *p2 = q2;
|
|
4061
5849
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4062
5850
|
boolean8_t *p3 = q3;
|
|
4063
5851
|
ca_size_t k;
|
|
@@ -4079,6 +5867,34 @@ ca_bincmp_is_equiv_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4079
5867
|
}
|
|
4080
5868
|
}
|
|
4081
5869
|
}
|
|
5870
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5871
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5872
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5873
|
+
ca_u_int32_t sv = *q2;
|
|
5874
|
+
p2 = &sv;
|
|
5875
|
+
for (k=0; k<n; k++) {
|
|
5876
|
+
p1 = q1 + k;
|
|
5877
|
+
p3 = q3 + k;
|
|
5878
|
+
{
|
|
5879
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5880
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5881
|
+
double m = (aa > ab) ? aa : ab;
|
|
5882
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5883
|
+
}
|
|
5884
|
+
}
|
|
5885
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5886
|
+
ca_u_int32_t sv = *q1;
|
|
5887
|
+
p1 = &sv;
|
|
5888
|
+
for (k=0; k<n; k++) {
|
|
5889
|
+
p2 = q2 + k;
|
|
5890
|
+
p3 = q3 + k;
|
|
5891
|
+
{
|
|
5892
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5893
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5894
|
+
double m = (aa > ab) ? aa : ab;
|
|
5895
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5896
|
+
}
|
|
5897
|
+
}
|
|
4082
5898
|
} else {
|
|
4083
5899
|
for (k=0; k<n; k++) {
|
|
4084
5900
|
p1 = q1 + k*i1;
|
|
@@ -4101,8 +5917,8 @@ ca_bincmp_is_equiv_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
4101
5917
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4102
5918
|
double tol)
|
|
4103
5919
|
{
|
|
4104
|
-
|
|
4105
|
-
|
|
5920
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2;
|
|
5921
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2;
|
|
4106
5922
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4107
5923
|
boolean8_t *p3 = q3;
|
|
4108
5924
|
ca_size_t k;
|
|
@@ -4124,6 +5940,34 @@ ca_bincmp_is_equiv_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
4124
5940
|
}
|
|
4125
5941
|
}
|
|
4126
5942
|
}
|
|
5943
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
5944
|
+
/* scalar on the right: read it once, so the boolean store
|
|
5945
|
+
cannot be taken to change it and the loop vectorizes */
|
|
5946
|
+
ca_u_uint32_t sv = *q2;
|
|
5947
|
+
p2 = &sv;
|
|
5948
|
+
for (k=0; k<n; k++) {
|
|
5949
|
+
p1 = q1 + k;
|
|
5950
|
+
p3 = q3 + k;
|
|
5951
|
+
{
|
|
5952
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5953
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5954
|
+
double m = (aa > ab) ? aa : ab;
|
|
5955
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5956
|
+
}
|
|
5957
|
+
}
|
|
5958
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
5959
|
+
ca_u_uint32_t sv = *q1;
|
|
5960
|
+
p1 = &sv;
|
|
5961
|
+
for (k=0; k<n; k++) {
|
|
5962
|
+
p2 = q2 + k;
|
|
5963
|
+
p3 = q3 + k;
|
|
5964
|
+
{
|
|
5965
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
5966
|
+
double aa = fabs(a), ab = fabs(b);
|
|
5967
|
+
double m = (aa > ab) ? aa : ab;
|
|
5968
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
5969
|
+
}
|
|
5970
|
+
}
|
|
4127
5971
|
} else {
|
|
4128
5972
|
for (k=0; k<n; k++) {
|
|
4129
5973
|
p1 = q1 + k*i1;
|
|
@@ -4146,8 +5990,8 @@ ca_bincmp_is_equiv_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
4146
5990
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4147
5991
|
double tol)
|
|
4148
5992
|
{
|
|
4149
|
-
|
|
4150
|
-
|
|
5993
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2;
|
|
5994
|
+
ca_u_int64_t *p1 = q1, *p2 = q2;
|
|
4151
5995
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4152
5996
|
boolean8_t *p3 = q3;
|
|
4153
5997
|
ca_size_t k;
|
|
@@ -4169,6 +6013,34 @@ ca_bincmp_is_equiv_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
4169
6013
|
}
|
|
4170
6014
|
}
|
|
4171
6015
|
}
|
|
6016
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
6017
|
+
/* scalar on the right: read it once, so the boolean store
|
|
6018
|
+
cannot be taken to change it and the loop vectorizes */
|
|
6019
|
+
ca_u_int64_t sv = *q2;
|
|
6020
|
+
p2 = &sv;
|
|
6021
|
+
for (k=0; k<n; k++) {
|
|
6022
|
+
p1 = q1 + k;
|
|
6023
|
+
p3 = q3 + k;
|
|
6024
|
+
{
|
|
6025
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
6026
|
+
double aa = fabs(a), ab = fabs(b);
|
|
6027
|
+
double m = (aa > ab) ? aa : ab;
|
|
6028
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
6029
|
+
}
|
|
6030
|
+
}
|
|
6031
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
6032
|
+
ca_u_int64_t sv = *q1;
|
|
6033
|
+
p1 = &sv;
|
|
6034
|
+
for (k=0; k<n; k++) {
|
|
6035
|
+
p2 = q2 + k;
|
|
6036
|
+
p3 = q3 + k;
|
|
6037
|
+
{
|
|
6038
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
6039
|
+
double aa = fabs(a), ab = fabs(b);
|
|
6040
|
+
double m = (aa > ab) ? aa : ab;
|
|
6041
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
6042
|
+
}
|
|
6043
|
+
}
|
|
4172
6044
|
} else {
|
|
4173
6045
|
for (k=0; k<n; k++) {
|
|
4174
6046
|
p1 = q1 + k*i1;
|
|
@@ -4191,8 +6063,8 @@ ca_bincmp_is_equiv_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
4191
6063
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4192
6064
|
double tol)
|
|
4193
6065
|
{
|
|
4194
|
-
|
|
4195
|
-
|
|
6066
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2;
|
|
6067
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2;
|
|
4196
6068
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4197
6069
|
boolean8_t *p3 = q3;
|
|
4198
6070
|
ca_size_t k;
|
|
@@ -4214,6 +6086,34 @@ ca_bincmp_is_equiv_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
4214
6086
|
}
|
|
4215
6087
|
}
|
|
4216
6088
|
}
|
|
6089
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
6090
|
+
/* scalar on the right: read it once, so the boolean store
|
|
6091
|
+
cannot be taken to change it and the loop vectorizes */
|
|
6092
|
+
ca_u_uint64_t sv = *q2;
|
|
6093
|
+
p2 = &sv;
|
|
6094
|
+
for (k=0; k<n; k++) {
|
|
6095
|
+
p1 = q1 + k;
|
|
6096
|
+
p3 = q3 + k;
|
|
6097
|
+
{
|
|
6098
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
6099
|
+
double aa = fabs(a), ab = fabs(b);
|
|
6100
|
+
double m = (aa > ab) ? aa : ab;
|
|
6101
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
6102
|
+
}
|
|
6103
|
+
}
|
|
6104
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
6105
|
+
ca_u_uint64_t sv = *q1;
|
|
6106
|
+
p1 = &sv;
|
|
6107
|
+
for (k=0; k<n; k++) {
|
|
6108
|
+
p2 = q2 + k;
|
|
6109
|
+
p3 = q3 + k;
|
|
6110
|
+
{
|
|
6111
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
6112
|
+
double aa = fabs(a), ab = fabs(b);
|
|
6113
|
+
double m = (aa > ab) ? aa : ab;
|
|
6114
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
6115
|
+
}
|
|
6116
|
+
}
|
|
4217
6117
|
} else {
|
|
4218
6118
|
for (k=0; k<n; k++) {
|
|
4219
6119
|
p1 = q1 + k*i1;
|
|
@@ -4236,8 +6136,8 @@ ca_bincmp_is_equiv_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
4236
6136
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4237
6137
|
double tol)
|
|
4238
6138
|
{
|
|
4239
|
-
|
|
4240
|
-
|
|
6139
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2;
|
|
6140
|
+
ca_u_float32_t *p1 = q1, *p2 = q2;
|
|
4241
6141
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4242
6142
|
boolean8_t *p3 = q3;
|
|
4243
6143
|
ca_size_t k;
|
|
@@ -4252,20 +6152,46 @@ ca_bincmp_is_equiv_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
4252
6152
|
p2 = q2 + k*i2;
|
|
4253
6153
|
p3 = q3 + k*i3;
|
|
4254
6154
|
{
|
|
4255
|
-
|
|
4256
|
-
|
|
6155
|
+
ca_u_float32_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6156
|
+
ca_u_float32_t m = (aa > ab) ? aa : ab;
|
|
4257
6157
|
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4258
6158
|
}
|
|
4259
6159
|
}
|
|
4260
6160
|
}
|
|
6161
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
6162
|
+
/* scalar on the right: read it once, so the boolean store
|
|
6163
|
+
cannot be taken to change it and the loop vectorizes */
|
|
6164
|
+
ca_u_float32_t sv = *q2;
|
|
6165
|
+
p2 = &sv;
|
|
6166
|
+
for (k=0; k<n; k++) {
|
|
6167
|
+
p1 = q1 + k;
|
|
6168
|
+
p3 = q3 + k;
|
|
6169
|
+
{
|
|
6170
|
+
ca_u_float32_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6171
|
+
ca_u_float32_t m = (aa > ab) ? aa : ab;
|
|
6172
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
6173
|
+
}
|
|
6174
|
+
}
|
|
6175
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
6176
|
+
ca_u_float32_t sv = *q1;
|
|
6177
|
+
p1 = &sv;
|
|
6178
|
+
for (k=0; k<n; k++) {
|
|
6179
|
+
p2 = q2 + k;
|
|
6180
|
+
p3 = q3 + k;
|
|
6181
|
+
{
|
|
6182
|
+
ca_u_float32_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6183
|
+
ca_u_float32_t m = (aa > ab) ? aa : ab;
|
|
6184
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
6185
|
+
}
|
|
6186
|
+
}
|
|
4261
6187
|
} else {
|
|
4262
6188
|
for (k=0; k<n; k++) {
|
|
4263
6189
|
p1 = q1 + k*i1;
|
|
4264
6190
|
p2 = q2 + k*i2;
|
|
4265
6191
|
p3 = q3 + k*i3;
|
|
4266
6192
|
{
|
|
4267
|
-
|
|
4268
|
-
|
|
6193
|
+
ca_u_float32_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6194
|
+
ca_u_float32_t m = (aa > ab) ? aa : ab;
|
|
4269
6195
|
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4270
6196
|
}
|
|
4271
6197
|
}
|
|
@@ -4279,8 +6205,8 @@ ca_bincmp_is_equiv_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
4279
6205
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4280
6206
|
double tol)
|
|
4281
6207
|
{
|
|
4282
|
-
|
|
4283
|
-
|
|
6208
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2;
|
|
6209
|
+
ca_u_float64_t *p1 = q1, *p2 = q2;
|
|
4284
6210
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4285
6211
|
boolean8_t *p3 = q3;
|
|
4286
6212
|
ca_size_t k;
|
|
@@ -4295,20 +6221,46 @@ ca_bincmp_is_equiv_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
4295
6221
|
p2 = q2 + k*i2;
|
|
4296
6222
|
p3 = q3 + k*i3;
|
|
4297
6223
|
{
|
|
4298
|
-
|
|
4299
|
-
|
|
6224
|
+
ca_u_float64_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6225
|
+
ca_u_float64_t m = (aa > ab) ? aa : ab;
|
|
4300
6226
|
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4301
6227
|
}
|
|
4302
6228
|
}
|
|
4303
6229
|
}
|
|
6230
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
6231
|
+
/* scalar on the right: read it once, so the boolean store
|
|
6232
|
+
cannot be taken to change it and the loop vectorizes */
|
|
6233
|
+
ca_u_float64_t sv = *q2;
|
|
6234
|
+
p2 = &sv;
|
|
6235
|
+
for (k=0; k<n; k++) {
|
|
6236
|
+
p1 = q1 + k;
|
|
6237
|
+
p3 = q3 + k;
|
|
6238
|
+
{
|
|
6239
|
+
ca_u_float64_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6240
|
+
ca_u_float64_t m = (aa > ab) ? aa : ab;
|
|
6241
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
6242
|
+
}
|
|
6243
|
+
}
|
|
6244
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
6245
|
+
ca_u_float64_t sv = *q1;
|
|
6246
|
+
p1 = &sv;
|
|
6247
|
+
for (k=0; k<n; k++) {
|
|
6248
|
+
p2 = q2 + k;
|
|
6249
|
+
p3 = q3 + k;
|
|
6250
|
+
{
|
|
6251
|
+
ca_u_float64_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6252
|
+
ca_u_float64_t m = (aa > ab) ? aa : ab;
|
|
6253
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
6254
|
+
}
|
|
6255
|
+
}
|
|
4304
6256
|
} else {
|
|
4305
6257
|
for (k=0; k<n; k++) {
|
|
4306
6258
|
p1 = q1 + k*i1;
|
|
4307
6259
|
p2 = q2 + k*i2;
|
|
4308
6260
|
p3 = q3 + k*i3;
|
|
4309
6261
|
{
|
|
4310
|
-
|
|
4311
|
-
|
|
6262
|
+
ca_u_float64_t aa = fabs((*p1)), ab = fabs((*p2));
|
|
6263
|
+
ca_u_float64_t m = (aa > ab) ? aa : ab;
|
|
4312
6264
|
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4313
6265
|
}
|
|
4314
6266
|
}
|
|
@@ -4322,8 +6274,8 @@ ca_bincmp_is_equiv_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
4322
6274
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4323
6275
|
double tol)
|
|
4324
6276
|
{
|
|
4325
|
-
|
|
4326
|
-
|
|
6277
|
+
ca_u_cmplx64_t *q1 = (ca_u_cmplx64_t *) ptr1, *q2 = (ca_u_cmplx64_t *) ptr2;
|
|
6278
|
+
ca_u_cmplx64_t *p1 = q1, *p2 = q2;
|
|
4327
6279
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4328
6280
|
boolean8_t *p3 = q3;
|
|
4329
6281
|
ca_size_t k;
|
|
@@ -4344,6 +6296,32 @@ ca_bincmp_is_equiv_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
4344
6296
|
}
|
|
4345
6297
|
}
|
|
4346
6298
|
}
|
|
6299
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
6300
|
+
/* scalar on the right: read it once, so the boolean store
|
|
6301
|
+
cannot be taken to change it and the loop vectorizes */
|
|
6302
|
+
ca_u_cmplx64_t sv = *q2;
|
|
6303
|
+
p2 = &sv;
|
|
6304
|
+
for (k=0; k<n; k++) {
|
|
6305
|
+
p1 = q1 + k;
|
|
6306
|
+
p3 = q3 + k;
|
|
6307
|
+
{
|
|
6308
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
6309
|
+
double m = (aa > ab) ? aa : ab;
|
|
6310
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
6311
|
+
}
|
|
6312
|
+
}
|
|
6313
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
6314
|
+
ca_u_cmplx64_t sv = *q1;
|
|
6315
|
+
p1 = &sv;
|
|
6316
|
+
for (k=0; k<n; k++) {
|
|
6317
|
+
p2 = q2 + k;
|
|
6318
|
+
p3 = q3 + k;
|
|
6319
|
+
{
|
|
6320
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
6321
|
+
double m = (aa > ab) ? aa : ab;
|
|
6322
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
6323
|
+
}
|
|
6324
|
+
}
|
|
4347
6325
|
} else {
|
|
4348
6326
|
for (k=0; k<n; k++) {
|
|
4349
6327
|
p1 = q1 + k*i1;
|
|
@@ -4365,8 +6343,8 @@ ca_bincmp_is_equiv_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
4365
6343
|
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4366
6344
|
double tol)
|
|
4367
6345
|
{
|
|
4368
|
-
|
|
4369
|
-
|
|
6346
|
+
ca_u_cmplx128_t *q1 = (ca_u_cmplx128_t *) ptr1, *q2 = (ca_u_cmplx128_t *) ptr2;
|
|
6347
|
+
ca_u_cmplx128_t *p1 = q1, *p2 = q2;
|
|
4370
6348
|
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4371
6349
|
boolean8_t *p3 = q3;
|
|
4372
6350
|
ca_size_t k;
|
|
@@ -4387,6 +6365,32 @@ ca_bincmp_is_equiv_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
4387
6365
|
}
|
|
4388
6366
|
}
|
|
4389
6367
|
}
|
|
6368
|
+
} else if ( i3 == 1 && i1 == 1 && i2 == 0 ) {
|
|
6369
|
+
/* scalar on the right: read it once, so the boolean store
|
|
6370
|
+
cannot be taken to change it and the loop vectorizes */
|
|
6371
|
+
ca_u_cmplx128_t sv = *q2;
|
|
6372
|
+
p2 = &sv;
|
|
6373
|
+
for (k=0; k<n; k++) {
|
|
6374
|
+
p1 = q1 + k;
|
|
6375
|
+
p3 = q3 + k;
|
|
6376
|
+
{
|
|
6377
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
6378
|
+
double m = (aa > ab) ? aa : ab;
|
|
6379
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
6380
|
+
}
|
|
6381
|
+
}
|
|
6382
|
+
} else if ( i3 == 1 && i1 == 0 && i2 == 1 ) {
|
|
6383
|
+
ca_u_cmplx128_t sv = *q1;
|
|
6384
|
+
p1 = &sv;
|
|
6385
|
+
for (k=0; k<n; k++) {
|
|
6386
|
+
p2 = q2 + k;
|
|
6387
|
+
p3 = q3 + k;
|
|
6388
|
+
{
|
|
6389
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
6390
|
+
double m = (aa > ab) ? aa : ab;
|
|
6391
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
6392
|
+
}
|
|
6393
|
+
}
|
|
4390
6394
|
} else {
|
|
4391
6395
|
for (k=0; k<n; k++) {
|
|
4392
6396
|
p1 = q1 + k*i1;
|