carray 3.0.0 → 3.0.1
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/.yardopts +2 -1
- data/CHANGELOG.md +325 -3
- data/{NEWS.md → CHANGELOG.v1.md} +1 -1
- data/README.md +32 -32
- data/carray.gemspec +12 -8
- data/ext/ca_axis_group.c +55 -19
- data/ext/ca_binop_dispatch.c +5 -6
- data/ext/ca_binop_dispatch.h +0 -7
- data/ext/ca_categorical_iterator.c +13 -13
- data/ext/ca_for_each_element.h +6 -8
- data/ext/ca_group_iter.c +1 -1
- data/ext/ca_kernel_iterator.c +69 -23
- data/ext/ca_kernel_iterator.h +3 -10
- data/ext/ca_obj_bincmp.c +57 -27
- data/ext/ca_obj_binop.c +86 -30
- data/ext/ca_obj_const_string.c +3 -1
- data/ext/ca_obj_face.c +80 -0
- data/ext/ca_obj_face.h +33 -1
- data/ext/ca_obj_fake.c +11 -0
- data/ext/ca_obj_fixlen_string.c +3 -1
- data/ext/ca_obj_grid.c +11 -3
- data/ext/ca_obj_meld.c +13 -8
- data/ext/ca_obj_moncmp.c +33 -14
- data/ext/ca_obj_monop.c +19 -7
- data/ext/ca_obj_object.c +99 -4
- data/ext/ca_obj_record.c +3 -1
- data/ext/ca_obj_refer.c +30 -6
- data/ext/ca_obj_roll.c +13 -5
- data/ext/ca_obj_select_axis.c +16 -6
- data/ext/ca_obj_shift.c +3 -3
- data/ext/ca_obj_stride.c +106 -23
- data/ext/ca_obj_string.c +3 -1
- data/ext/ca_obj_tile.c +13 -5
- data/ext/ca_obj_time.c +3 -1
- data/ext/ca_obj_timedelta.c +3 -1
- data/ext/ca_obj_transpose.c +1 -1
- data/ext/ca_obj_triop.c +62 -23
- data/ext/ca_obj_window.c +86 -17
- data/ext/ca_op_cmplx64.h +123 -0
- data/ext/ca_op_ipower.c +0 -3
- data/ext/ca_sort_kernels.h +5 -5
- data/ext/ca_sweep_engine.c +78 -35
- data/ext/ca_sweep_engine.h +13 -4
- data/ext/ca_transform_common.c +7 -0
- data/ext/carray.h +127 -130
- data/ext/carray_access.c +56 -34
- data/ext/carray_bincount.c +8 -8
- data/ext/carray_broadcast.c +99 -6
- data/ext/carray_build_flags.h +3 -0
- data/ext/carray_call_cfunc.c +1491 -0
- data/ext/carray_call_cfunc.h +153 -0
- data/ext/carray_cast.c +69 -31
- data/ext/carray_conversion.c +22 -22
- data/ext/carray_copy.c +12 -2
- data/ext/carray_core.c +57 -10
- data/ext/carray_count.c +1 -1
- data/ext/carray_element.c +7 -7
- data/ext/carray_factorize.c +28 -28
- data/ext/carray_hold.c +1 -1
- data/ext/carray_index_classifier.c +7 -21
- data/ext/carray_internal.h +19 -3
- data/ext/carray_kernels_bincmp.c +1 -0
- data/ext/carray_kernels_binop.c +320 -298
- data/ext/carray_kernels_init.c +1095 -0
- data/ext/carray_kernels_map.c +1 -0
- data/ext/carray_kernels_moncmp.c +1 -0
- data/ext/carray_kernels_monop.c +412 -411
- data/ext/carray_kernels_reduce_aggregate.c +88 -87
- data/ext/carray_kernels_reduce_boolean.c +1 -0
- data/ext/carray_kernels_reduce_cumulative.c +54 -53
- data/ext/carray_kernels_reduce_extreme.c +51 -50
- data/ext/carray_kernels_reduce_variance.c +1 -0
- data/ext/carray_kernels_scan.c +1 -0
- data/ext/carray_kernels_search.c +93 -92
- data/ext/carray_kernels_sort.c +1 -0
- data/ext/carray_kernels_triop.c +1 -0
- data/ext/carray_lazy.c +175 -5
- data/ext/carray_mask.c +6 -5
- data/ext/carray_median_percentile.c +1 -1
- data/ext/carray_memory_view.c +46 -21
- data/ext/carray_operator.c +46 -49
- data/ext/carray_partition.c +4 -4
- data/ext/carray_random.c +7 -7
- data/ext/carray_scatter.c +1 -1
- data/ext/carray_sort.c +3 -3
- data/ext/carray_sort_kernel.c +10 -10
- data/ext/carray_test.c +1 -1
- data/ext/extconf.rb +18 -0
- data/ext/mk_call_cfunc.rb +243 -52
- data/ext/mkkernel.rb +354 -100
- data/ext/ruby_carray.c +18 -16
- data/ext/version.h +4 -4
- data/lib/carray/autoload_carray.rb +19 -0
- data/lib/carray/autoload_method_extension.rb +2 -1
- data/lib/carray/axis_group.rb +7 -7
- data/lib/carray/basics.rb +59 -59
- data/lib/carray/bincount_nd.rb +12 -12
- data/lib/carray/block_iterator.rb +24 -14
- data/lib/carray/categorical.rb +4 -4
- data/lib/carray/categorical_iterator.rb +98 -76
- data/lib/carray/conditional.rb +14 -14
- data/lib/carray/construct.rb +21 -0
- data/lib/carray/core_extensions.rb +62 -5
- data/lib/carray/data_type_extension.rb +18 -1
- data/lib/carray/frame/concat.rb +3 -3
- data/lib/carray/frame/convert.rb +1 -1
- data/lib/carray/frame/frame.rb +4 -11
- data/lib/carray/frame/io.rb +159 -2
- data/lib/carray/frame/sort.rb +1 -1
- data/lib/carray/frame/verbs.rb +18 -1
- data/lib/carray/fuse_source.rb +123 -0
- data/lib/carray/fusion.rb +218 -0
- data/lib/carray/histogram.rb +16 -16
- data/lib/carray/inspect.rb +1 -7
- data/lib/carray/iterator.rb +4 -3
- data/lib/carray/lazy.rb +125 -73
- data/lib/carray/meld_reduce.rb +2 -2
- data/lib/carray/methods/align_addr.rb +1 -1
- data/lib/carray/methods/composition.rb +1 -1
- data/lib/carray/methods/is_in.rb +12 -12
- data/lib/carray/methods/locate_addr.rb +6 -1
- data/lib/carray/methods/mask_duplicates.rb +1 -1
- data/lib/carray/methods/meshgrid.rb +4 -5
- data/lib/carray/methods/mode.rb +2 -2
- data/lib/carray/methods/nunique.rb +1 -1
- data/lib/carray/methods/snap.rb +7 -2
- data/lib/carray/methods/unique.rb +3 -3
- data/lib/carray/methods/value_counts.rb +2 -2
- data/lib/carray/runtime.rb +0 -19
- data/lib/carray/slab_iterator.rb +20 -7
- data/lib/carray/string_operation_extension.rb +5 -5
- data/lib/carray/time.rb +890 -491
- data/lib/carray/window_iterator.rb +285 -13
- data/lib/carray.rb +5 -5
- data/yard-stubs/ca_obj_array.rb +385 -0
- data/yard-stubs/ca_obj_bitarray.rb +38 -0
- data/yard-stubs/ca_obj_bitfield.rb +43 -0
- data/yard-stubs/ca_obj_block.rb +73 -0
- data/yard-stubs/ca_obj_byte_swap.rb +56 -0
- data/yard-stubs/ca_obj_fake.rb +31 -0
- data/yard-stubs/ca_obj_farray.rb +32 -0
- data/yard-stubs/ca_obj_field.rb +45 -0
- data/yard-stubs/ca_obj_grid.rb +35 -0
- data/yard-stubs/ca_obj_refer.rb +72 -0
- data/yard-stubs/ca_obj_roll.rb +45 -0
- data/yard-stubs/ca_obj_shift.rb +43 -0
- data/yard-stubs/ca_obj_stride.rb +181 -0
- data/yard-stubs/ca_obj_tile.rb +29 -0
- data/yard-stubs/ca_obj_transpose.rb +40 -0
- data/yard-stubs/ca_obj_window.rb +49 -0
- data/yard-stubs/carray_access.rb +131 -0
- data/yard-stubs/carray_attribute.rb +246 -0
- data/yard-stubs/carray_broadcast.rb +37 -0
- data/yard-stubs/carray_cast.rb +489 -0
- data/yard-stubs/carray_class.rb +65 -0
- data/yard-stubs/carray_conversion.rb +76 -0
- data/yard-stubs/carray_copy.rb +79 -0
- data/yard-stubs/carray_core.rb +114 -0
- data/yard-stubs/carray_count.rb +79 -0
- data/yard-stubs/carray_element.rb +108 -0
- data/yard-stubs/carray_generate.rb +66 -0
- data/yard-stubs/carray_lazy.rb +23 -0
- data/yard-stubs/carray_loop.rb +140 -0
- data/yard-stubs/carray_mask.rb +259 -0
- data/yard-stubs/carray_math.rb +132 -0
- data/yard-stubs/carray_mathfunc.rb +45 -0
- data/yard-stubs/carray_median_percentile.rb +89 -0
- data/yard-stubs/carray_memory_view.rb +163 -0
- data/yard-stubs/carray_order.rb +312 -0
- data/yard-stubs/carray_random.rb +89 -0
- data/yard-stubs/carray_scatter.rb +106 -0
- data/yard-stubs/carray_slab.rb +57 -0
- data/yard-stubs/carray_sort.rb +163 -0
- data/yard-stubs/carray_test.rb +85 -0
- data/yard-stubs/carray_undef.rb +64 -0
- data/yard-stubs/carray_utils.rb +97 -0
- data/yard-stubs/ruby_carray.rb +193 -0
- metadata +59 -10
- data/ext/ca_obj_unbound_repeat.c +0 -496
data/ext/carray_kernels_binop.c
CHANGED
|
@@ -34,6 +34,7 @@ static inline VALUE BOOL2VAL (boolean8_t x) { return x ? Qtrue : Qfalse; }
|
|
|
34
34
|
#endif
|
|
35
35
|
|
|
36
36
|
#include "ca_op_powi.h"
|
|
37
|
+
#include "ca_op_cmplx64.h"
|
|
37
38
|
|
|
38
39
|
/* ===== binop pmax ============================================ */
|
|
39
40
|
|
|
@@ -3860,7 +3861,7 @@ ca_binop_mul_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
3860
3861
|
p1 = q1 + k*i1;
|
|
3861
3862
|
p2 = q2 + k*i2;
|
|
3862
3863
|
p3 = q3 + k*i3;
|
|
3863
|
-
{ (*p3) = (*p1)
|
|
3864
|
+
{ (*p3) = op_cmul_cmplx64((*p1), (*p2)); }
|
|
3864
3865
|
}
|
|
3865
3866
|
}
|
|
3866
3867
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -3874,13 +3875,13 @@ ca_binop_mul_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
3874
3875
|
#pragma omp simd
|
|
3875
3876
|
for (k=0; k<n; k++) {
|
|
3876
3877
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
3877
|
-
{ (*p3) = (*p1)
|
|
3878
|
+
{ (*p3) = op_cmul_cmplx64((*p1), (*p2)); }
|
|
3878
3879
|
}
|
|
3879
3880
|
} else {
|
|
3880
3881
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
3881
3882
|
cmplx64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
3882
3883
|
for (k=0; k<n; k++) {
|
|
3883
|
-
{ (*p3) = (*p1)
|
|
3884
|
+
{ (*p3) = op_cmul_cmplx64((*p1), (*p2)); }
|
|
3884
3885
|
p1 += i1; p2 += i2; p3 += i3;
|
|
3885
3886
|
}
|
|
3886
3887
|
}
|
|
@@ -4029,7 +4030,14 @@ ca_binop_div_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
4029
4030
|
p1 = q1 + k*i1;
|
|
4030
4031
|
p2 = q2 + k*i2;
|
|
4031
4032
|
p3 = q3 + k*i3;
|
|
4032
|
-
{
|
|
4033
|
+
{
|
|
4034
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4035
|
+
{
|
|
4036
|
+
int8_t _q = (*p1) / (*p2);
|
|
4037
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4038
|
+
(*p3) = _q;
|
|
4039
|
+
}
|
|
4040
|
+
}
|
|
4033
4041
|
}
|
|
4034
4042
|
}
|
|
4035
4043
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -4043,13 +4051,27 @@ ca_binop_div_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
4043
4051
|
#pragma omp simd
|
|
4044
4052
|
for (k=0; k<n; k++) {
|
|
4045
4053
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4046
|
-
{
|
|
4054
|
+
{
|
|
4055
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4056
|
+
{
|
|
4057
|
+
int8_t _q = (*p1) / (*p2);
|
|
4058
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4059
|
+
(*p3) = _q;
|
|
4060
|
+
}
|
|
4061
|
+
}
|
|
4047
4062
|
}
|
|
4048
4063
|
} else {
|
|
4049
4064
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
4050
4065
|
int8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
4051
4066
|
for (k=0; k<n; k++) {
|
|
4052
|
-
{
|
|
4067
|
+
{
|
|
4068
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4069
|
+
{
|
|
4070
|
+
int8_t _q = (*p1) / (*p2);
|
|
4071
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4072
|
+
(*p3) = _q;
|
|
4073
|
+
}
|
|
4074
|
+
}
|
|
4053
4075
|
p1 += i1; p2 += i2; p3 += i3;
|
|
4054
4076
|
}
|
|
4055
4077
|
}
|
|
@@ -4119,7 +4141,14 @@ ca_binop_div_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
4119
4141
|
p1 = q1 + k*i1;
|
|
4120
4142
|
p2 = q2 + k*i2;
|
|
4121
4143
|
p3 = q3 + k*i3;
|
|
4122
|
-
{
|
|
4144
|
+
{
|
|
4145
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4146
|
+
{
|
|
4147
|
+
int16_t _q = (*p1) / (*p2);
|
|
4148
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4149
|
+
(*p3) = _q;
|
|
4150
|
+
}
|
|
4151
|
+
}
|
|
4123
4152
|
}
|
|
4124
4153
|
}
|
|
4125
4154
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -4133,13 +4162,27 @@ ca_binop_div_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
4133
4162
|
#pragma omp simd
|
|
4134
4163
|
for (k=0; k<n; k++) {
|
|
4135
4164
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4136
|
-
{
|
|
4165
|
+
{
|
|
4166
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4167
|
+
{
|
|
4168
|
+
int16_t _q = (*p1) / (*p2);
|
|
4169
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4170
|
+
(*p3) = _q;
|
|
4171
|
+
}
|
|
4172
|
+
}
|
|
4137
4173
|
}
|
|
4138
4174
|
} else {
|
|
4139
4175
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
4140
4176
|
int16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
4141
4177
|
for (k=0; k<n; k++) {
|
|
4142
|
-
{
|
|
4178
|
+
{
|
|
4179
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4180
|
+
{
|
|
4181
|
+
int16_t _q = (*p1) / (*p2);
|
|
4182
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4183
|
+
(*p3) = _q;
|
|
4184
|
+
}
|
|
4185
|
+
}
|
|
4143
4186
|
p1 += i1; p2 += i2; p3 += i3;
|
|
4144
4187
|
}
|
|
4145
4188
|
}
|
|
@@ -4209,7 +4252,14 @@ ca_binop_div_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4209
4252
|
p1 = q1 + k*i1;
|
|
4210
4253
|
p2 = q2 + k*i2;
|
|
4211
4254
|
p3 = q3 + k*i3;
|
|
4212
|
-
{
|
|
4255
|
+
{
|
|
4256
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4257
|
+
{
|
|
4258
|
+
int32_t _q = (*p1) / (*p2);
|
|
4259
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4260
|
+
(*p3) = _q;
|
|
4261
|
+
}
|
|
4262
|
+
}
|
|
4213
4263
|
}
|
|
4214
4264
|
}
|
|
4215
4265
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -4223,13 +4273,27 @@ ca_binop_div_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4223
4273
|
#pragma omp simd
|
|
4224
4274
|
for (k=0; k<n; k++) {
|
|
4225
4275
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4226
|
-
{
|
|
4276
|
+
{
|
|
4277
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4278
|
+
{
|
|
4279
|
+
int32_t _q = (*p1) / (*p2);
|
|
4280
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4281
|
+
(*p3) = _q;
|
|
4282
|
+
}
|
|
4283
|
+
}
|
|
4227
4284
|
}
|
|
4228
4285
|
} else {
|
|
4229
4286
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
4230
4287
|
int32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
4231
4288
|
for (k=0; k<n; k++) {
|
|
4232
|
-
{
|
|
4289
|
+
{
|
|
4290
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4291
|
+
{
|
|
4292
|
+
int32_t _q = (*p1) / (*p2);
|
|
4293
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4294
|
+
(*p3) = _q;
|
|
4295
|
+
}
|
|
4296
|
+
}
|
|
4233
4297
|
p1 += i1; p2 += i2; p3 += i3;
|
|
4234
4298
|
}
|
|
4235
4299
|
}
|
|
@@ -4299,7 +4363,14 @@ ca_binop_div_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
4299
4363
|
p1 = q1 + k*i1;
|
|
4300
4364
|
p2 = q2 + k*i2;
|
|
4301
4365
|
p3 = q3 + k*i3;
|
|
4302
|
-
{
|
|
4366
|
+
{
|
|
4367
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4368
|
+
{
|
|
4369
|
+
int64_t _q = (*p1) / (*p2);
|
|
4370
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4371
|
+
(*p3) = _q;
|
|
4372
|
+
}
|
|
4373
|
+
}
|
|
4303
4374
|
}
|
|
4304
4375
|
}
|
|
4305
4376
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -4313,13 +4384,27 @@ ca_binop_div_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
4313
4384
|
#pragma omp simd
|
|
4314
4385
|
for (k=0; k<n; k++) {
|
|
4315
4386
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4316
|
-
{
|
|
4387
|
+
{
|
|
4388
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4389
|
+
{
|
|
4390
|
+
int64_t _q = (*p1) / (*p2);
|
|
4391
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4392
|
+
(*p3) = _q;
|
|
4393
|
+
}
|
|
4394
|
+
}
|
|
4317
4395
|
}
|
|
4318
4396
|
} else {
|
|
4319
4397
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
4320
4398
|
int64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
4321
4399
|
for (k=0; k<n; k++) {
|
|
4322
|
-
{
|
|
4400
|
+
{
|
|
4401
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
4402
|
+
{
|
|
4403
|
+
int64_t _q = (*p1) / (*p2);
|
|
4404
|
+
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4405
|
+
(*p3) = _q;
|
|
4406
|
+
}
|
|
4407
|
+
}
|
|
4323
4408
|
p1 += i1; p2 += i2; p3 += i3;
|
|
4324
4409
|
}
|
|
4325
4410
|
}
|
|
@@ -4479,7 +4564,7 @@ ca_binop_div_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
4479
4564
|
p1 = q1 + k*i1;
|
|
4480
4565
|
p2 = q2 + k*i2;
|
|
4481
4566
|
p3 = q3 + k*i3;
|
|
4482
|
-
{ (*p3) = (*p1)
|
|
4567
|
+
{ (*p3) = op_cdiv_cmplx64((*p1), (*p2)); }
|
|
4483
4568
|
}
|
|
4484
4569
|
}
|
|
4485
4570
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -4493,13 +4578,13 @@ ca_binop_div_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
4493
4578
|
#pragma omp simd
|
|
4494
4579
|
for (k=0; k<n; k++) {
|
|
4495
4580
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4496
|
-
{ (*p3) = (*p1)
|
|
4581
|
+
{ (*p3) = op_cdiv_cmplx64((*p1), (*p2)); }
|
|
4497
4582
|
}
|
|
4498
4583
|
} else {
|
|
4499
4584
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
4500
4585
|
cmplx64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
4501
4586
|
for (k=0; k<n; k++) {
|
|
4502
|
-
{ (*p3) = (*p1)
|
|
4587
|
+
{ (*p3) = op_cdiv_cmplx64((*p1), (*p2)); }
|
|
4503
4588
|
p1 += i1; p2 += i2; p3 += i3;
|
|
4504
4589
|
}
|
|
4505
4590
|
}
|
|
@@ -5177,7 +5262,7 @@ ca_binop_rcp_mul_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
5177
5262
|
p1 = q1 + k*i1;
|
|
5178
5263
|
p2 = q2 + k*i2;
|
|
5179
5264
|
p3 = q3 + k*i3;
|
|
5180
|
-
{ (*p3) = (*p2)
|
|
5265
|
+
{ (*p3) = op_cdiv_cmplx64((*p2), (*p1)); }
|
|
5181
5266
|
}
|
|
5182
5267
|
}
|
|
5183
5268
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5191,13 +5276,13 @@ ca_binop_rcp_mul_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
5191
5276
|
#pragma omp simd
|
|
5192
5277
|
for (k=0; k<n; k++) {
|
|
5193
5278
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5194
|
-
{ (*p3) = (*p2)
|
|
5279
|
+
{ (*p3) = op_cdiv_cmplx64((*p2), (*p1)); }
|
|
5195
5280
|
}
|
|
5196
5281
|
} else {
|
|
5197
5282
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5198
5283
|
cmplx64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5199
5284
|
for (k=0; k<n; k++) {
|
|
5200
|
-
{ (*p3) = (*p2)
|
|
5285
|
+
{ (*p3) = op_cdiv_cmplx64((*p2), (*p1)); }
|
|
5201
5286
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5202
5287
|
}
|
|
5203
5288
|
}
|
|
@@ -5346,7 +5431,14 @@ ca_binop_mod_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
5346
5431
|
p1 = q1 + k*i1;
|
|
5347
5432
|
p2 = q2 + k*i2;
|
|
5348
5433
|
p3 = q3 + k*i3;
|
|
5349
|
-
{
|
|
5434
|
+
{
|
|
5435
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5436
|
+
{
|
|
5437
|
+
int8_t _r = (*p1) % (*p2);
|
|
5438
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5439
|
+
(*p3) = _r;
|
|
5440
|
+
}
|
|
5441
|
+
}
|
|
5350
5442
|
}
|
|
5351
5443
|
}
|
|
5352
5444
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5360,13 +5452,27 @@ ca_binop_mod_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
5360
5452
|
#pragma omp simd
|
|
5361
5453
|
for (k=0; k<n; k++) {
|
|
5362
5454
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5363
|
-
{
|
|
5455
|
+
{
|
|
5456
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5457
|
+
{
|
|
5458
|
+
int8_t _r = (*p1) % (*p2);
|
|
5459
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5460
|
+
(*p3) = _r;
|
|
5461
|
+
}
|
|
5462
|
+
}
|
|
5364
5463
|
}
|
|
5365
5464
|
} else {
|
|
5366
5465
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5367
5466
|
int8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5368
5467
|
for (k=0; k<n; k++) {
|
|
5369
|
-
{
|
|
5468
|
+
{
|
|
5469
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5470
|
+
{
|
|
5471
|
+
int8_t _r = (*p1) % (*p2);
|
|
5472
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5473
|
+
(*p3) = _r;
|
|
5474
|
+
}
|
|
5475
|
+
}
|
|
5370
5476
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5371
5477
|
}
|
|
5372
5478
|
}
|
|
@@ -5436,7 +5542,14 @@ ca_binop_mod_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
5436
5542
|
p1 = q1 + k*i1;
|
|
5437
5543
|
p2 = q2 + k*i2;
|
|
5438
5544
|
p3 = q3 + k*i3;
|
|
5439
|
-
{
|
|
5545
|
+
{
|
|
5546
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5547
|
+
{
|
|
5548
|
+
int16_t _r = (*p1) % (*p2);
|
|
5549
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5550
|
+
(*p3) = _r;
|
|
5551
|
+
}
|
|
5552
|
+
}
|
|
5440
5553
|
}
|
|
5441
5554
|
}
|
|
5442
5555
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5450,13 +5563,27 @@ ca_binop_mod_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
5450
5563
|
#pragma omp simd
|
|
5451
5564
|
for (k=0; k<n; k++) {
|
|
5452
5565
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5453
|
-
{
|
|
5566
|
+
{
|
|
5567
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5568
|
+
{
|
|
5569
|
+
int16_t _r = (*p1) % (*p2);
|
|
5570
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5571
|
+
(*p3) = _r;
|
|
5572
|
+
}
|
|
5573
|
+
}
|
|
5454
5574
|
}
|
|
5455
5575
|
} else {
|
|
5456
5576
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5457
5577
|
int16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5458
5578
|
for (k=0; k<n; k++) {
|
|
5459
|
-
{
|
|
5579
|
+
{
|
|
5580
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5581
|
+
{
|
|
5582
|
+
int16_t _r = (*p1) % (*p2);
|
|
5583
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5584
|
+
(*p3) = _r;
|
|
5585
|
+
}
|
|
5586
|
+
}
|
|
5460
5587
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5461
5588
|
}
|
|
5462
5589
|
}
|
|
@@ -5526,7 +5653,14 @@ ca_binop_mod_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
5526
5653
|
p1 = q1 + k*i1;
|
|
5527
5654
|
p2 = q2 + k*i2;
|
|
5528
5655
|
p3 = q3 + k*i3;
|
|
5529
|
-
{
|
|
5656
|
+
{
|
|
5657
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5658
|
+
{
|
|
5659
|
+
int32_t _r = (*p1) % (*p2);
|
|
5660
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5661
|
+
(*p3) = _r;
|
|
5662
|
+
}
|
|
5663
|
+
}
|
|
5530
5664
|
}
|
|
5531
5665
|
}
|
|
5532
5666
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5540,13 +5674,27 @@ ca_binop_mod_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
5540
5674
|
#pragma omp simd
|
|
5541
5675
|
for (k=0; k<n; k++) {
|
|
5542
5676
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5543
|
-
{
|
|
5677
|
+
{
|
|
5678
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5679
|
+
{
|
|
5680
|
+
int32_t _r = (*p1) % (*p2);
|
|
5681
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5682
|
+
(*p3) = _r;
|
|
5683
|
+
}
|
|
5684
|
+
}
|
|
5544
5685
|
}
|
|
5545
5686
|
} else {
|
|
5546
5687
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5547
5688
|
int32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5548
5689
|
for (k=0; k<n; k++) {
|
|
5549
|
-
{
|
|
5690
|
+
{
|
|
5691
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5692
|
+
{
|
|
5693
|
+
int32_t _r = (*p1) % (*p2);
|
|
5694
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5695
|
+
(*p3) = _r;
|
|
5696
|
+
}
|
|
5697
|
+
}
|
|
5550
5698
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5551
5699
|
}
|
|
5552
5700
|
}
|
|
@@ -5616,7 +5764,14 @@ ca_binop_mod_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
5616
5764
|
p1 = q1 + k*i1;
|
|
5617
5765
|
p2 = q2 + k*i2;
|
|
5618
5766
|
p3 = q3 + k*i3;
|
|
5619
|
-
{
|
|
5767
|
+
{
|
|
5768
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5769
|
+
{
|
|
5770
|
+
int64_t _r = (*p1) % (*p2);
|
|
5771
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5772
|
+
(*p3) = _r;
|
|
5773
|
+
}
|
|
5774
|
+
}
|
|
5620
5775
|
}
|
|
5621
5776
|
}
|
|
5622
5777
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5630,13 +5785,27 @@ ca_binop_mod_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
5630
5785
|
#pragma omp simd
|
|
5631
5786
|
for (k=0; k<n; k++) {
|
|
5632
5787
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5633
|
-
{
|
|
5788
|
+
{
|
|
5789
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5790
|
+
{
|
|
5791
|
+
int64_t _r = (*p1) % (*p2);
|
|
5792
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5793
|
+
(*p3) = _r;
|
|
5794
|
+
}
|
|
5795
|
+
}
|
|
5634
5796
|
}
|
|
5635
5797
|
} else {
|
|
5636
5798
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5637
5799
|
int64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5638
5800
|
for (k=0; k<n; k++) {
|
|
5639
|
-
{
|
|
5801
|
+
{
|
|
5802
|
+
if ((*p2)==0) {ca_zerodiv();};
|
|
5803
|
+
{
|
|
5804
|
+
int64_t _r = (*p1) % (*p2);
|
|
5805
|
+
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5806
|
+
(*p3) = _r;
|
|
5807
|
+
}
|
|
5808
|
+
}
|
|
5640
5809
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5641
5810
|
}
|
|
5642
5811
|
}
|
|
@@ -5706,7 +5875,16 @@ ca_binop_mod_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
5706
5875
|
p1 = q1 + k*i1;
|
|
5707
5876
|
p2 = q2 + k*i2;
|
|
5708
5877
|
p3 = q3 + k*i3;
|
|
5709
|
-
{
|
|
5878
|
+
{
|
|
5879
|
+
{
|
|
5880
|
+
float32_t _r = fmod((*p1), (*p2));
|
|
5881
|
+
if ( _r != 0 ) {
|
|
5882
|
+
if ( (_r < 0) != ((*p2) < 0) ) { _r += (*p2); }
|
|
5883
|
+
}
|
|
5884
|
+
else { _r = copysign((float32_t) 0, (*p2)); }
|
|
5885
|
+
(*p3) = _r;
|
|
5886
|
+
}
|
|
5887
|
+
}
|
|
5710
5888
|
}
|
|
5711
5889
|
}
|
|
5712
5890
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5720,13 +5898,31 @@ ca_binop_mod_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
5720
5898
|
#pragma omp simd
|
|
5721
5899
|
for (k=0; k<n; k++) {
|
|
5722
5900
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5723
|
-
{
|
|
5901
|
+
{
|
|
5902
|
+
{
|
|
5903
|
+
float32_t _r = fmod((*p1), (*p2));
|
|
5904
|
+
if ( _r != 0 ) {
|
|
5905
|
+
if ( (_r < 0) != ((*p2) < 0) ) { _r += (*p2); }
|
|
5906
|
+
}
|
|
5907
|
+
else { _r = copysign((float32_t) 0, (*p2)); }
|
|
5908
|
+
(*p3) = _r;
|
|
5909
|
+
}
|
|
5910
|
+
}
|
|
5724
5911
|
}
|
|
5725
5912
|
} else {
|
|
5726
5913
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5727
5914
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5728
5915
|
for (k=0; k<n; k++) {
|
|
5729
|
-
{
|
|
5916
|
+
{
|
|
5917
|
+
{
|
|
5918
|
+
float32_t _r = fmod((*p1), (*p2));
|
|
5919
|
+
if ( _r != 0 ) {
|
|
5920
|
+
if ( (_r < 0) != ((*p2) < 0) ) { _r += (*p2); }
|
|
5921
|
+
}
|
|
5922
|
+
else { _r = copysign((float32_t) 0, (*p2)); }
|
|
5923
|
+
(*p3) = _r;
|
|
5924
|
+
}
|
|
5925
|
+
}
|
|
5730
5926
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5731
5927
|
}
|
|
5732
5928
|
}
|
|
@@ -5751,7 +5947,16 @@ ca_binop_mod_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
5751
5947
|
p1 = q1 + k*i1;
|
|
5752
5948
|
p2 = q2 + k*i2;
|
|
5753
5949
|
p3 = q3 + k*i3;
|
|
5754
|
-
{
|
|
5950
|
+
{
|
|
5951
|
+
{
|
|
5952
|
+
float64_t _r = fmod((*p1), (*p2));
|
|
5953
|
+
if ( _r != 0 ) {
|
|
5954
|
+
if ( (_r < 0) != ((*p2) < 0) ) { _r += (*p2); }
|
|
5955
|
+
}
|
|
5956
|
+
else { _r = copysign((float64_t) 0, (*p2)); }
|
|
5957
|
+
(*p3) = _r;
|
|
5958
|
+
}
|
|
5959
|
+
}
|
|
5755
5960
|
}
|
|
5756
5961
|
}
|
|
5757
5962
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5765,13 +5970,31 @@ ca_binop_mod_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
5765
5970
|
#pragma omp simd
|
|
5766
5971
|
for (k=0; k<n; k++) {
|
|
5767
5972
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5768
|
-
{
|
|
5973
|
+
{
|
|
5974
|
+
{
|
|
5975
|
+
float64_t _r = fmod((*p1), (*p2));
|
|
5976
|
+
if ( _r != 0 ) {
|
|
5977
|
+
if ( (_r < 0) != ((*p2) < 0) ) { _r += (*p2); }
|
|
5978
|
+
}
|
|
5979
|
+
else { _r = copysign((float64_t) 0, (*p2)); }
|
|
5980
|
+
(*p3) = _r;
|
|
5981
|
+
}
|
|
5982
|
+
}
|
|
5769
5983
|
}
|
|
5770
5984
|
} else {
|
|
5771
5985
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5772
5986
|
double *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5773
5987
|
for (k=0; k<n; k++) {
|
|
5774
|
-
{
|
|
5988
|
+
{
|
|
5989
|
+
{
|
|
5990
|
+
float64_t _r = fmod((*p1), (*p2));
|
|
5991
|
+
if ( _r != 0 ) {
|
|
5992
|
+
if ( (_r < 0) != ((*p2) < 0) ) { _r += (*p2); }
|
|
5993
|
+
}
|
|
5994
|
+
else { _r = copysign((float64_t) 0, (*p2)); }
|
|
5995
|
+
(*p3) = _r;
|
|
5996
|
+
}
|
|
5997
|
+
}
|
|
5775
5998
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5776
5999
|
}
|
|
5777
6000
|
}
|
|
@@ -5854,10 +6077,10 @@ VALUE rb_ca_mod (VALUE self, VALUE other)
|
|
|
5854
6077
|
VALUE rb_ca_mod_bang (VALUE self, VALUE other)
|
|
5855
6078
|
{ return rb_ca_call_binop_bang(self, other, ca_binop_mod); }
|
|
5856
6079
|
|
|
5857
|
-
/* ===== binop
|
|
6080
|
+
/* ===== binop fmod ============================================ */
|
|
5858
6081
|
|
|
5859
6082
|
static void
|
|
5860
|
-
|
|
6083
|
+
ca_binop_fmod_int8_t (ca_size_t n, boolean8_t *m,
|
|
5861
6084
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
5862
6085
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
5863
6086
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -5902,7 +6125,7 @@ ca_binop_reminder_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
5902
6125
|
}
|
|
5903
6126
|
|
|
5904
6127
|
static void
|
|
5905
|
-
|
|
6128
|
+
ca_binop_fmod_uint8_t (ca_size_t n, boolean8_t *m,
|
|
5906
6129
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
5907
6130
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
5908
6131
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -5947,7 +6170,7 @@ ca_binop_reminder_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
5947
6170
|
}
|
|
5948
6171
|
|
|
5949
6172
|
static void
|
|
5950
|
-
|
|
6173
|
+
ca_binop_fmod_int16_t (ca_size_t n, boolean8_t *m,
|
|
5951
6174
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
5952
6175
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
5953
6176
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -5992,7 +6215,7 @@ ca_binop_reminder_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
5992
6215
|
}
|
|
5993
6216
|
|
|
5994
6217
|
static void
|
|
5995
|
-
|
|
6218
|
+
ca_binop_fmod_uint16_t (ca_size_t n, boolean8_t *m,
|
|
5996
6219
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
5997
6220
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
5998
6221
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6037,7 +6260,7 @@ ca_binop_reminder_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
6037
6260
|
}
|
|
6038
6261
|
|
|
6039
6262
|
static void
|
|
6040
|
-
|
|
6263
|
+
ca_binop_fmod_int32_t (ca_size_t n, boolean8_t *m,
|
|
6041
6264
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
6042
6265
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
6043
6266
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6082,7 +6305,7 @@ ca_binop_reminder_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
6082
6305
|
}
|
|
6083
6306
|
|
|
6084
6307
|
static void
|
|
6085
|
-
|
|
6308
|
+
ca_binop_fmod_uint32_t (ca_size_t n, boolean8_t *m,
|
|
6086
6309
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
6087
6310
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
6088
6311
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6127,7 +6350,7 @@ ca_binop_reminder_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
6127
6350
|
}
|
|
6128
6351
|
|
|
6129
6352
|
static void
|
|
6130
|
-
|
|
6353
|
+
ca_binop_fmod_int64_t (ca_size_t n, boolean8_t *m,
|
|
6131
6354
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
6132
6355
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
6133
6356
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6172,7 +6395,7 @@ ca_binop_reminder_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
6172
6395
|
}
|
|
6173
6396
|
|
|
6174
6397
|
static void
|
|
6175
|
-
|
|
6398
|
+
ca_binop_fmod_uint64_t (ca_size_t n, boolean8_t *m,
|
|
6176
6399
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
6177
6400
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
6178
6401
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6217,7 +6440,7 @@ ca_binop_reminder_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
6217
6440
|
}
|
|
6218
6441
|
|
|
6219
6442
|
static void
|
|
6220
|
-
|
|
6443
|
+
ca_binop_fmod_float32_t (ca_size_t n, boolean8_t *m,
|
|
6221
6444
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
6222
6445
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
6223
6446
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6235,7 +6458,7 @@ ca_binop_reminder_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
6235
6458
|
p1 = q1 + k*i1;
|
|
6236
6459
|
p2 = q2 + k*i2;
|
|
6237
6460
|
p3 = q3 + k*i3;
|
|
6238
|
-
{ (*p3) =
|
|
6461
|
+
{ (*p3) = fmodf((*p1), (*p2)); }
|
|
6239
6462
|
}
|
|
6240
6463
|
}
|
|
6241
6464
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -6249,20 +6472,20 @@ ca_binop_reminder_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
6249
6472
|
#pragma omp simd
|
|
6250
6473
|
for (k=0; k<n; k++) {
|
|
6251
6474
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
6252
|
-
{ (*p3) =
|
|
6475
|
+
{ (*p3) = fmodf((*p1), (*p2)); }
|
|
6253
6476
|
}
|
|
6254
6477
|
} else {
|
|
6255
6478
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
6256
6479
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
6257
6480
|
for (k=0; k<n; k++) {
|
|
6258
|
-
{ (*p3) =
|
|
6481
|
+
{ (*p3) = fmodf((*p1), (*p2)); }
|
|
6259
6482
|
p1 += i1; p2 += i2; p3 += i3;
|
|
6260
6483
|
}
|
|
6261
6484
|
}
|
|
6262
6485
|
}
|
|
6263
6486
|
|
|
6264
6487
|
static void
|
|
6265
|
-
|
|
6488
|
+
ca_binop_fmod_float64_t (ca_size_t n, boolean8_t *m,
|
|
6266
6489
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
6267
6490
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
6268
6491
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6280,7 +6503,7 @@ ca_binop_reminder_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
6280
6503
|
p1 = q1 + k*i1;
|
|
6281
6504
|
p2 = q2 + k*i2;
|
|
6282
6505
|
p3 = q3 + k*i3;
|
|
6283
|
-
{ (*p3) =
|
|
6506
|
+
{ (*p3) = fmod((*p1), (*p2)); }
|
|
6284
6507
|
}
|
|
6285
6508
|
}
|
|
6286
6509
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -6294,20 +6517,20 @@ ca_binop_reminder_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
6294
6517
|
#pragma omp simd
|
|
6295
6518
|
for (k=0; k<n; k++) {
|
|
6296
6519
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
6297
|
-
{ (*p3) =
|
|
6520
|
+
{ (*p3) = fmod((*p1), (*p2)); }
|
|
6298
6521
|
}
|
|
6299
6522
|
} else {
|
|
6300
6523
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
6301
6524
|
double *p1 = q1, *p2 = q2, *p3 = q3;
|
|
6302
6525
|
for (k=0; k<n; k++) {
|
|
6303
|
-
{ (*p3) =
|
|
6526
|
+
{ (*p3) = fmod((*p1), (*p2)); }
|
|
6304
6527
|
p1 += i1; p2 += i2; p3 += i3;
|
|
6305
6528
|
}
|
|
6306
6529
|
}
|
|
6307
6530
|
}
|
|
6308
6531
|
|
|
6309
6532
|
static void
|
|
6310
|
-
|
|
6533
|
+
ca_binop_fmod_VALUE (ca_size_t n, boolean8_t *m,
|
|
6311
6534
|
char * __restrict__ ptr1, ca_size_t i1,
|
|
6312
6535
|
char * __restrict__ ptr2, ca_size_t i2,
|
|
6313
6536
|
char * __restrict__ ptr3, ca_size_t i3)
|
|
@@ -6325,7 +6548,7 @@ ca_binop_reminder_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
6325
6548
|
p1 = q1 + k*i1;
|
|
6326
6549
|
p2 = q2 + k*i2;
|
|
6327
6550
|
p3 = q3 + k*i3;
|
|
6328
|
-
{ (*p3) = rb_funcall((*p1), rb_intern("
|
|
6551
|
+
{ (*p3) = rb_funcall((*p1), rb_intern("remainder"), 1, (*p2)); }
|
|
6329
6552
|
}
|
|
6330
6553
|
}
|
|
6331
6554
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -6339,49 +6562,49 @@ ca_binop_reminder_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
6339
6562
|
#pragma omp simd
|
|
6340
6563
|
for (k=0; k<n; k++) {
|
|
6341
6564
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
6342
|
-
{ (*p3) = rb_funcall((*p1), rb_intern("
|
|
6565
|
+
{ (*p3) = rb_funcall((*p1), rb_intern("remainder"), 1, (*p2)); }
|
|
6343
6566
|
}
|
|
6344
6567
|
} else {
|
|
6345
6568
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
6346
6569
|
VALUE *p1 = q1, *p2 = q2, *p3 = q3;
|
|
6347
6570
|
for (k=0; k<n; k++) {
|
|
6348
|
-
{ (*p3) = rb_funcall((*p1), rb_intern("
|
|
6571
|
+
{ (*p3) = rb_funcall((*p1), rb_intern("remainder"), 1, (*p2)); }
|
|
6349
6572
|
p1 += i1; p2 += i2; p3 += i3;
|
|
6350
6573
|
}
|
|
6351
6574
|
}
|
|
6352
6575
|
}
|
|
6353
6576
|
|
|
6354
6577
|
ca_binop_func_t
|
|
6355
|
-
|
|
6578
|
+
ca_binop_fmod[CA_NTYPE] = {
|
|
6356
6579
|
ca_binop_not_implement,
|
|
6357
6580
|
ca_binop_not_implement,
|
|
6358
|
-
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
|
|
6365
|
-
|
|
6366
|
-
|
|
6367
|
-
|
|
6581
|
+
ca_binop_fmod_int8_t,
|
|
6582
|
+
ca_binop_fmod_uint8_t,
|
|
6583
|
+
ca_binop_fmod_int16_t,
|
|
6584
|
+
ca_binop_fmod_uint16_t,
|
|
6585
|
+
ca_binop_fmod_int32_t,
|
|
6586
|
+
ca_binop_fmod_uint32_t,
|
|
6587
|
+
ca_binop_fmod_int64_t,
|
|
6588
|
+
ca_binop_fmod_uint64_t,
|
|
6589
|
+
ca_binop_fmod_float32_t,
|
|
6590
|
+
ca_binop_fmod_float64_t,
|
|
6368
6591
|
ca_binop_not_implement,
|
|
6369
6592
|
ca_binop_not_implement,
|
|
6370
6593
|
ca_binop_not_implement,
|
|
6371
6594
|
ca_binop_not_implement,
|
|
6372
|
-
|
|
6595
|
+
ca_binop_fmod_VALUE,
|
|
6373
6596
|
};
|
|
6374
6597
|
|
|
6375
|
-
VALUE
|
|
6598
|
+
VALUE rb_ca_fmod (VALUE self, VALUE other)
|
|
6376
6599
|
{
|
|
6377
6600
|
if ( ! rb_ca_test_castable(other) ) {
|
|
6378
|
-
return rb_ca_binop_pass_to_other(self, other, rb_intern("
|
|
6601
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("fmod"));
|
|
6379
6602
|
}
|
|
6380
|
-
return rb_ca_call_binop(self, other,
|
|
6603
|
+
return rb_ca_call_binop(self, other, ca_binop_fmod);
|
|
6381
6604
|
}
|
|
6382
6605
|
|
|
6383
|
-
VALUE
|
|
6384
|
-
{ return rb_ca_call_binop_bang(self, other,
|
|
6606
|
+
VALUE rb_ca_fmod_bang (VALUE self, VALUE other)
|
|
6607
|
+
{ return rb_ca_call_binop_bang(self, other, ca_binop_fmod); }
|
|
6385
6608
|
|
|
6386
6609
|
/* ===== binop bit_and_i ============================================ */
|
|
6387
6610
|
|
|
@@ -9466,7 +9689,7 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
9466
9689
|
p1 = q1 + k*i1;
|
|
9467
9690
|
p2 = q2 + k*i2;
|
|
9468
9691
|
p3 = q3 + k*i3;
|
|
9469
|
-
{ (*p3) =
|
|
9692
|
+
{ (*p3) = powf((*p1), (*p2)); }
|
|
9470
9693
|
}
|
|
9471
9694
|
}
|
|
9472
9695
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -9480,13 +9703,13 @@ ca_binop_power_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
9480
9703
|
#pragma omp simd
|
|
9481
9704
|
for (k=0; k<n; k++) {
|
|
9482
9705
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
9483
|
-
{ (*p3) =
|
|
9706
|
+
{ (*p3) = powf((*p1), (*p2)); }
|
|
9484
9707
|
}
|
|
9485
9708
|
} else {
|
|
9486
9709
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
9487
9710
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
9488
9711
|
for (k=0; k<n; k++) {
|
|
9489
|
-
{ (*p3) =
|
|
9712
|
+
{ (*p3) = powf((*p1), (*p2)); }
|
|
9490
9713
|
p1 += i1; p2 += i2; p3 += i3;
|
|
9491
9714
|
}
|
|
9492
9715
|
}
|
|
@@ -9725,7 +9948,7 @@ ca_binop_copysign_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
9725
9948
|
p1 = q1 + k*i1;
|
|
9726
9949
|
p2 = q2 + k*i2;
|
|
9727
9950
|
p3 = q3 + k*i3;
|
|
9728
|
-
{ (*p3) =
|
|
9951
|
+
{ (*p3) = copysignf((*p1), (*p2)); }
|
|
9729
9952
|
}
|
|
9730
9953
|
}
|
|
9731
9954
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -9739,13 +9962,13 @@ ca_binop_copysign_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
9739
9962
|
#pragma omp simd
|
|
9740
9963
|
for (k=0; k<n; k++) {
|
|
9741
9964
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
9742
|
-
{ (*p3) =
|
|
9965
|
+
{ (*p3) = copysignf((*p1), (*p2)); }
|
|
9743
9966
|
}
|
|
9744
9967
|
} else {
|
|
9745
9968
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
9746
9969
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
9747
9970
|
for (k=0; k<n; k++) {
|
|
9748
|
-
{ (*p3) =
|
|
9971
|
+
{ (*p3) = copysignf((*p1), (*p2)); }
|
|
9749
9972
|
p1 += i1; p2 += i2; p3 += i3;
|
|
9750
9973
|
}
|
|
9751
9974
|
}
|
|
@@ -9924,7 +10147,7 @@ ca_binop_nextafter_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
9924
10147
|
p1 = q1 + k*i1;
|
|
9925
10148
|
p2 = q2 + k*i2;
|
|
9926
10149
|
p3 = q3 + k*i3;
|
|
9927
|
-
{ (*p3) =
|
|
10150
|
+
{ (*p3) = nextafterf((*p1), (*p2)); }
|
|
9928
10151
|
}
|
|
9929
10152
|
}
|
|
9930
10153
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -9938,13 +10161,13 @@ ca_binop_nextafter_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
9938
10161
|
#pragma omp simd
|
|
9939
10162
|
for (k=0; k<n; k++) {
|
|
9940
10163
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
9941
|
-
{ (*p3) =
|
|
10164
|
+
{ (*p3) = nextafterf((*p1), (*p2)); }
|
|
9942
10165
|
}
|
|
9943
10166
|
} else {
|
|
9944
10167
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
9945
10168
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
9946
10169
|
for (k=0; k<n; k++) {
|
|
9947
|
-
{ (*p3) =
|
|
10170
|
+
{ (*p3) = nextafterf((*p1), (*p2)); }
|
|
9948
10171
|
p1 += i1; p2 += i2; p3 += i3;
|
|
9949
10172
|
}
|
|
9950
10173
|
}
|
|
@@ -10102,205 +10325,6 @@ VALUE rb_ca_nextafter (VALUE self, VALUE other)
|
|
|
10102
10325
|
VALUE rb_ca_nextafter_bang (VALUE self, VALUE other)
|
|
10103
10326
|
{ return rb_ca_call_binop_bang(self, other, ca_binop_nextafter); }
|
|
10104
10327
|
|
|
10105
|
-
/* ===== binop fmod ============================================ */
|
|
10106
|
-
|
|
10107
|
-
static void
|
|
10108
|
-
ca_binop_fmod_float32_t (ca_size_t n, boolean8_t *m,
|
|
10109
|
-
char * __restrict__ ptr1, ca_size_t i1,
|
|
10110
|
-
char * __restrict__ ptr2, ca_size_t i2,
|
|
10111
|
-
char * __restrict__ ptr3, ca_size_t i3)
|
|
10112
|
-
{
|
|
10113
|
-
float * __restrict__ q1 = (float *) ptr1;
|
|
10114
|
-
float * __restrict__ q2 = (float *) ptr2;
|
|
10115
|
-
float * __restrict__ q3 = (float *) ptr3;
|
|
10116
|
-
ca_size_t k;
|
|
10117
|
-
if ( m ) {
|
|
10118
|
-
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10119
|
-
boolean8_t *pm;
|
|
10120
|
-
for (k=0; k<n; k++) {
|
|
10121
|
-
pm = m + k;
|
|
10122
|
-
if ( ! *pm ) {
|
|
10123
|
-
p1 = q1 + k*i1;
|
|
10124
|
-
p2 = q2 + k*i2;
|
|
10125
|
-
p3 = q3 + k*i3;
|
|
10126
|
-
{ (*p3) = fmod((*p1), (*p2)); }
|
|
10127
|
-
}
|
|
10128
|
-
}
|
|
10129
|
-
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
10130
|
-
/* contig branch: SIMD-friendly form. Index-form `q[k]` exposes
|
|
10131
|
-
the unit-stride access to the vectorizer; `__restrict__` on
|
|
10132
|
-
q1/q2/q3 promises no aliasing so the omp simd pragma can
|
|
10133
|
-
license lane-parallel loads/stores. Element-wise binop has
|
|
10134
|
-
no reassoc, so ε-close numeric contract is unaffected. */
|
|
10135
|
-
float *p1, *p2, *p3;
|
|
10136
|
-
(void)p1; (void)p2; (void)p3;
|
|
10137
|
-
#pragma omp simd
|
|
10138
|
-
for (k=0; k<n; k++) {
|
|
10139
|
-
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
10140
|
-
{ (*p3) = fmod((*p1), (*p2)); }
|
|
10141
|
-
}
|
|
10142
|
-
} else {
|
|
10143
|
-
/* strided branch: numo-shape `p += s` increment form. */
|
|
10144
|
-
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10145
|
-
for (k=0; k<n; k++) {
|
|
10146
|
-
{ (*p3) = fmod((*p1), (*p2)); }
|
|
10147
|
-
p1 += i1; p2 += i2; p3 += i3;
|
|
10148
|
-
}
|
|
10149
|
-
}
|
|
10150
|
-
}
|
|
10151
|
-
|
|
10152
|
-
static void
|
|
10153
|
-
ca_binop_fmod_float64_t (ca_size_t n, boolean8_t *m,
|
|
10154
|
-
char * __restrict__ ptr1, ca_size_t i1,
|
|
10155
|
-
char * __restrict__ ptr2, ca_size_t i2,
|
|
10156
|
-
char * __restrict__ ptr3, ca_size_t i3)
|
|
10157
|
-
{
|
|
10158
|
-
double * __restrict__ q1 = (double *) ptr1;
|
|
10159
|
-
double * __restrict__ q2 = (double *) ptr2;
|
|
10160
|
-
double * __restrict__ q3 = (double *) ptr3;
|
|
10161
|
-
ca_size_t k;
|
|
10162
|
-
if ( m ) {
|
|
10163
|
-
double *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10164
|
-
boolean8_t *pm;
|
|
10165
|
-
for (k=0; k<n; k++) {
|
|
10166
|
-
pm = m + k;
|
|
10167
|
-
if ( ! *pm ) {
|
|
10168
|
-
p1 = q1 + k*i1;
|
|
10169
|
-
p2 = q2 + k*i2;
|
|
10170
|
-
p3 = q3 + k*i3;
|
|
10171
|
-
{ (*p3) = fmod((*p1), (*p2)); }
|
|
10172
|
-
}
|
|
10173
|
-
}
|
|
10174
|
-
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
10175
|
-
/* contig branch: SIMD-friendly form. Index-form `q[k]` exposes
|
|
10176
|
-
the unit-stride access to the vectorizer; `__restrict__` on
|
|
10177
|
-
q1/q2/q3 promises no aliasing so the omp simd pragma can
|
|
10178
|
-
license lane-parallel loads/stores. Element-wise binop has
|
|
10179
|
-
no reassoc, so ε-close numeric contract is unaffected. */
|
|
10180
|
-
double *p1, *p2, *p3;
|
|
10181
|
-
(void)p1; (void)p2; (void)p3;
|
|
10182
|
-
#pragma omp simd
|
|
10183
|
-
for (k=0; k<n; k++) {
|
|
10184
|
-
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
10185
|
-
{ (*p3) = fmod((*p1), (*p2)); }
|
|
10186
|
-
}
|
|
10187
|
-
} else {
|
|
10188
|
-
/* strided branch: numo-shape `p += s` increment form. */
|
|
10189
|
-
double *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10190
|
-
for (k=0; k<n; k++) {
|
|
10191
|
-
{ (*p3) = fmod((*p1), (*p2)); }
|
|
10192
|
-
p1 += i1; p2 += i2; p3 += i3;
|
|
10193
|
-
}
|
|
10194
|
-
}
|
|
10195
|
-
}
|
|
10196
|
-
|
|
10197
|
-
static void
|
|
10198
|
-
ca_binop_fmod_VALUE (ca_size_t n, boolean8_t *m,
|
|
10199
|
-
char * __restrict__ ptr1, ca_size_t i1,
|
|
10200
|
-
char * __restrict__ ptr2, ca_size_t i2,
|
|
10201
|
-
char * __restrict__ ptr3, ca_size_t i3)
|
|
10202
|
-
{
|
|
10203
|
-
VALUE * __restrict__ q1 = (VALUE *) ptr1;
|
|
10204
|
-
VALUE * __restrict__ q2 = (VALUE *) ptr2;
|
|
10205
|
-
VALUE * __restrict__ q3 = (VALUE *) ptr3;
|
|
10206
|
-
ca_size_t k;
|
|
10207
|
-
if ( m ) {
|
|
10208
|
-
VALUE *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10209
|
-
boolean8_t *pm;
|
|
10210
|
-
for (k=0; k<n; k++) {
|
|
10211
|
-
pm = m + k;
|
|
10212
|
-
if ( ! *pm ) {
|
|
10213
|
-
p1 = q1 + k*i1;
|
|
10214
|
-
p2 = q2 + k*i2;
|
|
10215
|
-
p3 = q3 + k*i3;
|
|
10216
|
-
{ {
|
|
10217
|
-
VALUE _l = (*p1);
|
|
10218
|
-
VALUE _r = (*p2);
|
|
10219
|
-
if ((RB_FLOAT_TYPE_P(_l) || RB_INTEGER_TYPE_P(_l) || RB_TYPE_P(_l, T_RATIONAL)) &&
|
|
10220
|
-
(RB_FLOAT_TYPE_P(_r) || RB_INTEGER_TYPE_P(_r) || RB_TYPE_P(_r, T_RATIONAL))) {
|
|
10221
|
-
(*p3) = DBL2NUM(fmod(NUM2DBL(_l), NUM2DBL(_r)));
|
|
10222
|
-
} else {
|
|
10223
|
-
(*p3) = rb_funcall(_l, rb_intern("fmod"), 1, _r);
|
|
10224
|
-
}
|
|
10225
|
-
}
|
|
10226
|
-
}
|
|
10227
|
-
}
|
|
10228
|
-
}
|
|
10229
|
-
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
10230
|
-
/* contig branch: SIMD-friendly form. Index-form `q[k]` exposes
|
|
10231
|
-
the unit-stride access to the vectorizer; `__restrict__` on
|
|
10232
|
-
q1/q2/q3 promises no aliasing so the omp simd pragma can
|
|
10233
|
-
license lane-parallel loads/stores. Element-wise binop has
|
|
10234
|
-
no reassoc, so ε-close numeric contract is unaffected. */
|
|
10235
|
-
VALUE *p1, *p2, *p3;
|
|
10236
|
-
(void)p1; (void)p2; (void)p3;
|
|
10237
|
-
#pragma omp simd
|
|
10238
|
-
for (k=0; k<n; k++) {
|
|
10239
|
-
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
10240
|
-
{ {
|
|
10241
|
-
VALUE _l = (*p1);
|
|
10242
|
-
VALUE _r = (*p2);
|
|
10243
|
-
if ((RB_FLOAT_TYPE_P(_l) || RB_INTEGER_TYPE_P(_l) || RB_TYPE_P(_l, T_RATIONAL)) &&
|
|
10244
|
-
(RB_FLOAT_TYPE_P(_r) || RB_INTEGER_TYPE_P(_r) || RB_TYPE_P(_r, T_RATIONAL))) {
|
|
10245
|
-
(*p3) = DBL2NUM(fmod(NUM2DBL(_l), NUM2DBL(_r)));
|
|
10246
|
-
} else {
|
|
10247
|
-
(*p3) = rb_funcall(_l, rb_intern("fmod"), 1, _r);
|
|
10248
|
-
}
|
|
10249
|
-
}
|
|
10250
|
-
}
|
|
10251
|
-
}
|
|
10252
|
-
} else {
|
|
10253
|
-
/* strided branch: numo-shape `p += s` increment form. */
|
|
10254
|
-
VALUE *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10255
|
-
for (k=0; k<n; k++) {
|
|
10256
|
-
{ {
|
|
10257
|
-
VALUE _l = (*p1);
|
|
10258
|
-
VALUE _r = (*p2);
|
|
10259
|
-
if ((RB_FLOAT_TYPE_P(_l) || RB_INTEGER_TYPE_P(_l) || RB_TYPE_P(_l, T_RATIONAL)) &&
|
|
10260
|
-
(RB_FLOAT_TYPE_P(_r) || RB_INTEGER_TYPE_P(_r) || RB_TYPE_P(_r, T_RATIONAL))) {
|
|
10261
|
-
(*p3) = DBL2NUM(fmod(NUM2DBL(_l), NUM2DBL(_r)));
|
|
10262
|
-
} else {
|
|
10263
|
-
(*p3) = rb_funcall(_l, rb_intern("fmod"), 1, _r);
|
|
10264
|
-
}
|
|
10265
|
-
}
|
|
10266
|
-
}
|
|
10267
|
-
p1 += i1; p2 += i2; p3 += i3;
|
|
10268
|
-
}
|
|
10269
|
-
}
|
|
10270
|
-
}
|
|
10271
|
-
|
|
10272
|
-
ca_binop_func_t
|
|
10273
|
-
ca_binop_fmod[CA_NTYPE] = {
|
|
10274
|
-
ca_binop_not_implement,
|
|
10275
|
-
ca_binop_not_implement,
|
|
10276
|
-
ca_binop_not_implement,
|
|
10277
|
-
ca_binop_not_implement,
|
|
10278
|
-
ca_binop_not_implement,
|
|
10279
|
-
ca_binop_not_implement,
|
|
10280
|
-
ca_binop_not_implement,
|
|
10281
|
-
ca_binop_not_implement,
|
|
10282
|
-
ca_binop_not_implement,
|
|
10283
|
-
ca_binop_not_implement,
|
|
10284
|
-
ca_binop_fmod_float32_t,
|
|
10285
|
-
ca_binop_fmod_float64_t,
|
|
10286
|
-
ca_binop_not_implement,
|
|
10287
|
-
ca_binop_not_implement,
|
|
10288
|
-
ca_binop_not_implement,
|
|
10289
|
-
ca_binop_not_implement,
|
|
10290
|
-
ca_binop_fmod_VALUE,
|
|
10291
|
-
};
|
|
10292
|
-
|
|
10293
|
-
VALUE rb_ca_fmod (VALUE self, VALUE other)
|
|
10294
|
-
{
|
|
10295
|
-
if ( ! rb_ca_test_castable(other) ) {
|
|
10296
|
-
return rb_ca_binop_pass_to_other(self, other, rb_intern("fmod"));
|
|
10297
|
-
}
|
|
10298
|
-
return rb_ca_call_binop(self, other, ca_binop_fmod);
|
|
10299
|
-
}
|
|
10300
|
-
|
|
10301
|
-
VALUE rb_ca_fmod_bang (VALUE self, VALUE other)
|
|
10302
|
-
{ return rb_ca_call_binop_bang(self, other, ca_binop_fmod); }
|
|
10303
|
-
|
|
10304
10328
|
/* ===== binop atan2 ============================================ */
|
|
10305
10329
|
|
|
10306
10330
|
static void
|
|
@@ -10322,7 +10346,7 @@ ca_binop_atan2_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
10322
10346
|
p1 = q1 + k*i1;
|
|
10323
10347
|
p2 = q2 + k*i2;
|
|
10324
10348
|
p3 = q3 + k*i3;
|
|
10325
|
-
{ (*p3) =
|
|
10349
|
+
{ (*p3) = atan2f((*p1), (*p2)); }
|
|
10326
10350
|
}
|
|
10327
10351
|
}
|
|
10328
10352
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -10336,13 +10360,13 @@ ca_binop_atan2_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
10336
10360
|
#pragma omp simd
|
|
10337
10361
|
for (k=0; k<n; k++) {
|
|
10338
10362
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
10339
|
-
{ (*p3) =
|
|
10363
|
+
{ (*p3) = atan2f((*p1), (*p2)); }
|
|
10340
10364
|
}
|
|
10341
10365
|
} else {
|
|
10342
10366
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
10343
10367
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10344
10368
|
for (k=0; k<n; k++) {
|
|
10345
|
-
{ (*p3) =
|
|
10369
|
+
{ (*p3) = atan2f((*p1), (*p2)); }
|
|
10346
10370
|
p1 += i1; p2 += i2; p3 += i3;
|
|
10347
10371
|
}
|
|
10348
10372
|
}
|
|
@@ -10521,7 +10545,7 @@ ca_binop_hypot_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
10521
10545
|
p1 = q1 + k*i1;
|
|
10522
10546
|
p2 = q2 + k*i2;
|
|
10523
10547
|
p3 = q3 + k*i3;
|
|
10524
|
-
{ (*p3) =
|
|
10548
|
+
{ (*p3) = hypotf((*p1), (*p2)); }
|
|
10525
10549
|
}
|
|
10526
10550
|
}
|
|
10527
10551
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -10535,13 +10559,13 @@ ca_binop_hypot_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
10535
10559
|
#pragma omp simd
|
|
10536
10560
|
for (k=0; k<n; k++) {
|
|
10537
10561
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
10538
|
-
{ (*p3) =
|
|
10562
|
+
{ (*p3) = hypotf((*p1), (*p2)); }
|
|
10539
10563
|
}
|
|
10540
10564
|
} else {
|
|
10541
10565
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
10542
10566
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10543
10567
|
for (k=0; k<n; k++) {
|
|
10544
|
-
{ (*p3) =
|
|
10568
|
+
{ (*p3) = hypotf((*p1), (*p2)); }
|
|
10545
10569
|
p1 += i1; p2 += i2; p3 += i3;
|
|
10546
10570
|
}
|
|
10547
10571
|
}
|
|
@@ -10720,7 +10744,7 @@ ca_binop_logaddexp_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
10720
10744
|
p1 = q1 + k*i1;
|
|
10721
10745
|
p2 = q2 + k*i2;
|
|
10722
10746
|
p3 = q3 + k*i3;
|
|
10723
|
-
{ (*p3) =
|
|
10747
|
+
{ (*p3) = fmaxf((*p1), (*p2)) + log1pf(expf(-fabsf((*p1) - (*p2)))); }
|
|
10724
10748
|
}
|
|
10725
10749
|
}
|
|
10726
10750
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -10734,13 +10758,13 @@ ca_binop_logaddexp_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
10734
10758
|
#pragma omp simd
|
|
10735
10759
|
for (k=0; k<n; k++) {
|
|
10736
10760
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
10737
|
-
{ (*p3) =
|
|
10761
|
+
{ (*p3) = fmaxf((*p1), (*p2)) + log1pf(expf(-fabsf((*p1) - (*p2)))); }
|
|
10738
10762
|
}
|
|
10739
10763
|
} else {
|
|
10740
10764
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
10741
10765
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
10742
10766
|
for (k=0; k<n; k++) {
|
|
10743
|
-
{ (*p3) =
|
|
10767
|
+
{ (*p3) = fmaxf((*p1), (*p2)) + log1pf(expf(-fabsf((*p1) - (*p2)))); }
|
|
10744
10768
|
p1 += i1; p2 += i2; p3 += i3;
|
|
10745
10769
|
}
|
|
10746
10770
|
}
|
|
@@ -10932,8 +10956,8 @@ Init_carray_kernels_binop (void)
|
|
|
10932
10956
|
rb_define_method(rb_cCArray, "rcp_mul!", rb_ca_rcp_mul_bang, 1);
|
|
10933
10957
|
rb_define_method(rb_cCArray, "%", rb_ca_mod, 1);
|
|
10934
10958
|
rb_define_method(rb_cCArray, "mod!", rb_ca_mod_bang, 1);
|
|
10935
|
-
rb_define_method(rb_cCArray, "
|
|
10936
|
-
rb_define_method(rb_cCArray, "
|
|
10959
|
+
rb_define_method(rb_cCArray, "fmod", rb_ca_fmod, 1);
|
|
10960
|
+
rb_define_method(rb_cCArray, "fmod!", rb_ca_fmod_bang, 1);
|
|
10937
10961
|
rb_define_method(rb_cCArray, "&", rb_ca_bit_and_i, 1);
|
|
10938
10962
|
rb_define_method(rb_cCArray, "bit_and_i!", rb_ca_bit_and_i_bang, 1);
|
|
10939
10963
|
rb_define_method(rb_cCArray, "|", rb_ca_bit_or_i, 1);
|
|
@@ -10968,8 +10992,6 @@ Init_carray_kernels_binop (void)
|
|
|
10968
10992
|
rb_define_method(rb_cCArray, "copysign!", rb_ca_copysign_bang, 1);
|
|
10969
10993
|
rb_define_method(rb_cCArray, "nextafter", rb_ca_nextafter, 1);
|
|
10970
10994
|
rb_define_method(rb_cCArray, "nextafter!", rb_ca_nextafter_bang, 1);
|
|
10971
|
-
rb_define_method(rb_cCArray, "fmod", rb_ca_fmod, 1);
|
|
10972
|
-
rb_define_method(rb_cCArray, "fmod!", rb_ca_fmod_bang, 1);
|
|
10973
10995
|
rb_define_method(rb_cCArray, "atan2", rb_ca_atan2, 1);
|
|
10974
10996
|
rb_define_method(rb_cCArray, "atan2!", rb_ca_atan2_bang, 1);
|
|
10975
10997
|
rb_define_method(rb_cCArray, "hypot", rb_ca_hypot, 1);
|