carray 3.0.2 → 3.0.4
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 +568 -0
- data/README.md +6 -6
- data/carray.gemspec +1 -1
- data/ext/ca_axis_descriptor.h +27 -24
- data/ext/ca_axis_dispatch.c +220 -0
- data/ext/ca_axis_group.c +201 -123
- data/ext/ca_binop_dispatch.c +46 -52
- data/ext/ca_binop_dispatch.h +1 -1
- data/ext/ca_categorical_iterator.c +249 -183
- data/ext/ca_compare.c +7 -12
- data/ext/ca_for_buffer.h +21 -68
- data/ext/ca_group_iter.c +38 -23
- data/ext/ca_kernel_iterator.c +1765 -2076
- data/ext/ca_kernel_iterator.h +584 -566
- data/ext/ca_monop_dispatch.c +86 -63
- data/ext/ca_monop_dispatch.h +5 -0
- data/ext/ca_obj_array.c +223 -56
- data/ext/ca_obj_bincmp.c +172 -138
- data/ext/ca_obj_binop.c +116 -230
- data/ext/ca_obj_bitarray.c +40 -26
- data/ext/ca_obj_bitfield.c +100 -68
- data/ext/ca_obj_block.c +19 -9
- data/ext/ca_obj_byte_swap.c +45 -46
- data/ext/ca_obj_const_string.c +269 -44
- data/ext/ca_obj_face.c +612 -89
- data/ext/ca_obj_face.h +111 -47
- data/ext/ca_obj_fake.c +36 -79
- data/ext/ca_obj_farray.c +7 -3
- data/ext/ca_obj_field.c +33 -8
- data/ext/ca_obj_fixlen_string.c +23 -24
- data/ext/ca_obj_grid.c +541 -210
- data/ext/ca_obj_meld.c +331 -111
- data/ext/ca_obj_moncmp.c +80 -65
- data/ext/ca_obj_monop.c +177 -149
- data/ext/ca_obj_object.c +664 -248
- data/ext/ca_obj_record.c +63 -23
- data/ext/ca_obj_reduce.c +18 -16
- data/ext/ca_obj_refer.c +140 -58
- data/ext/ca_obj_remap.c +85 -24
- data/ext/ca_obj_repeat.c +24 -9
- data/ext/ca_obj_roll.c +121 -16
- data/ext/ca_obj_select.c +61 -58
- data/ext/ca_obj_select_axis.c +73 -107
- data/ext/ca_obj_shift.c +32 -102
- data/ext/ca_obj_stack.c +372 -122
- data/ext/ca_obj_stride.c +348 -140
- data/ext/ca_obj_string.c +88 -22
- data/ext/ca_obj_tile.c +38 -21
- data/ext/ca_obj_time.c +45 -31
- data/ext/ca_obj_timedelta.c +43 -29
- data/ext/ca_obj_transpose.c +17 -6
- data/ext/ca_obj_triop.c +125 -141
- data/ext/ca_obj_window.c +330 -44
- data/ext/ca_op_ipower.c +24 -11
- data/ext/ca_op_powi.h +57 -30
- data/ext/ca_pow5_table.h +656 -0
- data/ext/ca_sort_kernels.h +70 -0
- data/ext/ca_sweep_engine.c +104 -81
- data/ext/ca_sweep_engine.h +7 -20
- data/ext/ca_triop_dispatch.c +4 -1
- data/ext/ca_triop_dispatch.h +5 -2
- data/ext/caframe_csv_reader.c +542 -0
- data/ext/carray.h +241 -92
- data/ext/carray_access.c +608 -276
- data/ext/carray_address_basis.c +494 -97
- data/ext/carray_attribute.c +129 -4
- data/ext/carray_bincount.c +39 -7
- data/ext/carray_broadcast.c +56 -19
- data/ext/carray_build_flags.h +1 -1
- data/ext/carray_call_cfunc.c +108 -28
- data/ext/carray_cast.c +1576 -223
- data/ext/carray_cast_func.rb +77 -24
- data/ext/carray_class.c +4 -3
- data/ext/carray_conversion.c +208 -75
- data/ext/carray_copy.c +82 -24
- data/ext/carray_core.c +646 -162
- data/ext/carray_count.c +171 -88
- data/ext/carray_element.c +94 -60
- data/ext/carray_factorize.c +670 -324
- data/ext/carray_generate.c +260 -83
- data/ext/carray_histogram.c +209 -106
- data/ext/carray_hold.c +14 -16
- data/ext/carray_index_classifier.c +422 -243
- data/ext/carray_internal.h +692 -3
- data/ext/carray_kernels_bincmp.c +7 -0
- data/ext/carray_kernels_binop.c +487 -120
- data/ext/carray_kernels_init.c +653 -50
- data/ext/carray_kernels_moncmp.c +15 -8
- data/ext/carray_kernels_monop.c +99 -43
- data/ext/carray_kernels_reduce_aggregate.c +3925 -6112
- data/ext/carray_kernels_reduce_boolean.c +112 -36
- data/ext/carray_kernels_reduce_cumulative.c +2127 -6903
- data/ext/carray_kernels_reduce_extreme.c +3032 -2892
- data/ext/carray_kernels_reduce_variance.c +439 -500
- data/ext/carray_kernels_scan.c +1097 -488
- data/ext/carray_kernels_search.c +3787 -2176
- data/ext/carray_kernels_sort.c +1200 -920
- data/ext/carray_kernels_triop.c +479 -7
- data/ext/carray_key_windows.c +216 -0
- data/ext/carray_lazy.c +967 -153
- data/ext/carray_loop.c +81 -65
- data/ext/carray_mask.c +910 -324
- data/ext/carray_math_kernel.h +1 -0
- data/ext/carray_median_percentile.c +299 -100
- data/ext/carray_memory_view.c +872 -758
- data/ext/carray_operator.c +1171 -364
- data/ext/carray_order.c +505 -133
- data/ext/carray_partition.c +112 -65
- data/ext/carray_random.c +327 -239
- data/ext/carray_round.c +273 -0
- data/ext/carray_scatter.c +346 -78
- data/ext/carray_segment.c +257 -0
- data/ext/carray_slab.c +249 -86
- data/ext/carray_sort.c +224 -227
- data/ext/carray_sort_kernel.c +8 -1
- data/ext/carray_struct.c +118 -39
- data/ext/carray_test.c +193 -69
- data/ext/carray_time_text.c +1182 -0
- data/ext/carray_undef.c +4 -0
- data/ext/carray_utils.c +579 -113
- data/ext/extconf.rb +27 -2
- data/ext/mk_call_cfunc.rb +19 -4
- data/ext/mk_pow5_table.rb +35 -0
- data/ext/mkkernel.rb +1202 -1014
- data/ext/ruby_carray.c +17 -5
- data/ext/version.h +4 -4
- data/ext/version.rb +4 -2
- data/lib/carray/attribute.rb +160 -17
- data/lib/carray/autoload_carray.rb +23 -27
- data/lib/carray/autoload_method_extension.rb +20 -5
- data/lib/carray/axis_group.rb +360 -63
- data/lib/carray/basics.rb +162 -28
- data/lib/carray/bincount_nd.rb +18 -2
- data/lib/carray/block_iterator.rb +231 -58
- data/lib/carray/boolean_reduce.rb +34 -42
- data/lib/carray/categorical.rb +242 -52
- data/lib/carray/categorical_iterator.rb +437 -827
- data/lib/carray/complex.rb +41 -34
- data/lib/carray/conditional.rb +150 -14
- data/lib/carray/const_string.rb +59 -4
- data/lib/carray/construct.rb +15 -11
- data/lib/carray/data_type_extension.rb +1 -0
- data/lib/carray/distance_limit.rb +77 -0
- data/lib/carray/fixlen_string.rb +7 -1
- data/lib/carray/frame/column_verbs.rb +70 -0
- data/lib/carray/frame/concat.rb +157 -6
- data/lib/carray/frame/convert.rb +82 -7
- data/lib/carray/frame/csv_parser.rb +688 -87
- data/lib/carray/frame/describe.rb +80 -0
- data/lib/carray/frame/frame.rb +369 -45
- data/lib/carray/frame/group.rb +631 -90
- data/lib/carray/frame/io.rb +506 -79
- data/lib/carray/frame/join.rb +411 -62
- data/lib/carray/frame/records.rb +116 -19
- data/lib/carray/frame/reshape.rb +455 -0
- data/lib/carray/frame/sort.rb +30 -18
- data/lib/carray/frame/verbs.rb +868 -61
- data/lib/carray/frame/windows.rb +117 -0
- data/lib/carray/frame.rb +4 -0
- data/lib/carray/fuse_source.rb +118 -2
- data/lib/carray/fusion.rb +257 -42
- data/lib/carray/histogram.rb +6 -1
- data/lib/carray/inspect.rb +54 -13
- data/lib/carray/iterator.rb +99 -9
- data/lib/carray/key_windows.rb +620 -0
- data/lib/carray/lazy.rb +216 -193
- data/lib/carray/mask_gap_fill.rb +112 -92
- data/lib/carray/math.rb +32 -19
- data/lib/carray/meld_reduce.rb +52 -21
- data/lib/carray/methods/align_addr.rb +8 -4
- data/lib/carray/methods/bin.rb +26 -18
- data/lib/carray/methods/bincount.rb +18 -2
- data/lib/carray/methods/bit_string.rb +15 -4
- data/lib/carray/methods/choose.rb +16 -3
- data/lib/carray/methods/composition.rb +18 -10
- data/lib/carray/methods/factorize.rb +2 -2
- data/lib/carray/methods/gather_nd.rb +25 -5
- data/lib/carray/methods/insert_block.rb +9 -14
- data/lib/carray/methods/is_between.rb +59 -0
- data/lib/carray/methods/is_in.rb +140 -10
- data/lib/carray/methods/join.rb +2 -7
- data/lib/carray/methods/lag.rb +49 -0
- data/lib/carray/methods/locate_addr.rb +182 -45
- data/lib/carray/methods/mode.rb +18 -1
- data/lib/carray/methods/nunique.rb +11 -6
- data/lib/carray/methods/repeat.rb +1 -20
- data/lib/carray/methods/resize.rb +21 -23
- data/lib/carray/methods/snap.rb +34 -12
- data/lib/carray/methods/unique.rb +11 -2
- data/lib/carray/methods/value_counts.rb +4 -11
- data/lib/carray/record_order.rb +208 -0
- data/lib/carray/rng.rb +3 -0
- data/lib/carray/runtime.rb +65 -17
- data/lib/carray/segment_iterator.rb +1221 -0
- data/lib/carray/serialize.rb +214 -30
- data/lib/carray/slab_iterator.rb +101 -27
- data/lib/carray/stack.rb +10 -4
- data/lib/carray/string.rb +105 -5
- data/lib/carray/string_operation_extension.rb +12 -4
- data/lib/carray/struct.rb +137 -58
- data/lib/carray/struct_builder.rb +124 -17
- data/lib/carray/time.rb +1222 -186
- data/lib/carray/window_iterator.rb +242 -81
- data/lib/carray.rb +9 -2
- data/yard-stubs/ca_obj_array.rb +4 -4
- data/yard-stubs/ca_obj_bitarray.rb +7 -0
- data/yard-stubs/ca_obj_bitfield.rb +23 -12
- data/yard-stubs/ca_obj_fake.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +5 -1
- data/yard-stubs/ca_obj_grid.rb +21 -10
- data/yard-stubs/ca_obj_refer.rb +5 -4
- data/yard-stubs/ca_obj_roll.rb +2 -3
- data/yard-stubs/ca_obj_shift.rb +5 -1
- data/yard-stubs/ca_obj_stride.rb +10 -7
- data/yard-stubs/ca_obj_tile.rb +1 -1
- data/yard-stubs/ca_obj_transpose.rb +1 -1
- data/yard-stubs/ca_obj_window.rb +9 -5
- data/yard-stubs/carray_access.rb +11 -5
- data/yard-stubs/carray_attribute.rb +0 -5
- data/yard-stubs/carray_broadcast.rb +1 -1
- data/yard-stubs/carray_cast.rb +88 -43
- data/yard-stubs/carray_conversion.rb +15 -2
- data/yard-stubs/carray_copy.rb +12 -5
- data/yard-stubs/carray_core.rb +3 -3
- data/yard-stubs/carray_count.rb +9 -0
- data/yard-stubs/carray_element.rb +10 -4
- data/yard-stubs/carray_generate.rb +21 -1
- data/yard-stubs/carray_lazy.rb +5 -1
- data/yard-stubs/carray_loop.rb +4 -1
- data/yard-stubs/carray_mask.rb +60 -12
- data/yard-stubs/carray_math.rb +52 -14
- data/yard-stubs/carray_median_percentile.rb +15 -8
- data/yard-stubs/carray_memory_view.rb +40 -23
- data/yard-stubs/carray_order.rb +61 -29
- data/yard-stubs/carray_random.rb +13 -4
- data/yard-stubs/carray_scatter.rb +21 -9
- data/yard-stubs/carray_segment.rb +72 -0
- data/yard-stubs/carray_slab.rb +10 -2
- data/yard-stubs/carray_sort.rb +49 -8
- data/yard-stubs/carray_test.rb +15 -3
- data/yard-stubs/carray_utils.rb +0 -26
- metadata +19 -5
- data/ext/ca_for_each_element.h +0 -239
- data/ext/carray_kernels_map.c +0 -3467
- data/lib/carray/arrow_tensor.rb +0 -401
- data/lib/carray/table.rb +0 -108
data/ext/carray_kernels_binop.c
CHANGED
|
@@ -24,6 +24,13 @@
|
|
|
24
24
|
probed by operation-table function pointer (obj_type is runtime-
|
|
25
25
|
assigned, so no CA_OBJ_STACK compile-time constant exists). */
|
|
26
26
|
extern ca_operation_function_t ca_stack_func;
|
|
27
|
+
/* The square root of a variance: an ε-negative from rounding becomes 0,
|
|
28
|
+
a NaN stays NaN (fmax(NaN, 0.0) is 0.0). */
|
|
29
|
+
#ifndef CARRAY_SQRT_CLAMP_DEFINED
|
|
30
|
+
#define CARRAY_SQRT_CLAMP_DEFINED
|
|
31
|
+
static inline double ca_sqrt_clamp (double v) { return sqrt(v < 0.0 ? 0.0 : v); }
|
|
32
|
+
#endif
|
|
33
|
+
|
|
27
34
|
/* BOOL2VAL: bool -> Ruby (Qtrue/Qfalse). Used as ruby_scalar wrapper
|
|
28
35
|
for the all/any flat-reduction Ruby surface so `a.all` / `a.any`
|
|
29
36
|
return real true/false, not Integer 0/1. (BOOL2OBJ already exists
|
|
@@ -507,7 +514,7 @@ ca_binop_pmax_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
507
514
|
p1 = q1 + k*i1;
|
|
508
515
|
p2 = q2 + k*i2;
|
|
509
516
|
p3 = q3 + k*i3;
|
|
510
|
-
{ (*p3) =
|
|
517
|
+
{ (*p3) = ca_obj_extremum_replaces((*p2), (*p1), rb_intern(">")) ? (*p2) : (*p1); }
|
|
511
518
|
}
|
|
512
519
|
}
|
|
513
520
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -521,13 +528,13 @@ ca_binop_pmax_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
521
528
|
#pragma omp simd
|
|
522
529
|
for (k=0; k<n; k++) {
|
|
523
530
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
524
|
-
{ (*p3) =
|
|
531
|
+
{ (*p3) = ca_obj_extremum_replaces((*p2), (*p1), rb_intern(">")) ? (*p2) : (*p1); }
|
|
525
532
|
}
|
|
526
533
|
} else {
|
|
527
534
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
528
535
|
VALUE *p1 = q1, *p2 = q2, *p3 = q3;
|
|
529
536
|
for (k=0; k<n; k++) {
|
|
530
|
-
{ (*p3) =
|
|
537
|
+
{ (*p3) = ca_obj_extremum_replaces((*p2), (*p1), rb_intern(">")) ? (*p2) : (*p1); }
|
|
531
538
|
p1 += i1; p2 += i2; p3 += i3;
|
|
532
539
|
}
|
|
533
540
|
}
|
|
@@ -1036,7 +1043,7 @@ ca_binop_pmin_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
1036
1043
|
p1 = q1 + k*i1;
|
|
1037
1044
|
p2 = q2 + k*i2;
|
|
1038
1045
|
p3 = q3 + k*i3;
|
|
1039
|
-
{ (*p3) =
|
|
1046
|
+
{ (*p3) = ca_obj_extremum_replaces((*p2), (*p1), rb_intern("<")) ? (*p2) : (*p1); }
|
|
1040
1047
|
}
|
|
1041
1048
|
}
|
|
1042
1049
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -1050,13 +1057,13 @@ ca_binop_pmin_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
1050
1057
|
#pragma omp simd
|
|
1051
1058
|
for (k=0; k<n; k++) {
|
|
1052
1059
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
1053
|
-
{ (*p3) =
|
|
1060
|
+
{ (*p3) = ca_obj_extremum_replaces((*p2), (*p1), rb_intern("<")) ? (*p2) : (*p1); }
|
|
1054
1061
|
}
|
|
1055
1062
|
} else {
|
|
1056
1063
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
1057
1064
|
VALUE *p1 = q1, *p2 = q2, *p3 = q3;
|
|
1058
1065
|
for (k=0; k<n; k++) {
|
|
1059
|
-
{ (*p3) =
|
|
1066
|
+
{ (*p3) = ca_obj_extremum_replaces((*p2), (*p1), rb_intern("<")) ? (*p2) : (*p1); }
|
|
1060
1067
|
p1 += i1; p2 += i2; p3 += i3;
|
|
1061
1068
|
}
|
|
1062
1069
|
}
|
|
@@ -1475,7 +1482,7 @@ ca_binop_maximum_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1475
1482
|
p1 = q1 + k*i1;
|
|
1476
1483
|
p2 = q2 + k*i2;
|
|
1477
1484
|
p3 = q3 + k*i3;
|
|
1478
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
1485
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) > (*p2) || ((*p1) == (*p2) && !signbit(*p1))) ? (*p1) : (*p2); }
|
|
1479
1486
|
}
|
|
1480
1487
|
}
|
|
1481
1488
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -1489,13 +1496,13 @@ ca_binop_maximum_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1489
1496
|
#pragma omp simd
|
|
1490
1497
|
for (k=0; k<n; k++) {
|
|
1491
1498
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
1492
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
1499
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) > (*p2) || ((*p1) == (*p2) && !signbit(*p1))) ? (*p1) : (*p2); }
|
|
1493
1500
|
}
|
|
1494
1501
|
} else {
|
|
1495
1502
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
1496
1503
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
1497
1504
|
for (k=0; k<n; k++) {
|
|
1498
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
1505
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) > (*p2) || ((*p1) == (*p2) && !signbit(*p1))) ? (*p1) : (*p2); }
|
|
1499
1506
|
p1 += i1; p2 += i2; p3 += i3;
|
|
1500
1507
|
}
|
|
1501
1508
|
}
|
|
@@ -1520,7 +1527,7 @@ ca_binop_maximum_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1520
1527
|
p1 = q1 + k*i1;
|
|
1521
1528
|
p2 = q2 + k*i2;
|
|
1522
1529
|
p3 = q3 + k*i3;
|
|
1523
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
1530
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) > (*p2) || ((*p1) == (*p2) && !signbit(*p1))) ? (*p1) : (*p2); }
|
|
1524
1531
|
}
|
|
1525
1532
|
}
|
|
1526
1533
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -1534,13 +1541,13 @@ ca_binop_maximum_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1534
1541
|
#pragma omp simd
|
|
1535
1542
|
for (k=0; k<n; k++) {
|
|
1536
1543
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
1537
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
1544
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) > (*p2) || ((*p1) == (*p2) && !signbit(*p1))) ? (*p1) : (*p2); }
|
|
1538
1545
|
}
|
|
1539
1546
|
} else {
|
|
1540
1547
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
1541
1548
|
double *p1 = q1, *p2 = q2, *p3 = q3;
|
|
1542
1549
|
for (k=0; k<n; k++) {
|
|
1543
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
1550
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) > (*p2) || ((*p1) == (*p2) && !signbit(*p1))) ? (*p1) : (*p2); }
|
|
1544
1551
|
p1 += i1; p2 += i2; p3 += i3;
|
|
1545
1552
|
}
|
|
1546
1553
|
}
|
|
@@ -1565,7 +1572,7 @@ ca_binop_maximum_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
1565
1572
|
p1 = q1 + k*i1;
|
|
1566
1573
|
p2 = q2 + k*i2;
|
|
1567
1574
|
p3 = q3 + k*i3;
|
|
1568
|
-
{ (*p3) =
|
|
1575
|
+
{ (*p3) = CA_OBJ_ISNAN(*p1) ? (*p1) : CA_OBJ_ISNAN(*p2) ? (*p2) : ca_obj_cmp((*p2), (*p1)) > 0 ? (*p2) : (*p1); }
|
|
1569
1576
|
}
|
|
1570
1577
|
}
|
|
1571
1578
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -1579,13 +1586,13 @@ ca_binop_maximum_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
1579
1586
|
#pragma omp simd
|
|
1580
1587
|
for (k=0; k<n; k++) {
|
|
1581
1588
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
1582
|
-
{ (*p3) =
|
|
1589
|
+
{ (*p3) = CA_OBJ_ISNAN(*p1) ? (*p1) : CA_OBJ_ISNAN(*p2) ? (*p2) : ca_obj_cmp((*p2), (*p1)) > 0 ? (*p2) : (*p1); }
|
|
1583
1590
|
}
|
|
1584
1591
|
} else {
|
|
1585
1592
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
1586
1593
|
VALUE *p1 = q1, *p2 = q2, *p3 = q3;
|
|
1587
1594
|
for (k=0; k<n; k++) {
|
|
1588
|
-
{ (*p3) =
|
|
1595
|
+
{ (*p3) = CA_OBJ_ISNAN(*p1) ? (*p1) : CA_OBJ_ISNAN(*p2) ? (*p2) : ca_obj_cmp((*p2), (*p1)) > 0 ? (*p2) : (*p1); }
|
|
1589
1596
|
p1 += i1; p2 += i2; p3 += i3;
|
|
1590
1597
|
}
|
|
1591
1598
|
}
|
|
@@ -2004,7 +2011,7 @@ ca_binop_minimum_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
2004
2011
|
p1 = q1 + k*i1;
|
|
2005
2012
|
p2 = q2 + k*i2;
|
|
2006
2013
|
p3 = q3 + k*i3;
|
|
2007
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
2014
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) < (*p2) || ((*p1) == (*p2) && signbit(*p1))) ? (*p1) : (*p2); }
|
|
2008
2015
|
}
|
|
2009
2016
|
}
|
|
2010
2017
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -2018,13 +2025,13 @@ ca_binop_minimum_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
2018
2025
|
#pragma omp simd
|
|
2019
2026
|
for (k=0; k<n; k++) {
|
|
2020
2027
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
2021
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
2028
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) < (*p2) || ((*p1) == (*p2) && signbit(*p1))) ? (*p1) : (*p2); }
|
|
2022
2029
|
}
|
|
2023
2030
|
} else {
|
|
2024
2031
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
2025
2032
|
float *p1 = q1, *p2 = q2, *p3 = q3;
|
|
2026
2033
|
for (k=0; k<n; k++) {
|
|
2027
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
2034
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) < (*p2) || ((*p1) == (*p2) && signbit(*p1))) ? (*p1) : (*p2); }
|
|
2028
2035
|
p1 += i1; p2 += i2; p3 += i3;
|
|
2029
2036
|
}
|
|
2030
2037
|
}
|
|
@@ -2049,7 +2056,7 @@ ca_binop_minimum_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
2049
2056
|
p1 = q1 + k*i1;
|
|
2050
2057
|
p2 = q2 + k*i2;
|
|
2051
2058
|
p3 = q3 + k*i3;
|
|
2052
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
2059
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) < (*p2) || ((*p1) == (*p2) && signbit(*p1))) ? (*p1) : (*p2); }
|
|
2053
2060
|
}
|
|
2054
2061
|
}
|
|
2055
2062
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -2063,13 +2070,13 @@ ca_binop_minimum_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
2063
2070
|
#pragma omp simd
|
|
2064
2071
|
for (k=0; k<n; k++) {
|
|
2065
2072
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
2066
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
2073
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) < (*p2) || ((*p1) == (*p2) && signbit(*p1))) ? (*p1) : (*p2); }
|
|
2067
2074
|
}
|
|
2068
2075
|
} else {
|
|
2069
2076
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
2070
2077
|
double *p1 = q1, *p2 = q2, *p3 = q3;
|
|
2071
2078
|
for (k=0; k<n; k++) {
|
|
2072
|
-
{ (*p3) = isnan(*p1) ? (*p1) :
|
|
2079
|
+
{ (*p3) = isnan(*p1) ? (*p1) : isnan(*p2) ? (*p2) : ((*p1) < (*p2) || ((*p1) == (*p2) && signbit(*p1))) ? (*p1) : (*p2); }
|
|
2073
2080
|
p1 += i1; p2 += i2; p3 += i3;
|
|
2074
2081
|
}
|
|
2075
2082
|
}
|
|
@@ -2094,7 +2101,7 @@ ca_binop_minimum_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
2094
2101
|
p1 = q1 + k*i1;
|
|
2095
2102
|
p2 = q2 + k*i2;
|
|
2096
2103
|
p3 = q3 + k*i3;
|
|
2097
|
-
{ (*p3) =
|
|
2104
|
+
{ (*p3) = CA_OBJ_ISNAN(*p1) ? (*p1) : CA_OBJ_ISNAN(*p2) ? (*p2) : ca_obj_cmp((*p2), (*p1)) < 0 ? (*p2) : (*p1); }
|
|
2098
2105
|
}
|
|
2099
2106
|
}
|
|
2100
2107
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -2108,13 +2115,13 @@ ca_binop_minimum_VALUE (ca_size_t n, boolean8_t *m,
|
|
|
2108
2115
|
#pragma omp simd
|
|
2109
2116
|
for (k=0; k<n; k++) {
|
|
2110
2117
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
2111
|
-
{ (*p3) =
|
|
2118
|
+
{ (*p3) = CA_OBJ_ISNAN(*p1) ? (*p1) : CA_OBJ_ISNAN(*p2) ? (*p2) : ca_obj_cmp((*p2), (*p1)) < 0 ? (*p2) : (*p1); }
|
|
2112
2119
|
}
|
|
2113
2120
|
} else {
|
|
2114
2121
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
2115
2122
|
VALUE *p1 = q1, *p2 = q2, *p3 = q3;
|
|
2116
2123
|
for (k=0; k<n; k++) {
|
|
2117
|
-
{ (*p3) =
|
|
2124
|
+
{ (*p3) = CA_OBJ_ISNAN(*p1) ? (*p1) : CA_OBJ_ISNAN(*p2) ? (*p2) : ca_obj_cmp((*p2), (*p1)) < 0 ? (*p2) : (*p1); }
|
|
2118
2125
|
p1 += i1; p2 += i2; p3 += i3;
|
|
2119
2126
|
}
|
|
2120
2127
|
}
|
|
@@ -4032,7 +4039,8 @@ ca_binop_div_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
4032
4039
|
p3 = q3 + k*i3;
|
|
4033
4040
|
{
|
|
4034
4041
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4035
|
-
{
|
|
4042
|
+
if ((*p2)==-1) { (*p3) = (int8_t) (0 - (uint64_t) (*p1)); }
|
|
4043
|
+
else {
|
|
4036
4044
|
int8_t _q = (*p1) / (*p2);
|
|
4037
4045
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4038
4046
|
(*p3) = _q;
|
|
@@ -4053,7 +4061,8 @@ ca_binop_div_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
4053
4061
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4054
4062
|
{
|
|
4055
4063
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4056
|
-
{
|
|
4064
|
+
if ((*p2)==-1) { (*p3) = (int8_t) (0 - (uint64_t) (*p1)); }
|
|
4065
|
+
else {
|
|
4057
4066
|
int8_t _q = (*p1) / (*p2);
|
|
4058
4067
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4059
4068
|
(*p3) = _q;
|
|
@@ -4066,7 +4075,8 @@ ca_binop_div_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
4066
4075
|
for (k=0; k<n; k++) {
|
|
4067
4076
|
{
|
|
4068
4077
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4069
|
-
{
|
|
4078
|
+
if ((*p2)==-1) { (*p3) = (int8_t) (0 - (uint64_t) (*p1)); }
|
|
4079
|
+
else {
|
|
4070
4080
|
int8_t _q = (*p1) / (*p2);
|
|
4071
4081
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4072
4082
|
(*p3) = _q;
|
|
@@ -4143,7 +4153,8 @@ ca_binop_div_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
4143
4153
|
p3 = q3 + k*i3;
|
|
4144
4154
|
{
|
|
4145
4155
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4146
|
-
{
|
|
4156
|
+
if ((*p2)==-1) { (*p3) = (int16_t) (0 - (uint64_t) (*p1)); }
|
|
4157
|
+
else {
|
|
4147
4158
|
int16_t _q = (*p1) / (*p2);
|
|
4148
4159
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4149
4160
|
(*p3) = _q;
|
|
@@ -4164,7 +4175,8 @@ ca_binop_div_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
4164
4175
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4165
4176
|
{
|
|
4166
4177
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4167
|
-
{
|
|
4178
|
+
if ((*p2)==-1) { (*p3) = (int16_t) (0 - (uint64_t) (*p1)); }
|
|
4179
|
+
else {
|
|
4168
4180
|
int16_t _q = (*p1) / (*p2);
|
|
4169
4181
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4170
4182
|
(*p3) = _q;
|
|
@@ -4177,7 +4189,8 @@ ca_binop_div_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
4177
4189
|
for (k=0; k<n; k++) {
|
|
4178
4190
|
{
|
|
4179
4191
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4180
|
-
{
|
|
4192
|
+
if ((*p2)==-1) { (*p3) = (int16_t) (0 - (uint64_t) (*p1)); }
|
|
4193
|
+
else {
|
|
4181
4194
|
int16_t _q = (*p1) / (*p2);
|
|
4182
4195
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4183
4196
|
(*p3) = _q;
|
|
@@ -4254,7 +4267,8 @@ ca_binop_div_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4254
4267
|
p3 = q3 + k*i3;
|
|
4255
4268
|
{
|
|
4256
4269
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4257
|
-
{
|
|
4270
|
+
if ((*p2)==-1) { (*p3) = (int32_t) (0 - (uint64_t) (*p1)); }
|
|
4271
|
+
else {
|
|
4258
4272
|
int32_t _q = (*p1) / (*p2);
|
|
4259
4273
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4260
4274
|
(*p3) = _q;
|
|
@@ -4275,7 +4289,8 @@ ca_binop_div_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4275
4289
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4276
4290
|
{
|
|
4277
4291
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4278
|
-
{
|
|
4292
|
+
if ((*p2)==-1) { (*p3) = (int32_t) (0 - (uint64_t) (*p1)); }
|
|
4293
|
+
else {
|
|
4279
4294
|
int32_t _q = (*p1) / (*p2);
|
|
4280
4295
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4281
4296
|
(*p3) = _q;
|
|
@@ -4288,7 +4303,8 @@ ca_binop_div_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4288
4303
|
for (k=0; k<n; k++) {
|
|
4289
4304
|
{
|
|
4290
4305
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4291
|
-
{
|
|
4306
|
+
if ((*p2)==-1) { (*p3) = (int32_t) (0 - (uint64_t) (*p1)); }
|
|
4307
|
+
else {
|
|
4292
4308
|
int32_t _q = (*p1) / (*p2);
|
|
4293
4309
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4294
4310
|
(*p3) = _q;
|
|
@@ -4365,7 +4381,8 @@ ca_binop_div_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
4365
4381
|
p3 = q3 + k*i3;
|
|
4366
4382
|
{
|
|
4367
4383
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4368
|
-
{
|
|
4384
|
+
if ((*p2)==-1) { (*p3) = (int64_t) (0 - (uint64_t) (*p1)); }
|
|
4385
|
+
else {
|
|
4369
4386
|
int64_t _q = (*p1) / (*p2);
|
|
4370
4387
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4371
4388
|
(*p3) = _q;
|
|
@@ -4386,7 +4403,8 @@ ca_binop_div_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
4386
4403
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4387
4404
|
{
|
|
4388
4405
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4389
|
-
{
|
|
4406
|
+
if ((*p2)==-1) { (*p3) = (int64_t) (0 - (uint64_t) (*p1)); }
|
|
4407
|
+
else {
|
|
4390
4408
|
int64_t _q = (*p1) / (*p2);
|
|
4391
4409
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4392
4410
|
(*p3) = _q;
|
|
@@ -4399,7 +4417,8 @@ ca_binop_div_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
4399
4417
|
for (k=0; k<n; k++) {
|
|
4400
4418
|
{
|
|
4401
4419
|
if ((*p2)==0) {ca_zerodiv();};
|
|
4402
|
-
{
|
|
4420
|
+
if ((*p2)==-1) { (*p3) = (int64_t) (0 - (uint64_t) (*p1)); }
|
|
4421
|
+
else {
|
|
4403
4422
|
int64_t _q = (*p1) / (*p2);
|
|
4404
4423
|
if ( (*p1) % (*p2) != 0 && (((*p1) < 0) != ((*p2) < 0)) ) { _q -= 1; }
|
|
4405
4424
|
(*p3) = _q;
|
|
@@ -4812,7 +4831,15 @@ ca_binop_rcp_mul_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
4812
4831
|
p1 = q1 + k*i1;
|
|
4813
4832
|
p2 = q2 + k*i2;
|
|
4814
4833
|
p3 = q3 + k*i3;
|
|
4815
|
-
{
|
|
4834
|
+
{
|
|
4835
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
4836
|
+
if ((*p1)==-1) { (*p3) = (int8_t) (0 - (uint64_t) (*p2)); }
|
|
4837
|
+
else {
|
|
4838
|
+
int8_t _q = (*p2) / (*p1);
|
|
4839
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
4840
|
+
(*p3) = _q;
|
|
4841
|
+
}
|
|
4842
|
+
}
|
|
4816
4843
|
}
|
|
4817
4844
|
}
|
|
4818
4845
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -4826,13 +4853,29 @@ ca_binop_rcp_mul_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
4826
4853
|
#pragma omp simd
|
|
4827
4854
|
for (k=0; k<n; k++) {
|
|
4828
4855
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4829
|
-
{
|
|
4856
|
+
{
|
|
4857
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
4858
|
+
if ((*p1)==-1) { (*p3) = (int8_t) (0 - (uint64_t) (*p2)); }
|
|
4859
|
+
else {
|
|
4860
|
+
int8_t _q = (*p2) / (*p1);
|
|
4861
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
4862
|
+
(*p3) = _q;
|
|
4863
|
+
}
|
|
4864
|
+
}
|
|
4830
4865
|
}
|
|
4831
4866
|
} else {
|
|
4832
4867
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
4833
4868
|
int8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
4834
4869
|
for (k=0; k<n; k++) {
|
|
4835
|
-
{
|
|
4870
|
+
{
|
|
4871
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
4872
|
+
if ((*p1)==-1) { (*p3) = (int8_t) (0 - (uint64_t) (*p2)); }
|
|
4873
|
+
else {
|
|
4874
|
+
int8_t _q = (*p2) / (*p1);
|
|
4875
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
4876
|
+
(*p3) = _q;
|
|
4877
|
+
}
|
|
4878
|
+
}
|
|
4836
4879
|
p1 += i1; p2 += i2; p3 += i3;
|
|
4837
4880
|
}
|
|
4838
4881
|
}
|
|
@@ -4902,7 +4945,15 @@ ca_binop_rcp_mul_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
4902
4945
|
p1 = q1 + k*i1;
|
|
4903
4946
|
p2 = q2 + k*i2;
|
|
4904
4947
|
p3 = q3 + k*i3;
|
|
4905
|
-
{
|
|
4948
|
+
{
|
|
4949
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
4950
|
+
if ((*p1)==-1) { (*p3) = (int16_t) (0 - (uint64_t) (*p2)); }
|
|
4951
|
+
else {
|
|
4952
|
+
int16_t _q = (*p2) / (*p1);
|
|
4953
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
4954
|
+
(*p3) = _q;
|
|
4955
|
+
}
|
|
4956
|
+
}
|
|
4906
4957
|
}
|
|
4907
4958
|
}
|
|
4908
4959
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -4916,13 +4967,29 @@ ca_binop_rcp_mul_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
4916
4967
|
#pragma omp simd
|
|
4917
4968
|
for (k=0; k<n; k++) {
|
|
4918
4969
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
4919
|
-
{
|
|
4970
|
+
{
|
|
4971
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
4972
|
+
if ((*p1)==-1) { (*p3) = (int16_t) (0 - (uint64_t) (*p2)); }
|
|
4973
|
+
else {
|
|
4974
|
+
int16_t _q = (*p2) / (*p1);
|
|
4975
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
4976
|
+
(*p3) = _q;
|
|
4977
|
+
}
|
|
4978
|
+
}
|
|
4920
4979
|
}
|
|
4921
4980
|
} else {
|
|
4922
4981
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
4923
4982
|
int16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
4924
4983
|
for (k=0; k<n; k++) {
|
|
4925
|
-
{
|
|
4984
|
+
{
|
|
4985
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
4986
|
+
if ((*p1)==-1) { (*p3) = (int16_t) (0 - (uint64_t) (*p2)); }
|
|
4987
|
+
else {
|
|
4988
|
+
int16_t _q = (*p2) / (*p1);
|
|
4989
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
4990
|
+
(*p3) = _q;
|
|
4991
|
+
}
|
|
4992
|
+
}
|
|
4926
4993
|
p1 += i1; p2 += i2; p3 += i3;
|
|
4927
4994
|
}
|
|
4928
4995
|
}
|
|
@@ -4992,7 +5059,15 @@ ca_binop_rcp_mul_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
4992
5059
|
p1 = q1 + k*i1;
|
|
4993
5060
|
p2 = q2 + k*i2;
|
|
4994
5061
|
p3 = q3 + k*i3;
|
|
4995
|
-
{
|
|
5062
|
+
{
|
|
5063
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
5064
|
+
if ((*p1)==-1) { (*p3) = (int32_t) (0 - (uint64_t) (*p2)); }
|
|
5065
|
+
else {
|
|
5066
|
+
int32_t _q = (*p2) / (*p1);
|
|
5067
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
5068
|
+
(*p3) = _q;
|
|
5069
|
+
}
|
|
5070
|
+
}
|
|
4996
5071
|
}
|
|
4997
5072
|
}
|
|
4998
5073
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5006,13 +5081,29 @@ ca_binop_rcp_mul_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
5006
5081
|
#pragma omp simd
|
|
5007
5082
|
for (k=0; k<n; k++) {
|
|
5008
5083
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5009
|
-
{
|
|
5084
|
+
{
|
|
5085
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
5086
|
+
if ((*p1)==-1) { (*p3) = (int32_t) (0 - (uint64_t) (*p2)); }
|
|
5087
|
+
else {
|
|
5088
|
+
int32_t _q = (*p2) / (*p1);
|
|
5089
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
5090
|
+
(*p3) = _q;
|
|
5091
|
+
}
|
|
5092
|
+
}
|
|
5010
5093
|
}
|
|
5011
5094
|
} else {
|
|
5012
5095
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5013
5096
|
int32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5014
5097
|
for (k=0; k<n; k++) {
|
|
5015
|
-
{
|
|
5098
|
+
{
|
|
5099
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
5100
|
+
if ((*p1)==-1) { (*p3) = (int32_t) (0 - (uint64_t) (*p2)); }
|
|
5101
|
+
else {
|
|
5102
|
+
int32_t _q = (*p2) / (*p1);
|
|
5103
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
5104
|
+
(*p3) = _q;
|
|
5105
|
+
}
|
|
5106
|
+
}
|
|
5016
5107
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5017
5108
|
}
|
|
5018
5109
|
}
|
|
@@ -5082,7 +5173,15 @@ ca_binop_rcp_mul_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
5082
5173
|
p1 = q1 + k*i1;
|
|
5083
5174
|
p2 = q2 + k*i2;
|
|
5084
5175
|
p3 = q3 + k*i3;
|
|
5085
|
-
{
|
|
5176
|
+
{
|
|
5177
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
5178
|
+
if ((*p1)==-1) { (*p3) = (int64_t) (0 - (uint64_t) (*p2)); }
|
|
5179
|
+
else {
|
|
5180
|
+
int64_t _q = (*p2) / (*p1);
|
|
5181
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
5182
|
+
(*p3) = _q;
|
|
5183
|
+
}
|
|
5184
|
+
}
|
|
5086
5185
|
}
|
|
5087
5186
|
}
|
|
5088
5187
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -5096,13 +5195,29 @@ ca_binop_rcp_mul_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
5096
5195
|
#pragma omp simd
|
|
5097
5196
|
for (k=0; k<n; k++) {
|
|
5098
5197
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5099
|
-
{
|
|
5198
|
+
{
|
|
5199
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
5200
|
+
if ((*p1)==-1) { (*p3) = (int64_t) (0 - (uint64_t) (*p2)); }
|
|
5201
|
+
else {
|
|
5202
|
+
int64_t _q = (*p2) / (*p1);
|
|
5203
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
5204
|
+
(*p3) = _q;
|
|
5205
|
+
}
|
|
5206
|
+
}
|
|
5100
5207
|
}
|
|
5101
5208
|
} else {
|
|
5102
5209
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
5103
5210
|
int64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
5104
5211
|
for (k=0; k<n; k++) {
|
|
5105
|
-
{
|
|
5212
|
+
{
|
|
5213
|
+
if ((*p1)==0) {ca_zerodiv();};
|
|
5214
|
+
if ((*p1)==-1) { (*p3) = (int64_t) (0 - (uint64_t) (*p2)); }
|
|
5215
|
+
else {
|
|
5216
|
+
int64_t _q = (*p2) / (*p1);
|
|
5217
|
+
if ( (*p2) % (*p1) != 0 && (((*p2) < 0) != ((*p1) < 0)) ) { _q -= 1; }
|
|
5218
|
+
(*p3) = _q;
|
|
5219
|
+
}
|
|
5220
|
+
}
|
|
5106
5221
|
p1 += i1; p2 += i2; p3 += i3;
|
|
5107
5222
|
}
|
|
5108
5223
|
}
|
|
@@ -5433,7 +5548,8 @@ ca_binop_mod_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
5433
5548
|
p3 = q3 + k*i3;
|
|
5434
5549
|
{
|
|
5435
5550
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5436
|
-
{
|
|
5551
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5552
|
+
else {
|
|
5437
5553
|
int8_t _r = (*p1) % (*p2);
|
|
5438
5554
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5439
5555
|
(*p3) = _r;
|
|
@@ -5454,7 +5570,8 @@ ca_binop_mod_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
5454
5570
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5455
5571
|
{
|
|
5456
5572
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5457
|
-
{
|
|
5573
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5574
|
+
else {
|
|
5458
5575
|
int8_t _r = (*p1) % (*p2);
|
|
5459
5576
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5460
5577
|
(*p3) = _r;
|
|
@@ -5467,7 +5584,8 @@ ca_binop_mod_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
5467
5584
|
for (k=0; k<n; k++) {
|
|
5468
5585
|
{
|
|
5469
5586
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5470
|
-
{
|
|
5587
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5588
|
+
else {
|
|
5471
5589
|
int8_t _r = (*p1) % (*p2);
|
|
5472
5590
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5473
5591
|
(*p3) = _r;
|
|
@@ -5544,7 +5662,8 @@ ca_binop_mod_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
5544
5662
|
p3 = q3 + k*i3;
|
|
5545
5663
|
{
|
|
5546
5664
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5547
|
-
{
|
|
5665
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5666
|
+
else {
|
|
5548
5667
|
int16_t _r = (*p1) % (*p2);
|
|
5549
5668
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5550
5669
|
(*p3) = _r;
|
|
@@ -5565,7 +5684,8 @@ ca_binop_mod_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
5565
5684
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5566
5685
|
{
|
|
5567
5686
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5568
|
-
{
|
|
5687
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5688
|
+
else {
|
|
5569
5689
|
int16_t _r = (*p1) % (*p2);
|
|
5570
5690
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5571
5691
|
(*p3) = _r;
|
|
@@ -5578,7 +5698,8 @@ ca_binop_mod_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
5578
5698
|
for (k=0; k<n; k++) {
|
|
5579
5699
|
{
|
|
5580
5700
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5581
|
-
{
|
|
5701
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5702
|
+
else {
|
|
5582
5703
|
int16_t _r = (*p1) % (*p2);
|
|
5583
5704
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5584
5705
|
(*p3) = _r;
|
|
@@ -5655,7 +5776,8 @@ ca_binop_mod_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
5655
5776
|
p3 = q3 + k*i3;
|
|
5656
5777
|
{
|
|
5657
5778
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5658
|
-
{
|
|
5779
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5780
|
+
else {
|
|
5659
5781
|
int32_t _r = (*p1) % (*p2);
|
|
5660
5782
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5661
5783
|
(*p3) = _r;
|
|
@@ -5676,7 +5798,8 @@ ca_binop_mod_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
5676
5798
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5677
5799
|
{
|
|
5678
5800
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5679
|
-
{
|
|
5801
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5802
|
+
else {
|
|
5680
5803
|
int32_t _r = (*p1) % (*p2);
|
|
5681
5804
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5682
5805
|
(*p3) = _r;
|
|
@@ -5689,7 +5812,8 @@ ca_binop_mod_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
5689
5812
|
for (k=0; k<n; k++) {
|
|
5690
5813
|
{
|
|
5691
5814
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5692
|
-
{
|
|
5815
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5816
|
+
else {
|
|
5693
5817
|
int32_t _r = (*p1) % (*p2);
|
|
5694
5818
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5695
5819
|
(*p3) = _r;
|
|
@@ -5766,7 +5890,8 @@ ca_binop_mod_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
5766
5890
|
p3 = q3 + k*i3;
|
|
5767
5891
|
{
|
|
5768
5892
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5769
|
-
{
|
|
5893
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5894
|
+
else {
|
|
5770
5895
|
int64_t _r = (*p1) % (*p2);
|
|
5771
5896
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5772
5897
|
(*p3) = _r;
|
|
@@ -5787,7 +5912,8 @@ ca_binop_mod_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
5787
5912
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
5788
5913
|
{
|
|
5789
5914
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5790
|
-
{
|
|
5915
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5916
|
+
else {
|
|
5791
5917
|
int64_t _r = (*p1) % (*p2);
|
|
5792
5918
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5793
5919
|
(*p3) = _r;
|
|
@@ -5800,7 +5926,8 @@ ca_binop_mod_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
5800
5926
|
for (k=0; k<n; k++) {
|
|
5801
5927
|
{
|
|
5802
5928
|
if ((*p2)==0) {ca_zerodiv();};
|
|
5803
|
-
{
|
|
5929
|
+
if ((*p2)==-1) { (*p3) = 0; }
|
|
5930
|
+
else {
|
|
5804
5931
|
int64_t _r = (*p1) % (*p2);
|
|
5805
5932
|
if ( _r != 0 && ((_r < 0) != ((*p2) < 0)) ) { _r += (*p2); }
|
|
5806
5933
|
(*p3) = _r;
|
|
@@ -6098,7 +6225,7 @@ ca_binop_fmod_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
6098
6225
|
p1 = q1 + k*i1;
|
|
6099
6226
|
p2 = q2 + k*i2;
|
|
6100
6227
|
p3 = q3 + k*i3;
|
|
6101
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6228
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6102
6229
|
}
|
|
6103
6230
|
}
|
|
6104
6231
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -6112,13 +6239,13 @@ ca_binop_fmod_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
6112
6239
|
#pragma omp simd
|
|
6113
6240
|
for (k=0; k<n; k++) {
|
|
6114
6241
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
6115
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6242
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6116
6243
|
}
|
|
6117
6244
|
} else {
|
|
6118
6245
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
6119
6246
|
int8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
6120
6247
|
for (k=0; k<n; k++) {
|
|
6121
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6248
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6122
6249
|
p1 += i1; p2 += i2; p3 += i3;
|
|
6123
6250
|
}
|
|
6124
6251
|
}
|
|
@@ -6188,7 +6315,7 @@ ca_binop_fmod_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
6188
6315
|
p1 = q1 + k*i1;
|
|
6189
6316
|
p2 = q2 + k*i2;
|
|
6190
6317
|
p3 = q3 + k*i3;
|
|
6191
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6318
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6192
6319
|
}
|
|
6193
6320
|
}
|
|
6194
6321
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -6202,13 +6329,13 @@ ca_binop_fmod_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
6202
6329
|
#pragma omp simd
|
|
6203
6330
|
for (k=0; k<n; k++) {
|
|
6204
6331
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
6205
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6332
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6206
6333
|
}
|
|
6207
6334
|
} else {
|
|
6208
6335
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
6209
6336
|
int16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
6210
6337
|
for (k=0; k<n; k++) {
|
|
6211
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6338
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6212
6339
|
p1 += i1; p2 += i2; p3 += i3;
|
|
6213
6340
|
}
|
|
6214
6341
|
}
|
|
@@ -6278,7 +6405,7 @@ ca_binop_fmod_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
6278
6405
|
p1 = q1 + k*i1;
|
|
6279
6406
|
p2 = q2 + k*i2;
|
|
6280
6407
|
p3 = q3 + k*i3;
|
|
6281
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6408
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6282
6409
|
}
|
|
6283
6410
|
}
|
|
6284
6411
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -6292,13 +6419,13 @@ ca_binop_fmod_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
6292
6419
|
#pragma omp simd
|
|
6293
6420
|
for (k=0; k<n; k++) {
|
|
6294
6421
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
6295
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6422
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6296
6423
|
}
|
|
6297
6424
|
} else {
|
|
6298
6425
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
6299
6426
|
int32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
6300
6427
|
for (k=0; k<n; k++) {
|
|
6301
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6428
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6302
6429
|
p1 += i1; p2 += i2; p3 += i3;
|
|
6303
6430
|
}
|
|
6304
6431
|
}
|
|
@@ -6368,7 +6495,7 @@ ca_binop_fmod_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
6368
6495
|
p1 = q1 + k*i1;
|
|
6369
6496
|
p2 = q2 + k*i2;
|
|
6370
6497
|
p3 = q3 + k*i3;
|
|
6371
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6498
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6372
6499
|
}
|
|
6373
6500
|
}
|
|
6374
6501
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -6382,13 +6509,13 @@ ca_binop_fmod_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
6382
6509
|
#pragma omp simd
|
|
6383
6510
|
for (k=0; k<n; k++) {
|
|
6384
6511
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
6385
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6512
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6386
6513
|
}
|
|
6387
6514
|
} else {
|
|
6388
6515
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
6389
6516
|
int64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
6390
6517
|
for (k=0; k<n; k++) {
|
|
6391
|
-
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = (*p1) % (*p2); }
|
|
6518
|
+
{ if ((*p2)==0) {ca_zerodiv();}; (*p3) = ((*p2)==-1) ? 0 : (*p1) % (*p2); }
|
|
6392
6519
|
p1 += i1; p2 += i2; p3 += i3;
|
|
6393
6520
|
}
|
|
6394
6521
|
}
|
|
@@ -8079,7 +8206,17 @@ ca_binop_bit_lshift_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
8079
8206
|
p1 = q1 + k*i1;
|
|
8080
8207
|
p2 = q2 + k*i2;
|
|
8081
8208
|
p3 = q3 + k*i3;
|
|
8082
|
-
{
|
|
8209
|
+
{
|
|
8210
|
+
{
|
|
8211
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8212
|
+
const int64_t _w = (int64_t) (8 * sizeof(int8_t));
|
|
8213
|
+
if ( _n >= _w ) _r = 0;
|
|
8214
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8215
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8216
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8217
|
+
(*p3) = (int8_t) _r;
|
|
8218
|
+
}
|
|
8219
|
+
}
|
|
8083
8220
|
}
|
|
8084
8221
|
}
|
|
8085
8222
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8093,13 +8230,33 @@ ca_binop_bit_lshift_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
8093
8230
|
#pragma omp simd
|
|
8094
8231
|
for (k=0; k<n; k++) {
|
|
8095
8232
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8096
|
-
{
|
|
8233
|
+
{
|
|
8234
|
+
{
|
|
8235
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8236
|
+
const int64_t _w = (int64_t) (8 * sizeof(int8_t));
|
|
8237
|
+
if ( _n >= _w ) _r = 0;
|
|
8238
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8239
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8240
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8241
|
+
(*p3) = (int8_t) _r;
|
|
8242
|
+
}
|
|
8243
|
+
}
|
|
8097
8244
|
}
|
|
8098
8245
|
} else {
|
|
8099
8246
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8100
8247
|
int8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8101
8248
|
for (k=0; k<n; k++) {
|
|
8102
|
-
{
|
|
8249
|
+
{
|
|
8250
|
+
{
|
|
8251
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8252
|
+
const int64_t _w = (int64_t) (8 * sizeof(int8_t));
|
|
8253
|
+
if ( _n >= _w ) _r = 0;
|
|
8254
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8255
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8256
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8257
|
+
(*p3) = (int8_t) _r;
|
|
8258
|
+
}
|
|
8259
|
+
}
|
|
8103
8260
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8104
8261
|
}
|
|
8105
8262
|
}
|
|
@@ -8124,7 +8281,7 @@ ca_binop_bit_lshift_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
8124
8281
|
p1 = q1 + k*i1;
|
|
8125
8282
|
p2 = q2 + k*i2;
|
|
8126
8283
|
p3 = q3 + k*i3;
|
|
8127
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8284
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint8_t)) ? 0 : (uint8_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8128
8285
|
}
|
|
8129
8286
|
}
|
|
8130
8287
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8138,13 +8295,13 @@ ca_binop_bit_lshift_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
8138
8295
|
#pragma omp simd
|
|
8139
8296
|
for (k=0; k<n; k++) {
|
|
8140
8297
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8141
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8298
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint8_t)) ? 0 : (uint8_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8142
8299
|
}
|
|
8143
8300
|
} else {
|
|
8144
8301
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8145
8302
|
uint8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8146
8303
|
for (k=0; k<n; k++) {
|
|
8147
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8304
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint8_t)) ? 0 : (uint8_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8148
8305
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8149
8306
|
}
|
|
8150
8307
|
}
|
|
@@ -8169,7 +8326,17 @@ ca_binop_bit_lshift_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
8169
8326
|
p1 = q1 + k*i1;
|
|
8170
8327
|
p2 = q2 + k*i2;
|
|
8171
8328
|
p3 = q3 + k*i3;
|
|
8172
|
-
{
|
|
8329
|
+
{
|
|
8330
|
+
{
|
|
8331
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8332
|
+
const int64_t _w = (int64_t) (8 * sizeof(int16_t));
|
|
8333
|
+
if ( _n >= _w ) _r = 0;
|
|
8334
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8335
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8336
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8337
|
+
(*p3) = (int16_t) _r;
|
|
8338
|
+
}
|
|
8339
|
+
}
|
|
8173
8340
|
}
|
|
8174
8341
|
}
|
|
8175
8342
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8183,13 +8350,33 @@ ca_binop_bit_lshift_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
8183
8350
|
#pragma omp simd
|
|
8184
8351
|
for (k=0; k<n; k++) {
|
|
8185
8352
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8186
|
-
{
|
|
8353
|
+
{
|
|
8354
|
+
{
|
|
8355
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8356
|
+
const int64_t _w = (int64_t) (8 * sizeof(int16_t));
|
|
8357
|
+
if ( _n >= _w ) _r = 0;
|
|
8358
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8359
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8360
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8361
|
+
(*p3) = (int16_t) _r;
|
|
8362
|
+
}
|
|
8363
|
+
}
|
|
8187
8364
|
}
|
|
8188
8365
|
} else {
|
|
8189
8366
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8190
8367
|
int16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8191
8368
|
for (k=0; k<n; k++) {
|
|
8192
|
-
{
|
|
8369
|
+
{
|
|
8370
|
+
{
|
|
8371
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8372
|
+
const int64_t _w = (int64_t) (8 * sizeof(int16_t));
|
|
8373
|
+
if ( _n >= _w ) _r = 0;
|
|
8374
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8375
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8376
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8377
|
+
(*p3) = (int16_t) _r;
|
|
8378
|
+
}
|
|
8379
|
+
}
|
|
8193
8380
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8194
8381
|
}
|
|
8195
8382
|
}
|
|
@@ -8214,7 +8401,7 @@ ca_binop_bit_lshift_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
8214
8401
|
p1 = q1 + k*i1;
|
|
8215
8402
|
p2 = q2 + k*i2;
|
|
8216
8403
|
p3 = q3 + k*i3;
|
|
8217
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8404
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint16_t)) ? 0 : (uint16_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8218
8405
|
}
|
|
8219
8406
|
}
|
|
8220
8407
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8228,13 +8415,13 @@ ca_binop_bit_lshift_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
8228
8415
|
#pragma omp simd
|
|
8229
8416
|
for (k=0; k<n; k++) {
|
|
8230
8417
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8231
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8418
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint16_t)) ? 0 : (uint16_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8232
8419
|
}
|
|
8233
8420
|
} else {
|
|
8234
8421
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8235
8422
|
uint16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8236
8423
|
for (k=0; k<n; k++) {
|
|
8237
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8424
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint16_t)) ? 0 : (uint16_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8238
8425
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8239
8426
|
}
|
|
8240
8427
|
}
|
|
@@ -8259,7 +8446,17 @@ ca_binop_bit_lshift_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
8259
8446
|
p1 = q1 + k*i1;
|
|
8260
8447
|
p2 = q2 + k*i2;
|
|
8261
8448
|
p3 = q3 + k*i3;
|
|
8262
|
-
{
|
|
8449
|
+
{
|
|
8450
|
+
{
|
|
8451
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8452
|
+
const int64_t _w = (int64_t) (8 * sizeof(int32_t));
|
|
8453
|
+
if ( _n >= _w ) _r = 0;
|
|
8454
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8455
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8456
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8457
|
+
(*p3) = (int32_t) _r;
|
|
8458
|
+
}
|
|
8459
|
+
}
|
|
8263
8460
|
}
|
|
8264
8461
|
}
|
|
8265
8462
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8273,13 +8470,33 @@ ca_binop_bit_lshift_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
8273
8470
|
#pragma omp simd
|
|
8274
8471
|
for (k=0; k<n; k++) {
|
|
8275
8472
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8276
|
-
{
|
|
8473
|
+
{
|
|
8474
|
+
{
|
|
8475
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8476
|
+
const int64_t _w = (int64_t) (8 * sizeof(int32_t));
|
|
8477
|
+
if ( _n >= _w ) _r = 0;
|
|
8478
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8479
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8480
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8481
|
+
(*p3) = (int32_t) _r;
|
|
8482
|
+
}
|
|
8483
|
+
}
|
|
8277
8484
|
}
|
|
8278
8485
|
} else {
|
|
8279
8486
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8280
8487
|
int32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8281
8488
|
for (k=0; k<n; k++) {
|
|
8282
|
-
{
|
|
8489
|
+
{
|
|
8490
|
+
{
|
|
8491
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8492
|
+
const int64_t _w = (int64_t) (8 * sizeof(int32_t));
|
|
8493
|
+
if ( _n >= _w ) _r = 0;
|
|
8494
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8495
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8496
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8497
|
+
(*p3) = (int32_t) _r;
|
|
8498
|
+
}
|
|
8499
|
+
}
|
|
8283
8500
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8284
8501
|
}
|
|
8285
8502
|
}
|
|
@@ -8304,7 +8521,7 @@ ca_binop_bit_lshift_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
8304
8521
|
p1 = q1 + k*i1;
|
|
8305
8522
|
p2 = q2 + k*i2;
|
|
8306
8523
|
p3 = q3 + k*i3;
|
|
8307
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8524
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint32_t)) ? 0 : (uint32_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8308
8525
|
}
|
|
8309
8526
|
}
|
|
8310
8527
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8318,13 +8535,13 @@ ca_binop_bit_lshift_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
8318
8535
|
#pragma omp simd
|
|
8319
8536
|
for (k=0; k<n; k++) {
|
|
8320
8537
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8321
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8538
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint32_t)) ? 0 : (uint32_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8322
8539
|
}
|
|
8323
8540
|
} else {
|
|
8324
8541
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8325
8542
|
uint32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8326
8543
|
for (k=0; k<n; k++) {
|
|
8327
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8544
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint32_t)) ? 0 : (uint32_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8328
8545
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8329
8546
|
}
|
|
8330
8547
|
}
|
|
@@ -8349,7 +8566,17 @@ ca_binop_bit_lshift_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
8349
8566
|
p1 = q1 + k*i1;
|
|
8350
8567
|
p2 = q2 + k*i2;
|
|
8351
8568
|
p3 = q3 + k*i3;
|
|
8352
|
-
{
|
|
8569
|
+
{
|
|
8570
|
+
{
|
|
8571
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8572
|
+
const int64_t _w = (int64_t) (8 * sizeof(int64_t));
|
|
8573
|
+
if ( _n >= _w ) _r = 0;
|
|
8574
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8575
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8576
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8577
|
+
(*p3) = (int64_t) _r;
|
|
8578
|
+
}
|
|
8579
|
+
}
|
|
8353
8580
|
}
|
|
8354
8581
|
}
|
|
8355
8582
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8363,13 +8590,33 @@ ca_binop_bit_lshift_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
8363
8590
|
#pragma omp simd
|
|
8364
8591
|
for (k=0; k<n; k++) {
|
|
8365
8592
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8366
|
-
{
|
|
8593
|
+
{
|
|
8594
|
+
{
|
|
8595
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8596
|
+
const int64_t _w = (int64_t) (8 * sizeof(int64_t));
|
|
8597
|
+
if ( _n >= _w ) _r = 0;
|
|
8598
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8599
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8600
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8601
|
+
(*p3) = (int64_t) _r;
|
|
8602
|
+
}
|
|
8603
|
+
}
|
|
8367
8604
|
}
|
|
8368
8605
|
} else {
|
|
8369
8606
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8370
8607
|
int64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8371
8608
|
for (k=0; k<n; k++) {
|
|
8372
|
-
{
|
|
8609
|
+
{
|
|
8610
|
+
{
|
|
8611
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8612
|
+
const int64_t _w = (int64_t) (8 * sizeof(int64_t));
|
|
8613
|
+
if ( _n >= _w ) _r = 0;
|
|
8614
|
+
else if ( _n <= -_w ) _r = _x < 0 ? -1 : 0;
|
|
8615
|
+
else if ( _n < 0 ) _r = _x >> -_n;
|
|
8616
|
+
else _r = (int64_t) ((uint64_t) _x << _n);
|
|
8617
|
+
(*p3) = (int64_t) _r;
|
|
8618
|
+
}
|
|
8619
|
+
}
|
|
8373
8620
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8374
8621
|
}
|
|
8375
8622
|
}
|
|
@@ -8394,7 +8641,7 @@ ca_binop_bit_lshift_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
8394
8641
|
p1 = q1 + k*i1;
|
|
8395
8642
|
p2 = q2 + k*i2;
|
|
8396
8643
|
p3 = q3 + k*i3;
|
|
8397
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8644
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint64_t)) ? 0 : (uint64_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8398
8645
|
}
|
|
8399
8646
|
}
|
|
8400
8647
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8408,13 +8655,13 @@ ca_binop_bit_lshift_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
8408
8655
|
#pragma omp simd
|
|
8409
8656
|
for (k=0; k<n; k++) {
|
|
8410
8657
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8411
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8658
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint64_t)) ? 0 : (uint64_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8412
8659
|
}
|
|
8413
8660
|
} else {
|
|
8414
8661
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8415
8662
|
uint64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8416
8663
|
for (k=0; k<n; k++) {
|
|
8417
|
-
{ (*p3) = (*p1) << (*p2); }
|
|
8664
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint64_t)) ? 0 : (uint64_t) ((uint64_t) (*p1) << (*p2)); }
|
|
8418
8665
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8419
8666
|
}
|
|
8420
8667
|
}
|
|
@@ -8518,7 +8765,17 @@ ca_binop_bit_rshift_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
8518
8765
|
p1 = q1 + k*i1;
|
|
8519
8766
|
p2 = q2 + k*i2;
|
|
8520
8767
|
p3 = q3 + k*i3;
|
|
8521
|
-
{
|
|
8768
|
+
{
|
|
8769
|
+
{
|
|
8770
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8771
|
+
const int64_t _w = (int64_t) (8 * sizeof(int8_t));
|
|
8772
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
8773
|
+
else if ( _n <= -_w ) _r = 0;
|
|
8774
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
8775
|
+
else _r = _x >> _n;
|
|
8776
|
+
(*p3) = (int8_t) _r;
|
|
8777
|
+
}
|
|
8778
|
+
}
|
|
8522
8779
|
}
|
|
8523
8780
|
}
|
|
8524
8781
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8532,13 +8789,33 @@ ca_binop_bit_rshift_int8_t (ca_size_t n, boolean8_t *m,
|
|
|
8532
8789
|
#pragma omp simd
|
|
8533
8790
|
for (k=0; k<n; k++) {
|
|
8534
8791
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8535
|
-
{
|
|
8792
|
+
{
|
|
8793
|
+
{
|
|
8794
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8795
|
+
const int64_t _w = (int64_t) (8 * sizeof(int8_t));
|
|
8796
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
8797
|
+
else if ( _n <= -_w ) _r = 0;
|
|
8798
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
8799
|
+
else _r = _x >> _n;
|
|
8800
|
+
(*p3) = (int8_t) _r;
|
|
8801
|
+
}
|
|
8802
|
+
}
|
|
8536
8803
|
}
|
|
8537
8804
|
} else {
|
|
8538
8805
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8539
8806
|
int8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8540
8807
|
for (k=0; k<n; k++) {
|
|
8541
|
-
{
|
|
8808
|
+
{
|
|
8809
|
+
{
|
|
8810
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8811
|
+
const int64_t _w = (int64_t) (8 * sizeof(int8_t));
|
|
8812
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
8813
|
+
else if ( _n <= -_w ) _r = 0;
|
|
8814
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
8815
|
+
else _r = _x >> _n;
|
|
8816
|
+
(*p3) = (int8_t) _r;
|
|
8817
|
+
}
|
|
8818
|
+
}
|
|
8542
8819
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8543
8820
|
}
|
|
8544
8821
|
}
|
|
@@ -8563,7 +8840,7 @@ ca_binop_bit_rshift_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
8563
8840
|
p1 = q1 + k*i1;
|
|
8564
8841
|
p2 = q2 + k*i2;
|
|
8565
8842
|
p3 = q3 + k*i3;
|
|
8566
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
8843
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint8_t)) ? 0 : (uint8_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8567
8844
|
}
|
|
8568
8845
|
}
|
|
8569
8846
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8577,13 +8854,13 @@ ca_binop_bit_rshift_uint8_t (ca_size_t n, boolean8_t *m,
|
|
|
8577
8854
|
#pragma omp simd
|
|
8578
8855
|
for (k=0; k<n; k++) {
|
|
8579
8856
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8580
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
8857
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint8_t)) ? 0 : (uint8_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8581
8858
|
}
|
|
8582
8859
|
} else {
|
|
8583
8860
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8584
8861
|
uint8_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8585
8862
|
for (k=0; k<n; k++) {
|
|
8586
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
8863
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint8_t)) ? 0 : (uint8_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8587
8864
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8588
8865
|
}
|
|
8589
8866
|
}
|
|
@@ -8608,7 +8885,17 @@ ca_binop_bit_rshift_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
8608
8885
|
p1 = q1 + k*i1;
|
|
8609
8886
|
p2 = q2 + k*i2;
|
|
8610
8887
|
p3 = q3 + k*i3;
|
|
8611
|
-
{
|
|
8888
|
+
{
|
|
8889
|
+
{
|
|
8890
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8891
|
+
const int64_t _w = (int64_t) (8 * sizeof(int16_t));
|
|
8892
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
8893
|
+
else if ( _n <= -_w ) _r = 0;
|
|
8894
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
8895
|
+
else _r = _x >> _n;
|
|
8896
|
+
(*p3) = (int16_t) _r;
|
|
8897
|
+
}
|
|
8898
|
+
}
|
|
8612
8899
|
}
|
|
8613
8900
|
}
|
|
8614
8901
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8622,13 +8909,33 @@ ca_binop_bit_rshift_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
8622
8909
|
#pragma omp simd
|
|
8623
8910
|
for (k=0; k<n; k++) {
|
|
8624
8911
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8625
|
-
{
|
|
8912
|
+
{
|
|
8913
|
+
{
|
|
8914
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8915
|
+
const int64_t _w = (int64_t) (8 * sizeof(int16_t));
|
|
8916
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
8917
|
+
else if ( _n <= -_w ) _r = 0;
|
|
8918
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
8919
|
+
else _r = _x >> _n;
|
|
8920
|
+
(*p3) = (int16_t) _r;
|
|
8921
|
+
}
|
|
8922
|
+
}
|
|
8626
8923
|
}
|
|
8627
8924
|
} else {
|
|
8628
8925
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8629
8926
|
int16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8630
8927
|
for (k=0; k<n; k++) {
|
|
8631
|
-
{
|
|
8928
|
+
{
|
|
8929
|
+
{
|
|
8930
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
8931
|
+
const int64_t _w = (int64_t) (8 * sizeof(int16_t));
|
|
8932
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
8933
|
+
else if ( _n <= -_w ) _r = 0;
|
|
8934
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
8935
|
+
else _r = _x >> _n;
|
|
8936
|
+
(*p3) = (int16_t) _r;
|
|
8937
|
+
}
|
|
8938
|
+
}
|
|
8632
8939
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8633
8940
|
}
|
|
8634
8941
|
}
|
|
@@ -8653,7 +8960,7 @@ ca_binop_bit_rshift_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
8653
8960
|
p1 = q1 + k*i1;
|
|
8654
8961
|
p2 = q2 + k*i2;
|
|
8655
8962
|
p3 = q3 + k*i3;
|
|
8656
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
8963
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint16_t)) ? 0 : (uint16_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8657
8964
|
}
|
|
8658
8965
|
}
|
|
8659
8966
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8667,13 +8974,13 @@ ca_binop_bit_rshift_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
8667
8974
|
#pragma omp simd
|
|
8668
8975
|
for (k=0; k<n; k++) {
|
|
8669
8976
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8670
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
8977
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint16_t)) ? 0 : (uint16_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8671
8978
|
}
|
|
8672
8979
|
} else {
|
|
8673
8980
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8674
8981
|
uint16_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8675
8982
|
for (k=0; k<n; k++) {
|
|
8676
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
8983
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint16_t)) ? 0 : (uint16_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8677
8984
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8678
8985
|
}
|
|
8679
8986
|
}
|
|
@@ -8698,7 +9005,17 @@ ca_binop_bit_rshift_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
8698
9005
|
p1 = q1 + k*i1;
|
|
8699
9006
|
p2 = q2 + k*i2;
|
|
8700
9007
|
p3 = q3 + k*i3;
|
|
8701
|
-
{
|
|
9008
|
+
{
|
|
9009
|
+
{
|
|
9010
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
9011
|
+
const int64_t _w = (int64_t) (8 * sizeof(int32_t));
|
|
9012
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
9013
|
+
else if ( _n <= -_w ) _r = 0;
|
|
9014
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
9015
|
+
else _r = _x >> _n;
|
|
9016
|
+
(*p3) = (int32_t) _r;
|
|
9017
|
+
}
|
|
9018
|
+
}
|
|
8702
9019
|
}
|
|
8703
9020
|
}
|
|
8704
9021
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8712,13 +9029,33 @@ ca_binop_bit_rshift_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
8712
9029
|
#pragma omp simd
|
|
8713
9030
|
for (k=0; k<n; k++) {
|
|
8714
9031
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8715
|
-
{
|
|
9032
|
+
{
|
|
9033
|
+
{
|
|
9034
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
9035
|
+
const int64_t _w = (int64_t) (8 * sizeof(int32_t));
|
|
9036
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
9037
|
+
else if ( _n <= -_w ) _r = 0;
|
|
9038
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
9039
|
+
else _r = _x >> _n;
|
|
9040
|
+
(*p3) = (int32_t) _r;
|
|
9041
|
+
}
|
|
9042
|
+
}
|
|
8716
9043
|
}
|
|
8717
9044
|
} else {
|
|
8718
9045
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8719
9046
|
int32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8720
9047
|
for (k=0; k<n; k++) {
|
|
8721
|
-
{
|
|
9048
|
+
{
|
|
9049
|
+
{
|
|
9050
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
9051
|
+
const int64_t _w = (int64_t) (8 * sizeof(int32_t));
|
|
9052
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
9053
|
+
else if ( _n <= -_w ) _r = 0;
|
|
9054
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
9055
|
+
else _r = _x >> _n;
|
|
9056
|
+
(*p3) = (int32_t) _r;
|
|
9057
|
+
}
|
|
9058
|
+
}
|
|
8722
9059
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8723
9060
|
}
|
|
8724
9061
|
}
|
|
@@ -8743,7 +9080,7 @@ ca_binop_bit_rshift_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
8743
9080
|
p1 = q1 + k*i1;
|
|
8744
9081
|
p2 = q2 + k*i2;
|
|
8745
9082
|
p3 = q3 + k*i3;
|
|
8746
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
9083
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint32_t)) ? 0 : (uint32_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8747
9084
|
}
|
|
8748
9085
|
}
|
|
8749
9086
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8757,13 +9094,13 @@ ca_binop_bit_rshift_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
8757
9094
|
#pragma omp simd
|
|
8758
9095
|
for (k=0; k<n; k++) {
|
|
8759
9096
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8760
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
9097
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint32_t)) ? 0 : (uint32_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8761
9098
|
}
|
|
8762
9099
|
} else {
|
|
8763
9100
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8764
9101
|
uint32_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8765
9102
|
for (k=0; k<n; k++) {
|
|
8766
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
9103
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint32_t)) ? 0 : (uint32_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8767
9104
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8768
9105
|
}
|
|
8769
9106
|
}
|
|
@@ -8788,7 +9125,17 @@ ca_binop_bit_rshift_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
8788
9125
|
p1 = q1 + k*i1;
|
|
8789
9126
|
p2 = q2 + k*i2;
|
|
8790
9127
|
p3 = q3 + k*i3;
|
|
8791
|
-
{
|
|
9128
|
+
{
|
|
9129
|
+
{
|
|
9130
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
9131
|
+
const int64_t _w = (int64_t) (8 * sizeof(int64_t));
|
|
9132
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
9133
|
+
else if ( _n <= -_w ) _r = 0;
|
|
9134
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
9135
|
+
else _r = _x >> _n;
|
|
9136
|
+
(*p3) = (int64_t) _r;
|
|
9137
|
+
}
|
|
9138
|
+
}
|
|
8792
9139
|
}
|
|
8793
9140
|
}
|
|
8794
9141
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8802,13 +9149,33 @@ ca_binop_bit_rshift_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
8802
9149
|
#pragma omp simd
|
|
8803
9150
|
for (k=0; k<n; k++) {
|
|
8804
9151
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8805
|
-
{
|
|
9152
|
+
{
|
|
9153
|
+
{
|
|
9154
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
9155
|
+
const int64_t _w = (int64_t) (8 * sizeof(int64_t));
|
|
9156
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
9157
|
+
else if ( _n <= -_w ) _r = 0;
|
|
9158
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
9159
|
+
else _r = _x >> _n;
|
|
9160
|
+
(*p3) = (int64_t) _r;
|
|
9161
|
+
}
|
|
9162
|
+
}
|
|
8806
9163
|
}
|
|
8807
9164
|
} else {
|
|
8808
9165
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8809
9166
|
int64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8810
9167
|
for (k=0; k<n; k++) {
|
|
8811
|
-
{
|
|
9168
|
+
{
|
|
9169
|
+
{
|
|
9170
|
+
int64_t _x = (int64_t) (*p1), _n = (int64_t) (*p2), _r;
|
|
9171
|
+
const int64_t _w = (int64_t) (8 * sizeof(int64_t));
|
|
9172
|
+
if ( _n >= _w ) _r = _x < 0 ? -1 : 0;
|
|
9173
|
+
else if ( _n <= -_w ) _r = 0;
|
|
9174
|
+
else if ( _n < 0 ) _r = (int64_t) ((uint64_t) _x << -_n);
|
|
9175
|
+
else _r = _x >> _n;
|
|
9176
|
+
(*p3) = (int64_t) _r;
|
|
9177
|
+
}
|
|
9178
|
+
}
|
|
8812
9179
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8813
9180
|
}
|
|
8814
9181
|
}
|
|
@@ -8833,7 +9200,7 @@ ca_binop_bit_rshift_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
8833
9200
|
p1 = q1 + k*i1;
|
|
8834
9201
|
p2 = q2 + k*i2;
|
|
8835
9202
|
p3 = q3 + k*i3;
|
|
8836
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
9203
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint64_t)) ? 0 : (uint64_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8837
9204
|
}
|
|
8838
9205
|
}
|
|
8839
9206
|
} else if ( i1 == 1 && i2 == 1 && i3 == 1 ) {
|
|
@@ -8847,13 +9214,13 @@ ca_binop_bit_rshift_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
8847
9214
|
#pragma omp simd
|
|
8848
9215
|
for (k=0; k<n; k++) {
|
|
8849
9216
|
p1 = q1 + k; p2 = q2 + k; p3 = q3 + k;
|
|
8850
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
9217
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint64_t)) ? 0 : (uint64_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8851
9218
|
}
|
|
8852
9219
|
} else {
|
|
8853
9220
|
/* strided branch: numo-shape `p += s` increment form. */
|
|
8854
9221
|
uint64_t *p1 = q1, *p2 = q2, *p3 = q3;
|
|
8855
9222
|
for (k=0; k<n; k++) {
|
|
8856
|
-
{ (*p3) = (*p1) >> (*p2); }
|
|
9223
|
+
{ (*p3) = ((uint64_t) (*p2) >= 8 * sizeof(uint64_t)) ? 0 : (uint64_t) ((uint64_t) (*p1) >> (*p2)); }
|
|
8857
9224
|
p1 += i1; p2 += i2; p3 += i3;
|
|
8858
9225
|
}
|
|
8859
9226
|
}
|