carray 3.0.6 → 3.0.7
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 +110 -0
- data/README.md +24 -3
- data/carray.gemspec +1 -1
- data/ext/ca_axis_group.c +6 -6
- data/ext/ca_binop_dispatch.c +8 -0
- data/ext/ca_binop_dispatch.h +1 -0
- data/ext/ca_categorical_iterator.c +7 -7
- data/ext/ca_kernel_iterator.h +6 -4
- data/ext/ca_obj_array.c +4 -4
- data/ext/ca_obj_bincmp.c +19 -3
- data/ext/ca_obj_binop.c +36 -11
- data/ext/ca_obj_bitarray.c +2 -4
- data/ext/ca_obj_bitfield.c +86 -4
- data/ext/ca_obj_byte_swap.c +2 -4
- data/ext/ca_obj_const_string.c +422 -257
- data/ext/ca_obj_face.c +71 -33
- data/ext/ca_obj_fake.c +112 -13
- data/ext/ca_obj_farray.c +7 -1
- data/ext/ca_obj_fixlen_string.c +51 -17
- data/ext/ca_obj_grid.c +12 -7
- data/ext/ca_obj_meld.c +5 -5
- data/ext/ca_obj_monop.c +65 -39
- data/ext/ca_obj_object.c +9 -9
- data/ext/ca_obj_reduce.c +2 -4
- data/ext/ca_obj_refer.c +104 -10
- data/ext/ca_obj_repeat.c +1 -1
- data/ext/ca_obj_roll.c +2 -4
- data/ext/ca_obj_select.c +8 -6
- data/ext/ca_obj_select_axis.c +8 -6
- data/ext/ca_obj_stack.c +5 -5
- data/ext/ca_obj_stride.c +46 -8
- data/ext/ca_obj_string.c +2 -2
- data/ext/ca_obj_tile.c +2 -4
- data/ext/ca_obj_triop.c +15 -12
- data/ext/ca_obj_window.c +22 -15
- data/ext/ca_op_ipower.c +63 -15
- data/ext/ca_op_powi.h +6 -29
- data/ext/ca_sort_kernels.h +3 -0
- data/ext/ca_sweep_engine.c +90 -23
- data/ext/ca_sweep_engine.h +5 -6
- data/ext/caframe_csv_reader.c +1 -1
- data/ext/carray.h +3 -1
- data/ext/carray_access.c +98 -39
- data/ext/carray_address_basis.c +98 -24
- data/ext/carray_broadcast.c +2 -2
- data/ext/carray_call_cfunc.c +5 -8
- data/ext/carray_cast.c +311 -37
- data/ext/carray_cast_func.rb +37 -5
- data/ext/carray_conversion.c +56 -2
- data/ext/carray_copy.c +24 -0
- data/ext/carray_core.c +69 -6
- data/ext/carray_count.c +28 -9
- data/ext/carray_element.c +9 -3
- data/ext/carray_factorize.c +11 -11
- data/ext/carray_histogram.c +2 -2
- data/ext/carray_index_classifier.c +7 -5
- data/ext/carray_internal.h +94 -0
- data/ext/carray_kernels_binop.c +55 -55
- data/ext/carray_kernels_init.c +14 -14
- data/ext/carray_kernels_monop.c +90 -140
- data/ext/carray_lazy.c +16 -1
- data/ext/carray_loop.c +9 -2
- data/ext/carray_mask.c +118 -11
- data/ext/carray_median_percentile.c +13 -8
- data/ext/carray_memory_view.c +41 -22
- data/ext/carray_operator.c +72 -11
- data/ext/carray_order.c +52 -9
- data/ext/carray_partition.c +1 -1
- data/ext/carray_random.c +1 -1
- data/ext/carray_round.c +24 -1
- data/ext/carray_scatter.c +4 -0
- data/ext/carray_segment.c +1 -1
- data/ext/carray_slab.c +13 -4
- data/ext/carray_sort.c +6 -3
- data/ext/carray_sort_kernel.c +24 -0
- data/ext/carray_struct.c +21 -6
- data/ext/carray_test.c +85 -39
- data/ext/carray_time_text.c +6 -0
- data/ext/carray_utils.c +124 -54
- data/ext/mk_call_cfunc.rb +6 -11
- data/ext/mkkernel.rb +37 -27
- data/ext/version.h +4 -4
- data/lib/carray/axis_group.rb +9 -6
- data/lib/carray/basics.rb +26 -8
- data/lib/carray/bincount_nd.rb +8 -2
- data/lib/carray/block_iterator.rb +48 -21
- data/lib/carray/categorical.rb +21 -8
- data/lib/carray/categorical_iterator.rb +2 -1
- data/lib/carray/conditional.rb +52 -4
- data/lib/carray/const_string.rb +74 -0
- data/lib/carray/construct.rb +2 -2
- data/lib/carray/core_extensions.rb +19 -68
- data/lib/carray/data_type_extension.rb +1 -0
- data/lib/carray/fixlen_string.rb +83 -1
- data/lib/carray/frame/column_verbs.rb +61 -6
- data/lib/carray/frame/concat.rb +50 -6
- data/lib/carray/frame/csv_parser.rb +13 -4
- data/lib/carray/frame/frame.rb +38 -6
- data/lib/carray/frame/group.rb +67 -40
- data/lib/carray/frame/io.rb +10 -5
- data/lib/carray/frame/join.rb +20 -6
- data/lib/carray/frame/records.rb +6 -4
- data/lib/carray/frame/reshape.rb +25 -5
- data/lib/carray/frame/verbs.rb +78 -25
- data/lib/carray/frame/windows.rb +30 -6
- data/lib/carray/fuse_source.rb +4 -2
- data/lib/carray/iterator.rb +8 -0
- data/lib/carray/key_windows.rb +10 -4
- data/lib/carray/lazy.rb +12 -17
- data/lib/carray/methods/bin.rb +3 -0
- data/lib/carray/methods/composition.rb +1 -1
- data/lib/carray/methods/factorize.rb +2 -0
- data/lib/carray/methods/gather_nd.rb +4 -1
- data/lib/carray/methods/is_in.rb +23 -3
- data/lib/carray/methods/locate_addr.rb +63 -12
- data/lib/carray/methods/repeat.rb +11 -1
- data/lib/carray/record_order.rb +35 -6
- data/lib/carray/runtime.rb +10 -0
- data/lib/carray/segment_iterator.rb +19 -16
- data/lib/carray/serialize.rb +22 -0
- data/lib/carray/slab_iterator.rb +1 -1
- data/lib/carray/stack.rb +3 -3
- data/lib/carray/string.rb +6 -6
- data/lib/carray/string_operation_extension.rb +25 -4
- data/lib/carray/struct_builder.rb +4 -1
- data/lib/carray/time.rb +190 -46
- data/lib/carray/window_iterator.rb +48 -12
- data/yard-stubs/ca_obj_bitfield.rb +4 -1
- data/yard-stubs/ca_obj_refer.rb +3 -0
- data/yard-stubs/ca_obj_window.rb +2 -1
- data/yard-stubs/carray_access.rb +4 -2
- data/yard-stubs/carray_cast.rb +6 -0
- data/yard-stubs/carray_count.rb +6 -3
- data/yard-stubs/carray_math.rb +5 -0
- data/yard-stubs/carray_order.rb +6 -0
- data/yard-stubs/carray_scatter.rb +2 -1
- data/yard-stubs/carray_test.rb +18 -5
- metadata +2 -2
data/ext/carray_kernels_binop.c
CHANGED
|
@@ -21260,7 +21260,7 @@ ca_binop_bit_or_i_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
21260
21260
|
p1 = q1 + k*i1;
|
|
21261
21261
|
p2 = q2 + k*i2;
|
|
21262
21262
|
p3 = q3 + k*i3;
|
|
21263
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21263
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21264
21264
|
}
|
|
21265
21265
|
}
|
|
21266
21266
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -21284,7 +21284,7 @@ ca_binop_bit_or_i_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
21284
21284
|
#pragma omp simd
|
|
21285
21285
|
for (k=0; k<n; k++) {
|
|
21286
21286
|
p1 = r1 + k; p2 = r2 + k; p3 = r3 + k;
|
|
21287
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21287
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21288
21288
|
}
|
|
21289
21289
|
}
|
|
21290
21290
|
else if ( ( apart1 || a1 == a3 ) && ( apart2 || a2 == a3 ) ) {
|
|
@@ -21292,13 +21292,13 @@ ca_binop_bit_or_i_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
21292
21292
|
#pragma omp simd
|
|
21293
21293
|
for (k=0; k<n; k++) {
|
|
21294
21294
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
21295
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21295
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21296
21296
|
}
|
|
21297
21297
|
}
|
|
21298
21298
|
else {
|
|
21299
21299
|
for (k=0; k<n; k++) {
|
|
21300
21300
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
21301
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21301
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21302
21302
|
}
|
|
21303
21303
|
}
|
|
21304
21304
|
} else if ( i3 == 1 && ( ( i1 == 1 && i2 == 0 ) || ( i1 == 0 && i2 == 1 ) ) ) {
|
|
@@ -21319,20 +21319,20 @@ ca_binop_bit_or_i_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
21319
21319
|
#pragma omp simd
|
|
21320
21320
|
for (k=0; k<n; k++) {
|
|
21321
21321
|
p2 = ra + k; p3 = r3 + k;
|
|
21322
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21322
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21323
21323
|
}
|
|
21324
21324
|
}
|
|
21325
21325
|
else if ( aa == a3 ) {
|
|
21326
21326
|
#pragma omp simd
|
|
21327
21327
|
for (k=0; k<n; k++) {
|
|
21328
21328
|
p2 = qa + k; p3 = q3 + k;
|
|
21329
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21329
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21330
21330
|
}
|
|
21331
21331
|
}
|
|
21332
21332
|
else {
|
|
21333
21333
|
for (k=0; k<n; k++) {
|
|
21334
21334
|
p2 = qa + k; p3 = q3 + k;
|
|
21335
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21335
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21336
21336
|
}
|
|
21337
21337
|
}
|
|
21338
21338
|
}
|
|
@@ -21344,20 +21344,20 @@ ca_binop_bit_or_i_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
21344
21344
|
#pragma omp simd
|
|
21345
21345
|
for (k=0; k<n; k++) {
|
|
21346
21346
|
p1 = ra + k; p3 = r3 + k;
|
|
21347
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21347
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21348
21348
|
}
|
|
21349
21349
|
}
|
|
21350
21350
|
else if ( aa == a3 ) {
|
|
21351
21351
|
#pragma omp simd
|
|
21352
21352
|
for (k=0; k<n; k++) {
|
|
21353
21353
|
p1 = qa + k; p3 = q3 + k;
|
|
21354
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21354
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21355
21355
|
}
|
|
21356
21356
|
}
|
|
21357
21357
|
else {
|
|
21358
21358
|
for (k=0; k<n; k++) {
|
|
21359
21359
|
p1 = qa + k; p3 = q3 + k;
|
|
21360
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21360
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21361
21361
|
}
|
|
21362
21362
|
}
|
|
21363
21363
|
}
|
|
@@ -21365,7 +21365,7 @@ ca_binop_bit_or_i_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
|
21365
21365
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
21366
21366
|
boolean8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
21367
21367
|
for (k=0; k<n; k++) {
|
|
21368
|
-
{ (*p3) = (*p1) | (*p2); }
|
|
21368
|
+
{ (*p3) = ((*p1) | (*p2)) ? 1 : 0; }
|
|
21369
21369
|
p1 += i1; p2 += i2; p3 += i3;
|
|
21370
21370
|
}
|
|
21371
21371
|
}
|
|
@@ -28098,7 +28098,7 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
28098
28098
|
p1 = q1 + k*i1;
|
|
28099
28099
|
p2 = q2 + k*i2;
|
|
28100
28100
|
p3 = q3 + k*i3;
|
|
28101
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28101
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28102
28102
|
}
|
|
28103
28103
|
}
|
|
28104
28104
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -28122,7 +28122,7 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
28122
28122
|
#pragma omp simd
|
|
28123
28123
|
for (k=0; k<n; k++) {
|
|
28124
28124
|
p1 = r1 + k; p2 = r2 + k; p3 = r3 + k;
|
|
28125
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28125
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28126
28126
|
}
|
|
28127
28127
|
}
|
|
28128
28128
|
else if ( ( apart1 || a1 == a3 ) && ( apart2 || a2 == a3 ) ) {
|
|
@@ -28130,13 +28130,13 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
28130
28130
|
#pragma omp simd
|
|
28131
28131
|
for (k=0; k<n; k++) {
|
|
28132
28132
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28133
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28133
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28134
28134
|
}
|
|
28135
28135
|
}
|
|
28136
28136
|
else {
|
|
28137
28137
|
for (k=0; k<n; k++) {
|
|
28138
28138
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28139
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28139
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28140
28140
|
}
|
|
28141
28141
|
}
|
|
28142
28142
|
} else if ( i3 == 1 && ( ( i1 == 1 && i2 == 0 ) || ( i1 == 0 && i2 == 1 ) ) ) {
|
|
@@ -28157,20 +28157,20 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
28157
28157
|
#pragma omp simd
|
|
28158
28158
|
for (k=0; k<n; k++) {
|
|
28159
28159
|
p2 = ra + k; p3 = r3 + k;
|
|
28160
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28160
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28161
28161
|
}
|
|
28162
28162
|
}
|
|
28163
28163
|
else if ( aa == a3 ) {
|
|
28164
28164
|
#pragma omp simd
|
|
28165
28165
|
for (k=0; k<n; k++) {
|
|
28166
28166
|
p2 = qa + k; p3 = q3 + k;
|
|
28167
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28167
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28168
28168
|
}
|
|
28169
28169
|
}
|
|
28170
28170
|
else {
|
|
28171
28171
|
for (k=0; k<n; k++) {
|
|
28172
28172
|
p2 = qa + k; p3 = q3 + k;
|
|
28173
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28173
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28174
28174
|
}
|
|
28175
28175
|
}
|
|
28176
28176
|
}
|
|
@@ -28182,20 +28182,20 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
28182
28182
|
#pragma omp simd
|
|
28183
28183
|
for (k=0; k<n; k++) {
|
|
28184
28184
|
p1 = ra + k; p3 = r3 + k;
|
|
28185
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28185
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28186
28186
|
}
|
|
28187
28187
|
}
|
|
28188
28188
|
else if ( aa == a3 ) {
|
|
28189
28189
|
#pragma omp simd
|
|
28190
28190
|
for (k=0; k<n; k++) {
|
|
28191
28191
|
p1 = qa + k; p3 = q3 + k;
|
|
28192
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28192
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28193
28193
|
}
|
|
28194
28194
|
}
|
|
28195
28195
|
else {
|
|
28196
28196
|
for (k=0; k<n; k++) {
|
|
28197
28197
|
p1 = qa + k; p3 = q3 + k;
|
|
28198
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28198
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28199
28199
|
}
|
|
28200
28200
|
}
|
|
28201
28201
|
}
|
|
@@ -28203,7 +28203,7 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
28203
28203
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
28204
28204
|
ca_u_float32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
28205
28205
|
for (k=0; k<n; k++) {
|
|
28206
|
-
{ (*p3) = powf((*p1), (*p2)); }
|
|
28206
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : powf((*p1), (*p2)); }
|
|
28207
28207
|
p1 += i1; p2 += i2; p3 += i3;
|
|
28208
28208
|
}
|
|
28209
28209
|
}
|
|
@@ -28228,7 +28228,7 @@ ca_binop_power_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
28228
28228
|
p1 = q1 + k*i1;
|
|
28229
28229
|
p2 = q2 + k*i2;
|
|
28230
28230
|
p3 = q3 + k*i3;
|
|
28231
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28231
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28232
28232
|
}
|
|
28233
28233
|
}
|
|
28234
28234
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -28252,7 +28252,7 @@ ca_binop_power_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
28252
28252
|
#pragma omp simd
|
|
28253
28253
|
for (k=0; k<n; k++) {
|
|
28254
28254
|
p1 = r1 + k; p2 = r2 + k; p3 = r3 + k;
|
|
28255
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28255
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28256
28256
|
}
|
|
28257
28257
|
}
|
|
28258
28258
|
else if ( ( apart1 || a1 == a3 ) && ( apart2 || a2 == a3 ) ) {
|
|
@@ -28260,13 +28260,13 @@ ca_binop_power_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
28260
28260
|
#pragma omp simd
|
|
28261
28261
|
for (k=0; k<n; k++) {
|
|
28262
28262
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28263
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28263
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28264
28264
|
}
|
|
28265
28265
|
}
|
|
28266
28266
|
else {
|
|
28267
28267
|
for (k=0; k<n; k++) {
|
|
28268
28268
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28269
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28269
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28270
28270
|
}
|
|
28271
28271
|
}
|
|
28272
28272
|
} else if ( i3 == 1 && ( ( i1 == 1 && i2 == 0 ) || ( i1 == 0 && i2 == 1 ) ) ) {
|
|
@@ -28287,20 +28287,20 @@ ca_binop_power_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
28287
28287
|
#pragma omp simd
|
|
28288
28288
|
for (k=0; k<n; k++) {
|
|
28289
28289
|
p2 = ra + k; p3 = r3 + k;
|
|
28290
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28290
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28291
28291
|
}
|
|
28292
28292
|
}
|
|
28293
28293
|
else if ( aa == a3 ) {
|
|
28294
28294
|
#pragma omp simd
|
|
28295
28295
|
for (k=0; k<n; k++) {
|
|
28296
28296
|
p2 = qa + k; p3 = q3 + k;
|
|
28297
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28297
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28298
28298
|
}
|
|
28299
28299
|
}
|
|
28300
28300
|
else {
|
|
28301
28301
|
for (k=0; k<n; k++) {
|
|
28302
28302
|
p2 = qa + k; p3 = q3 + k;
|
|
28303
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28303
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28304
28304
|
}
|
|
28305
28305
|
}
|
|
28306
28306
|
}
|
|
@@ -28312,20 +28312,20 @@ ca_binop_power_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
28312
28312
|
#pragma omp simd
|
|
28313
28313
|
for (k=0; k<n; k++) {
|
|
28314
28314
|
p1 = ra + k; p3 = r3 + k;
|
|
28315
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28315
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28316
28316
|
}
|
|
28317
28317
|
}
|
|
28318
28318
|
else if ( aa == a3 ) {
|
|
28319
28319
|
#pragma omp simd
|
|
28320
28320
|
for (k=0; k<n; k++) {
|
|
28321
28321
|
p1 = qa + k; p3 = q3 + k;
|
|
28322
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28322
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28323
28323
|
}
|
|
28324
28324
|
}
|
|
28325
28325
|
else {
|
|
28326
28326
|
for (k=0; k<n; k++) {
|
|
28327
28327
|
p1 = qa + k; p3 = q3 + k;
|
|
28328
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28328
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28329
28329
|
}
|
|
28330
28330
|
}
|
|
28331
28331
|
}
|
|
@@ -28333,7 +28333,7 @@ ca_binop_power_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
28333
28333
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
28334
28334
|
ca_u_float64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
28335
28335
|
for (k=0; k<n; k++) {
|
|
28336
|
-
{ (*p3) = pow((*p1), (*p2)); }
|
|
28336
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : pow((*p1), (*p2)); }
|
|
28337
28337
|
p1 += i1; p2 += i2; p3 += i3;
|
|
28338
28338
|
}
|
|
28339
28339
|
}
|
|
@@ -28358,7 +28358,7 @@ ca_binop_power_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
28358
28358
|
p1 = q1 + k*i1;
|
|
28359
28359
|
p2 = q2 + k*i2;
|
|
28360
28360
|
p3 = q3 + k*i3;
|
|
28361
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28361
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28362
28362
|
}
|
|
28363
28363
|
}
|
|
28364
28364
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -28382,7 +28382,7 @@ ca_binop_power_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
28382
28382
|
#pragma omp simd
|
|
28383
28383
|
for (k=0; k<n; k++) {
|
|
28384
28384
|
p1 = r1 + k; p2 = r2 + k; p3 = r3 + k;
|
|
28385
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28385
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28386
28386
|
}
|
|
28387
28387
|
}
|
|
28388
28388
|
else if ( ( apart1 || a1 == a3 ) && ( apart2 || a2 == a3 ) ) {
|
|
@@ -28390,13 +28390,13 @@ ca_binop_power_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
28390
28390
|
#pragma omp simd
|
|
28391
28391
|
for (k=0; k<n; k++) {
|
|
28392
28392
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28393
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28393
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28394
28394
|
}
|
|
28395
28395
|
}
|
|
28396
28396
|
else {
|
|
28397
28397
|
for (k=0; k<n; k++) {
|
|
28398
28398
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28399
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28399
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28400
28400
|
}
|
|
28401
28401
|
}
|
|
28402
28402
|
} else if ( i3 == 1 && ( ( i1 == 1 && i2 == 0 ) || ( i1 == 0 && i2 == 1 ) ) ) {
|
|
@@ -28417,20 +28417,20 @@ ca_binop_power_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
28417
28417
|
#pragma omp simd
|
|
28418
28418
|
for (k=0; k<n; k++) {
|
|
28419
28419
|
p2 = ra + k; p3 = r3 + k;
|
|
28420
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28420
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28421
28421
|
}
|
|
28422
28422
|
}
|
|
28423
28423
|
else if ( aa == a3 ) {
|
|
28424
28424
|
#pragma omp simd
|
|
28425
28425
|
for (k=0; k<n; k++) {
|
|
28426
28426
|
p2 = qa + k; p3 = q3 + k;
|
|
28427
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28427
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28428
28428
|
}
|
|
28429
28429
|
}
|
|
28430
28430
|
else {
|
|
28431
28431
|
for (k=0; k<n; k++) {
|
|
28432
28432
|
p2 = qa + k; p3 = q3 + k;
|
|
28433
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28433
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28434
28434
|
}
|
|
28435
28435
|
}
|
|
28436
28436
|
}
|
|
@@ -28442,20 +28442,20 @@ ca_binop_power_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
28442
28442
|
#pragma omp simd
|
|
28443
28443
|
for (k=0; k<n; k++) {
|
|
28444
28444
|
p1 = ra + k; p3 = r3 + k;
|
|
28445
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28445
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28446
28446
|
}
|
|
28447
28447
|
}
|
|
28448
28448
|
else if ( aa == a3 ) {
|
|
28449
28449
|
#pragma omp simd
|
|
28450
28450
|
for (k=0; k<n; k++) {
|
|
28451
28451
|
p1 = qa + k; p3 = q3 + k;
|
|
28452
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28452
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28453
28453
|
}
|
|
28454
28454
|
}
|
|
28455
28455
|
else {
|
|
28456
28456
|
for (k=0; k<n; k++) {
|
|
28457
28457
|
p1 = qa + k; p3 = q3 + k;
|
|
28458
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28458
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28459
28459
|
}
|
|
28460
28460
|
}
|
|
28461
28461
|
}
|
|
@@ -28463,7 +28463,7 @@ ca_binop_power_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
28463
28463
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
28464
28464
|
ca_u_cmplx64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
28465
28465
|
for (k=0; k<n; k++) {
|
|
28466
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28466
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28467
28467
|
p1 += i1; p2 += i2; p3 += i3;
|
|
28468
28468
|
}
|
|
28469
28469
|
}
|
|
@@ -28488,7 +28488,7 @@ ca_binop_power_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
28488
28488
|
p1 = q1 + k*i1;
|
|
28489
28489
|
p2 = q2 + k*i2;
|
|
28490
28490
|
p3 = q3 + k*i3;
|
|
28491
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28491
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28492
28492
|
}
|
|
28493
28493
|
}
|
|
28494
28494
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -28512,7 +28512,7 @@ ca_binop_power_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
28512
28512
|
#pragma omp simd
|
|
28513
28513
|
for (k=0; k<n; k++) {
|
|
28514
28514
|
p1 = r1 + k; p2 = r2 + k; p3 = r3 + k;
|
|
28515
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28515
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28516
28516
|
}
|
|
28517
28517
|
}
|
|
28518
28518
|
else if ( ( apart1 || a1 == a3 ) && ( apart2 || a2 == a3 ) ) {
|
|
@@ -28520,13 +28520,13 @@ ca_binop_power_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
28520
28520
|
#pragma omp simd
|
|
28521
28521
|
for (k=0; k<n; k++) {
|
|
28522
28522
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28523
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28523
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28524
28524
|
}
|
|
28525
28525
|
}
|
|
28526
28526
|
else {
|
|
28527
28527
|
for (k=0; k<n; k++) {
|
|
28528
28528
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
28529
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28529
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28530
28530
|
}
|
|
28531
28531
|
}
|
|
28532
28532
|
} else if ( i3 == 1 && ( ( i1 == 1 && i2 == 0 ) || ( i1 == 0 && i2 == 1 ) ) ) {
|
|
@@ -28547,20 +28547,20 @@ ca_binop_power_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
28547
28547
|
#pragma omp simd
|
|
28548
28548
|
for (k=0; k<n; k++) {
|
|
28549
28549
|
p2 = ra + k; p3 = r3 + k;
|
|
28550
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28550
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28551
28551
|
}
|
|
28552
28552
|
}
|
|
28553
28553
|
else if ( aa == a3 ) {
|
|
28554
28554
|
#pragma omp simd
|
|
28555
28555
|
for (k=0; k<n; k++) {
|
|
28556
28556
|
p2 = qa + k; p3 = q3 + k;
|
|
28557
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28557
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28558
28558
|
}
|
|
28559
28559
|
}
|
|
28560
28560
|
else {
|
|
28561
28561
|
for (k=0; k<n; k++) {
|
|
28562
28562
|
p2 = qa + k; p3 = q3 + k;
|
|
28563
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28563
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28564
28564
|
}
|
|
28565
28565
|
}
|
|
28566
28566
|
}
|
|
@@ -28572,20 +28572,20 @@ ca_binop_power_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
28572
28572
|
#pragma omp simd
|
|
28573
28573
|
for (k=0; k<n; k++) {
|
|
28574
28574
|
p1 = ra + k; p3 = r3 + k;
|
|
28575
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28575
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28576
28576
|
}
|
|
28577
28577
|
}
|
|
28578
28578
|
else if ( aa == a3 ) {
|
|
28579
28579
|
#pragma omp simd
|
|
28580
28580
|
for (k=0; k<n; k++) {
|
|
28581
28581
|
p1 = qa + k; p3 = q3 + k;
|
|
28582
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28582
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28583
28583
|
}
|
|
28584
28584
|
}
|
|
28585
28585
|
else {
|
|
28586
28586
|
for (k=0; k<n; k++) {
|
|
28587
28587
|
p1 = qa + k; p3 = q3 + k;
|
|
28588
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28588
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28589
28589
|
}
|
|
28590
28590
|
}
|
|
28591
28591
|
}
|
|
@@ -28593,7 +28593,7 @@ ca_binop_power_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
28593
28593
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
28594
28594
|
ca_u_cmplx128_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
28595
28595
|
for (k=0; k<n; k++) {
|
|
28596
|
-
{ (*p3) = cpow((*p1), (*p2)); }
|
|
28596
|
+
{ (*p3) = (*p2) == 2 ? (*p1) * (*p1) : (*p2) == 3 ? (*p1) * (*p1) * (*p1) : (*p2) == 4 ? ((*p1) * (*p1)) * ((*p1) * (*p1)) : (*p2) == 1 ? (*p1) : (*p2) == 0 ? 1 : (*p2) == -1 ? 1 / (*p1) : (*p2) == -2 ? 1 / ((*p1) * (*p1)) : cpow((*p1), (*p2)); }
|
|
28597
28597
|
p1 += i1; p2 += i2; p3 += i3;
|
|
28598
28598
|
}
|
|
28599
28599
|
}
|
data/ext/carray_kernels_init.c
CHANGED
|
@@ -28,13 +28,13 @@ typedef struct {
|
|
|
28
28
|
|
|
29
29
|
static const ca_kernel_body_t ca_kernel_bodies[] = {
|
|
30
30
|
{ "binop", "ipow", "float32",
|
|
31
|
-
"(#3) =
|
|
31
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : powf((#1), (float)(double)(#2));" },
|
|
32
32
|
{ "binop", "ipow", "float64",
|
|
33
|
-
"(#3) =
|
|
33
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : pow((#1), (double)(#2));" },
|
|
34
34
|
{ "binop", "ipow", "cmplx64",
|
|
35
|
-
"(#3) =
|
|
35
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : cpow((#1), (float)(double)(#2));" },
|
|
36
36
|
{ "binop", "ipow", "cmplx128",
|
|
37
|
-
"(#3) =
|
|
37
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : cpow((#1), (double)(#2));" },
|
|
38
38
|
{ "monop", "cast_int8", "boolean",
|
|
39
39
|
"(#2) = (int8_t)(#1);" },
|
|
40
40
|
{ "monop", "cast_uint8", "boolean",
|
|
@@ -878,17 +878,17 @@ static const ca_kernel_body_t ca_kernel_bodies[] = {
|
|
|
878
878
|
{ "monop", "square", "cmplx128",
|
|
879
879
|
"(#2) = (#1) * (#1);" },
|
|
880
880
|
{ "monop", "deg_360", "float32",
|
|
881
|
-
"{\n double
|
|
881
|
+
"{\n double _fa = (double)(#1) / 360.0;\n (#2) = (_fa - floor(_fa)) * 360.0;\n if ( (#2) >= 360.0 ) (#2) = 0.0; /* a tiny negative rounds to the top */\n}\n" },
|
|
882
882
|
{ "monop", "deg_360", "float64",
|
|
883
|
-
"{\n double
|
|
883
|
+
"{\n double _fa = (double)(#1) / 360.0;\n (#2) = (_fa - floor(_fa)) * 360.0;\n if ( (#2) >= 360.0 ) (#2) = 0.0; /* a tiny negative rounds to the top */\n}\n" },
|
|
884
884
|
{ "monop", "deg_180", "float32",
|
|
885
885
|
"{\n double _a = (double)(#1);\n double _fa = (_a + 180.0) / 360.0;\n double _b = (_a >= 0)\n ? (_fa - floor(_fa)) * 360.0 - 180.0\n : (_fa - ceil(_fa)) * 360.0 - 180.0;\n if (_b <= -180.0) _b += 360.0;\n (#2) = _b;\n}\n" },
|
|
886
886
|
{ "monop", "deg_180", "float64",
|
|
887
887
|
"{\n double _a = (double)(#1);\n double _fa = (_a + 180.0) / 360.0;\n double _b = (_a >= 0)\n ? (_fa - floor(_fa)) * 360.0 - 180.0\n : (_fa - ceil(_fa)) * 360.0 - 180.0;\n if (_b <= -180.0) _b += 360.0;\n (#2) = _b;\n}\n" },
|
|
888
888
|
{ "monop", "rad_2pi", "float32",
|
|
889
|
-
"{\n double _two_pi = 2.0 * M_PI;\n double
|
|
889
|
+
"{\n double _two_pi = 2.0 * M_PI;\n double _fa = (double)(#1) / _two_pi;\n (#2) = (_fa - floor(_fa)) * _two_pi;\n if ( (#2) >= _two_pi ) (#2) = 0.0; /* a tiny negative rounds to the top */\n}\n" },
|
|
890
890
|
{ "monop", "rad_2pi", "float64",
|
|
891
|
-
"{\n double _two_pi = 2.0 * M_PI;\n double
|
|
891
|
+
"{\n double _two_pi = 2.0 * M_PI;\n double _fa = (double)(#1) / _two_pi;\n (#2) = (_fa - floor(_fa)) * _two_pi;\n if ( (#2) >= _two_pi ) (#2) = 0.0; /* a tiny negative rounds to the top */\n}\n" },
|
|
892
892
|
{ "monop", "rad_pi", "float32",
|
|
893
893
|
"{\n double _two_pi = 2.0 * M_PI;\n double _a = (double)(#1);\n double _fa = (_a + M_PI) / _two_pi;\n double _b = (_a >= 0)\n ? (_fa - floor(_fa)) * _two_pi - M_PI\n : (_fa - ceil(_fa)) * _two_pi - M_PI;\n if (_b <= -M_PI) _b += _two_pi;\n (#2) = _b;\n}\n" },
|
|
894
894
|
{ "monop", "rad_pi", "float64",
|
|
@@ -1168,7 +1168,7 @@ static const ca_kernel_body_t ca_kernel_bodies[] = {
|
|
|
1168
1168
|
{ "binop", "bit_or_i", "uint64",
|
|
1169
1169
|
"(#3) = (#1) | (#2);" },
|
|
1170
1170
|
{ "binop", "bit_or_i", "boolean",
|
|
1171
|
-
"(#3) = (#1) | (#2);" },
|
|
1171
|
+
"(#3) = ((#1) | (#2)) ? 1 : 0;" },
|
|
1172
1172
|
{ "binop", "bit_xor_i", "int8",
|
|
1173
1173
|
"(#3) = (#1) ^ (#2);" },
|
|
1174
1174
|
{ "binop", "bit_xor_i", "uint8",
|
|
@@ -1336,13 +1336,13 @@ static const ca_kernel_body_t ca_kernel_bodies[] = {
|
|
|
1336
1336
|
{ "binop", "power", "uint64",
|
|
1337
1337
|
"(#3) = op_powi_<type>((#1), (#2));" },
|
|
1338
1338
|
{ "binop", "power", "float32",
|
|
1339
|
-
"(#3) = powf((#1), (#2));" },
|
|
1339
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : powf((#1), (#2));" },
|
|
1340
1340
|
{ "binop", "power", "float64",
|
|
1341
|
-
"(#3) = pow((#1), (#2));" },
|
|
1341
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : pow((#1), (#2));" },
|
|
1342
1342
|
{ "binop", "power", "cmplx64",
|
|
1343
|
-
"(#3) = cpow((#1), (#2));" },
|
|
1343
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : cpow((#1), (#2));" },
|
|
1344
1344
|
{ "binop", "power", "cmplx128",
|
|
1345
|
-
"(#3) = cpow((#1), (#2));" },
|
|
1345
|
+
"(#3) = (#2) == 2 ? (#1) * (#1) : (#2) == 3 ? (#1) * (#1) * (#1) : (#2) == 4 ? ((#1) * (#1)) * ((#1) * (#1)) : (#2) == 1 ? (#1) : (#2) == 0 ? 1 : (#2) == -1 ? 1 / (#1) : (#2) == -2 ? 1 / ((#1) * (#1)) : cpow((#1), (#2));" },
|
|
1346
1346
|
{ "binop", "copysign", "float32",
|
|
1347
1347
|
"(#3) = copysignf((#1), (#2));" },
|
|
1348
1348
|
{ "binop", "copysign", "float64",
|
|
@@ -1703,7 +1703,7 @@ rb_ca_s_kernel_body (VALUE klass, VALUE rkind, VALUE rname, VALUE rtype)
|
|
|
1703
1703
|
/* CArray.__kernel_helpers__ -> String: the C a body above may call
|
|
1704
1704
|
beyond the standard library, for the caller to put ahead of it. */
|
|
1705
1705
|
static const char ca_kernel_helpers[] =
|
|
1706
|
-
"\n/* x raised to a non-negative power, by binary exponentiation. The power\n is unsigned so that the magnitude of INT64_MIN is representable. */\n#define op_powi_magnitude(type) \\\nstatic inline type \\\nop_powi_mag_## type (type x, uint64_t p) \\\n{ \\\n type r=1; \\\n\\\n switch(p) { \\\n case 2: return x*x; \\\n case 3: return x*x*x; \\\n case 0: return 1; \\\n case 1: return x; \\\n } \\\n while (p) { \\\n if ( p & 1 ) r *= x; \\\n x *= x; \\\n p >>= 1; \\\n } \\\n return r; \\\n}\n\n/* An integer to a negative power is 1/x^|p| in integer division, which is\n decided by x alone: 0 has no reciprocal, 1 and -1 keep their magnitude,\n anything larger truncates to 0. Answering it that way, rather than by\n computing x^|p|, keeps a power that overflows -- 2 ** -64 -- from wrapping\n to a zero divisor. */\n#define op_powi(type) \\\nop_powi_magnitude(type) \\\nstatic inline type \\\nop_powi_## type (type x, int64_t p) \\\n{ \\\n if ( p < 0 ) { \\\n if ( x == 0 ) ca_zerodiv(); \\\n if ( x == 1 ) return 1; \\\n if ( x == (type) -1 ) return ( p % 2 ) ? x : 1; \\\n return 0; \\\n } \\\n return op_powi_mag_## type(x, (uint64_t) p); \\\n}\n\n/* An unsigned x is never -1; (type) -1 is its largest value. */\n#define op_powi_u(type) \\\nop_powi_magnitude(type) \\\nstatic inline type \\\nop_powi_## type (type x, int64_t p) \\\n{ \\\n if ( p < 0 ) { \\\n if ( x == 0 ) ca_zerodiv(); \\\n return ( x == 1 ) ? 1 : 0; \\\n } \\\n return op_powi_mag_## type(x, (uint64_t) p); \\\n}\n\
|
|
1706
|
+
"\n/* x raised to a non-negative power, by binary exponentiation. The power\n is unsigned so that the magnitude of INT64_MIN is representable. */\n#define op_powi_magnitude(type) \\\nstatic inline type \\\nop_powi_mag_## type (type x, uint64_t p) \\\n{ \\\n type r=1; \\\n\\\n switch(p) { \\\n case 2: return x*x; \\\n case 3: return x*x*x; \\\n case 0: return 1; \\\n case 1: return x; \\\n } \\\n while (p) { \\\n if ( p & 1 ) r *= x; \\\n x *= x; \\\n p >>= 1; \\\n } \\\n return r; \\\n}\n\n/* An integer to a negative power is 1/x^|p| in integer division, which is\n decided by x alone: 0 has no reciprocal, 1 and -1 keep their magnitude,\n anything larger truncates to 0. Answering it that way, rather than by\n computing x^|p|, keeps a power that overflows -- 2 ** -64 -- from wrapping\n to a zero divisor. */\n#define op_powi(type) \\\nop_powi_magnitude(type) \\\nstatic inline type \\\nop_powi_## type (type x, int64_t p) \\\n{ \\\n if ( p < 0 ) { \\\n if ( x == 0 ) ca_zerodiv(); \\\n if ( x == 1 ) return 1; \\\n if ( x == (type) -1 ) return ( p % 2 ) ? x : 1; \\\n return 0; \\\n } \\\n return op_powi_mag_## type(x, (uint64_t) p); \\\n}\n\n/* An unsigned x is never -1; (type) -1 is its largest value. */\n#define op_powi_u(type) \\\nop_powi_magnitude(type) \\\nstatic inline type \\\nop_powi_## type (type x, int64_t p) \\\n{ \\\n if ( p < 0 ) { \\\n if ( x == 0 ) ca_zerodiv(); \\\n return ( x == 1 ) ? 1 : 0; \\\n } \\\n return op_powi_mag_## type(x, (uint64_t) p); \\\n}\n\nop_powi(int8_t)\nop_powi_u(uint8_t)\nop_powi(int16_t)\nop_powi_u(uint16_t)\nop_powi(int32_t)\nop_powi_u(uint32_t)\nop_powi(int64_t)\nop_powi_u(uint64_t)\n\n";
|
|
1707
1707
|
|
|
1708
1708
|
static VALUE
|
|
1709
1709
|
rb_ca_s_kernel_helpers (VALUE klass)
|