carray 2.0.0 → 3.0.0

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.
Files changed (339) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +5 -25
  3. data/CHANGELOG.md +16 -0
  4. data/LICENSE +1 -1
  5. data/NEWS.md +3 -0
  6. data/README.md +128 -44
  7. data/carray.gemspec +22 -24
  8. data/ext/ca_array_pool.c +91 -0
  9. data/ext/ca_axis_descriptor.h +186 -0
  10. data/ext/ca_axis_dispatch.c +924 -0
  11. data/ext/ca_axis_group.c +1208 -0
  12. data/ext/ca_bincmp_dispatch.c +76 -0
  13. data/ext/ca_bincmp_dispatch.h +85 -0
  14. data/ext/ca_binop_dispatch.c +125 -0
  15. data/ext/ca_binop_dispatch.h +159 -0
  16. data/ext/ca_categorical_iterator.c +1375 -0
  17. data/ext/ca_compare.c +94 -0
  18. data/ext/ca_compare.h +26 -0
  19. data/ext/ca_composite_dispatch.c +414 -0
  20. data/ext/ca_composite_dispatch.h +116 -0
  21. data/ext/ca_for_buffer.h +96 -0
  22. data/ext/ca_for_each_element.h +241 -0
  23. data/ext/ca_group_iter.c +304 -0
  24. data/ext/ca_iter_substrate.h +325 -0
  25. data/ext/ca_kernel_iterator.c +4321 -0
  26. data/ext/ca_kernel_iterator.h +2603 -0
  27. data/ext/ca_moncmp_dispatch.c +37 -0
  28. data/ext/ca_moncmp_dispatch.h +62 -0
  29. data/ext/ca_monop_dispatch.c +200 -0
  30. data/ext/ca_monop_dispatch.h +235 -0
  31. data/ext/ca_obj_array.c +355 -359
  32. data/ext/ca_obj_bincmp.c +809 -0
  33. data/ext/ca_obj_binop.c +892 -0
  34. data/ext/ca_obj_bitarray.c +369 -164
  35. data/ext/ca_obj_bitfield.c +294 -234
  36. data/ext/ca_obj_block.c +189 -711
  37. data/ext/ca_obj_byte_swap.c +766 -0
  38. data/ext/ca_obj_const_string.c +965 -0
  39. data/ext/ca_obj_face.c +670 -0
  40. data/ext/ca_obj_face.h +247 -0
  41. data/ext/ca_obj_fake.c +228 -100
  42. data/ext/ca_obj_farray.c +54 -441
  43. data/ext/ca_obj_field.c +82 -529
  44. data/ext/ca_obj_fixlen_string.c +306 -0
  45. data/ext/ca_obj_grid.c +858 -440
  46. data/ext/ca_obj_meld.c +1034 -0
  47. data/ext/ca_obj_moncmp.c +569 -0
  48. data/ext/ca_obj_monop.c +1111 -0
  49. data/ext/ca_obj_object.c +774 -298
  50. data/ext/ca_obj_record.c +468 -0
  51. data/ext/ca_obj_reduce.c +97 -82
  52. data/ext/ca_obj_refer.c +569 -459
  53. data/ext/ca_obj_remap.c +475 -0
  54. data/ext/ca_obj_repeat.c +92 -477
  55. data/ext/ca_obj_roll.c +616 -0
  56. data/ext/ca_obj_select.c +344 -296
  57. data/ext/ca_obj_select_axis.c +1296 -0
  58. data/ext/ca_obj_shift.c +230 -792
  59. data/ext/ca_obj_source.c +78 -0
  60. data/ext/ca_obj_stack.c +1173 -0
  61. data/ext/ca_obj_stride.c +2501 -0
  62. data/ext/ca_obj_string.c +268 -0
  63. data/ext/ca_obj_tile.c +614 -0
  64. data/ext/ca_obj_time.c +546 -0
  65. data/ext/ca_obj_timedelta.c +435 -0
  66. data/ext/ca_obj_transpose.c +62 -516
  67. data/ext/ca_obj_triop.c +746 -0
  68. data/ext/ca_obj_unbound_repeat.c +208 -241
  69. data/ext/ca_obj_window.c +1131 -563
  70. data/ext/ca_op_byte_swap.c +175 -0
  71. data/ext/ca_op_ipower.c +319 -0
  72. data/ext/ca_op_powi.h +88 -0
  73. data/ext/ca_sort_kernels.h +132 -0
  74. data/ext/ca_sweep_engine.c +430 -0
  75. data/ext/ca_sweep_engine.h +157 -0
  76. data/ext/ca_transform_common.c +228 -0
  77. data/ext/ca_triop_dispatch.c +55 -0
  78. data/ext/ca_triop_dispatch.h +62 -0
  79. data/ext/carray.h +795 -402
  80. data/ext/carray_access.c +831 -711
  81. data/ext/carray_attribute.c +98 -330
  82. data/ext/carray_bincount.c +255 -0
  83. data/ext/carray_broadcast.c +283 -0
  84. data/ext/carray_call_cfunc.c +1360 -828
  85. data/ext/carray_call_cfunc.h +160 -0
  86. data/ext/carray_cast.c +1212 -301
  87. data/ext/carray_cast_func.rb +81 -40
  88. data/ext/carray_class.c +53 -63
  89. data/ext/carray_config.h +28 -0
  90. data/ext/carray_conversion.c +350 -346
  91. data/ext/carray_copy.c +156 -268
  92. data/ext/carray_core.c +1342 -199
  93. data/ext/carray_count.c +312 -0
  94. data/ext/carray_data_type.c +43 -19
  95. data/ext/carray_element.c +585 -213
  96. data/ext/carray_factorize.c +2542 -0
  97. data/ext/carray_generate.c +230 -559
  98. data/ext/carray_histogram.c +490 -0
  99. data/ext/carray_hold.c +228 -0
  100. data/ext/carray_index_classifier.c +1035 -0
  101. data/ext/carray_index_classifier.h +27 -0
  102. data/ext/carray_internal.h +120 -0
  103. data/ext/carray_kernels_bincmp.c +4445 -0
  104. data/ext/carray_kernels_binop.c +10979 -0
  105. data/ext/carray_kernels_init.c +36 -0
  106. data/ext/carray_kernels_map.c +3466 -0
  107. data/ext/carray_kernels_moncmp.c +2096 -0
  108. data/ext/carray_kernels_monop.c +18312 -0
  109. data/ext/carray_kernels_reduce_aggregate.c +25836 -0
  110. data/ext/carray_kernels_reduce_boolean.c +329 -0
  111. data/ext/carray_kernels_reduce_cumulative.c +14592 -0
  112. data/ext/carray_kernels_reduce_extreme.c +16947 -0
  113. data/ext/carray_kernels_reduce_variance.c +3909 -0
  114. data/ext/carray_kernels_scan.c +3692 -0
  115. data/ext/carray_kernels_search.c +32137 -0
  116. data/ext/carray_kernels_sort.c +10625 -0
  117. data/ext/carray_kernels_triop.c +1391 -0
  118. data/ext/carray_lazy.c +567 -0
  119. data/ext/carray_loop.c +88 -200
  120. data/ext/carray_mask.c +848 -154
  121. data/ext/carray_math_kernel.h +120 -0
  122. data/ext/carray_mathfunc.c +10 -241
  123. data/ext/carray_median_percentile.c +1257 -0
  124. data/ext/carray_memory_view.c +1625 -0
  125. data/ext/carray_operator.c +1526 -318
  126. data/ext/carray_order.c +664 -1394
  127. data/ext/carray_partition.c +416 -0
  128. data/ext/carray_random.c +518 -0
  129. data/ext/carray_scatter.c +357 -0
  130. data/ext/carray_slab.c +1219 -0
  131. data/ext/carray_slab.h +84 -0
  132. data/ext/carray_sort.c +829 -0
  133. data/ext/carray_sort_kernel.c +620 -0
  134. data/ext/carray_struct.c +695 -0
  135. data/ext/carray_test.c +343 -229
  136. data/ext/carray_undef.c +34 -17
  137. data/ext/carray_utils.c +175 -74
  138. data/ext/extconf.rb +216 -55
  139. data/ext/mk_call_cfunc.rb +480 -0
  140. data/ext/mkkernel.rb +8842 -0
  141. data/ext/ruby_carray.c +202 -101
  142. data/ext/version.h +4 -14
  143. data/ext/version.rb +5 -13
  144. data/lib/carray/arrow_tensor.rb +401 -0
  145. data/lib/carray/attribute.rb +166 -0
  146. data/lib/carray/autoload_carray.rb +220 -0
  147. data/lib/carray/autoload_method_extension.rb +44 -0
  148. data/lib/carray/axis_group.rb +711 -0
  149. data/lib/carray/basics.rb +481 -0
  150. data/lib/carray/bincount_nd.rb +358 -0
  151. data/lib/carray/block_iterator.rb +604 -0
  152. data/lib/carray/boolean_reduce.rb +109 -0
  153. data/lib/carray/categorical.rb +561 -0
  154. data/lib/carray/categorical_iterator.rb +1062 -0
  155. data/lib/carray/complex.rb +150 -0
  156. data/lib/carray/conditional.rb +216 -0
  157. data/lib/carray/const_string.rb +228 -0
  158. data/lib/carray/construct.rb +139 -328
  159. data/lib/carray/core_extensions.rb +240 -0
  160. data/lib/carray/data_type_extension.rb +233 -0
  161. data/lib/carray/fixlen_string.rb +95 -0
  162. data/lib/carray/frame/concat.rb +132 -0
  163. data/lib/carray/frame/convert.rb +95 -0
  164. data/lib/carray/frame/csv_parser.rb +211 -0
  165. data/lib/carray/frame/frame.rb +649 -0
  166. data/lib/carray/frame/group.rb +186 -0
  167. data/lib/carray/frame/io.rb +164 -0
  168. data/lib/carray/frame/join.rb +248 -0
  169. data/lib/carray/frame/records.rb +99 -0
  170. data/lib/carray/frame/sort.rb +113 -0
  171. data/lib/carray/frame/verbs.rb +299 -0
  172. data/lib/carray/frame.rb +16 -0
  173. data/lib/carray/histogram.rb +512 -0
  174. data/lib/carray/inspect.rb +37 -20
  175. data/lib/carray/iterator.rb +57 -349
  176. data/lib/carray/lazy.rb +889 -0
  177. data/lib/carray/mask_gap_fill.rb +200 -0
  178. data/lib/carray/math.rb +78 -342
  179. data/lib/carray/meld_reduce.rb +289 -0
  180. data/lib/carray/methods/align_addr.rb +116 -0
  181. data/lib/carray/methods/bin.rb +128 -0
  182. data/lib/carray/methods/bincount.rb +87 -0
  183. data/lib/carray/methods/bit_string.rb +92 -0
  184. data/lib/carray/methods/broadcast.rb +63 -0
  185. data/lib/carray/methods/choose.rb +39 -0
  186. data/lib/carray/methods/composition.rb +280 -0
  187. data/lib/carray/methods/gather_nd.rb +206 -0
  188. data/lib/carray/methods/index.rb +39 -0
  189. data/lib/carray/methods/insert_block.rb +99 -0
  190. data/lib/carray/methods/is_in.rb +141 -0
  191. data/lib/carray/methods/join.rb +90 -0
  192. data/lib/carray/methods/locate_addr.rb +47 -0
  193. data/lib/carray/methods/mask_duplicates.rb +41 -0
  194. data/lib/carray/methods/meshgrid.rb +91 -0
  195. data/lib/carray/methods/mode.rb +126 -0
  196. data/lib/carray/methods/nunique.rb +46 -0
  197. data/lib/carray/methods/resize.rb +56 -0
  198. data/lib/carray/methods/snap.rb +156 -0
  199. data/lib/carray/methods/string_format.rb +57 -0
  200. data/lib/carray/methods/unique.rb +47 -0
  201. data/lib/carray/methods/value_counts.rb +71 -0
  202. data/lib/carray/mkmf.rb +124 -101
  203. data/lib/carray/runtime.rb +108 -0
  204. data/lib/carray/serialize.rb +478 -167
  205. data/lib/carray/slab_iterator.rb +292 -0
  206. data/lib/carray/stack.rb +291 -0
  207. data/lib/carray/string.rb +56 -180
  208. data/lib/carray/string_operation_extension.rb +289 -0
  209. data/lib/carray/struct.rb +335 -323
  210. data/lib/carray/struct_builder.rb +697 -0
  211. data/lib/carray/table.rb +41 -2
  212. data/lib/carray/time.rb +2255 -38
  213. data/lib/carray/window_iterator.rb +655 -0
  214. data/lib/carray.rb +55 -57
  215. metadata +163 -130
  216. data/Rakefile +0 -51
  217. data/TODO.md +0 -18
  218. data/ext/ca_iter_block.c +0 -257
  219. data/ext/ca_iter_dimension.c +0 -299
  220. data/ext/ca_iter_window.c +0 -214
  221. data/ext/ca_obj_mapping.c +0 -644
  222. data/ext/carray_iterator.c +0 -641
  223. data/ext/carray_math.rb +0 -850
  224. data/ext/carray_numeric.c +0 -259
  225. data/ext/carray_sort_addr.c +0 -254
  226. data/ext/carray_stat.c +0 -2100
  227. data/ext/carray_stat_proc.rb +0 -1999
  228. data/ext/mkmath.rb +0 -741
  229. data/ext/ruby_ccomplex.c +0 -509
  230. data/ext/ruby_float_func.c +0 -86
  231. data/lib/carray/array.rb +0 -8
  232. data/lib/carray/autoload/autoload_base.rb +0 -19
  233. data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
  234. data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
  235. data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
  236. data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
  237. data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
  238. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
  239. data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
  240. data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
  241. data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
  242. data/lib/carray/autoload/autoload_gem_random.rb +0 -8
  243. data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
  244. data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
  245. data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
  246. data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
  247. data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
  248. data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
  249. data/lib/carray/autoload/autoload_object_link.rb +0 -1
  250. data/lib/carray/autoload/autoload_object_pack.rb +0 -2
  251. data/lib/carray/autoload.rb +0 -141
  252. data/lib/carray/basic.rb +0 -191
  253. data/lib/carray/broadcast.rb +0 -101
  254. data/lib/carray/compose.rb +0 -315
  255. data/lib/carray/convert.rb +0 -115
  256. data/lib/carray/info.rb +0 -110
  257. data/lib/carray/io/imagemagick.rb +0 -235
  258. data/lib/carray/mask.rb +0 -102
  259. data/lib/carray/math/histogram.rb +0 -177
  260. data/lib/carray/math/recurrence.rb +0 -93
  261. data/lib/carray/object/ca_obj_iterator.rb +0 -50
  262. data/lib/carray/object/ca_obj_link.rb +0 -50
  263. data/lib/carray/object/ca_obj_pack.rb +0 -99
  264. data/lib/carray/obsolete.rb +0 -256
  265. data/lib/carray/ordering.rb +0 -181
  266. data/lib/carray/testing.rb +0 -51
  267. data/lib/carray/transform.rb +0 -109
  268. data/misc/Methods.ja.md +0 -182
  269. data/misc/NOTE +0 -51
  270. data/spec/Classes/CABitfield_spec.rb +0 -58
  271. data/spec/Classes/CABlockIterator_spec.rb +0 -114
  272. data/spec/Classes/CABlock_spec.rb +0 -205
  273. data/spec/Classes/CAField_spec.rb +0 -39
  274. data/spec/Classes/CAGrid_spec.rb +0 -75
  275. data/spec/Classes/CAMap_spec.rb +0 -0
  276. data/spec/Classes/CAMapping_spec.rb +0 -105
  277. data/spec/Classes/CAObject_attribute_spec.rb +0 -33
  278. data/spec/Classes/CAObject_spec.rb +0 -33
  279. data/spec/Classes/CARefer_spec.rb +0 -93
  280. data/spec/Classes/CARepeat_spec.rb +0 -65
  281. data/spec/Classes/CASelect_spec.rb +0 -22
  282. data/spec/Classes/CAShift_spec.rb +0 -16
  283. data/spec/Classes/CAStruct_spec.rb +0 -71
  284. data/spec/Classes/CATranspose_spec.rb +0 -60
  285. data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
  286. data/spec/Classes/CAWindow_spec.rb +0 -54
  287. data/spec/Classes/CAWrap_spec.rb +0 -8
  288. data/spec/Classes/CArray_spec.rb +0 -184
  289. data/spec/Classes/CScalar_spec.rb +0 -55
  290. data/spec/Classes/ex1.rb +0 -46
  291. data/spec/Features/feature_130_spec.rb +0 -19
  292. data/spec/Features/feature_attributes_spec.rb +0 -280
  293. data/spec/Features/feature_boolean_spec.rb +0 -98
  294. data/spec/Features/feature_broadcast.rb +0 -116
  295. data/spec/Features/feature_cast_function.rb +0 -19
  296. data/spec/Features/feature_cast_spec.rb +0 -33
  297. data/spec/Features/feature_class_spec.rb +0 -84
  298. data/spec/Features/feature_complex_spec.rb +0 -42
  299. data/spec/Features/feature_composite_spec.rb +0 -124
  300. data/spec/Features/feature_convert_spec.rb +0 -46
  301. data/spec/Features/feature_copy_spec.rb +0 -123
  302. data/spec/Features/feature_creation_spec.rb +0 -84
  303. data/spec/Features/feature_element_spec.rb +0 -144
  304. data/spec/Features/feature_extream_spec.rb +0 -54
  305. data/spec/Features/feature_generate_spec.rb +0 -74
  306. data/spec/Features/feature_index_spec.rb +0 -69
  307. data/spec/Features/feature_mask_spec.rb +0 -580
  308. data/spec/Features/feature_math_spec.rb +0 -97
  309. data/spec/Features/feature_order_spec.rb +0 -146
  310. data/spec/Features/feature_ref_store_spec.rb +0 -209
  311. data/spec/Features/feature_serialization_spec.rb +0 -125
  312. data/spec/Features/feature_stat_spec.rb +0 -397
  313. data/spec/Features/feature_virtual_spec.rb +0 -48
  314. data/spec/Features/method_eq_spec.rb +0 -81
  315. data/spec/Features/method_is_nan_spec.rb +0 -12
  316. data/spec/Features/method_map_spec.rb +0 -54
  317. data/spec/Features/method_max_with.rb +0 -20
  318. data/spec/Features/method_min_with.rb +0 -19
  319. data/spec/Features/method_ne_spec.rb +0 -18
  320. data/spec/Features/method_project_spec.rb +0 -188
  321. data/spec/Features/method_ref_spec.rb +0 -27
  322. data/spec/Features/method_round_spec.rb +0 -11
  323. data/spec/Features/method_s_linspace_spec.rb +0 -48
  324. data/spec/Features/method_s_span_spec.rb +0 -14
  325. data/spec/Features/method_seq_spec.rb +0 -47
  326. data/spec/Features/method_sort_with.rb +0 -43
  327. data/spec/Features/method_sorted_with.rb +0 -29
  328. data/spec/Features/method_span_spec.rb +0 -42
  329. data/spec/Features/method_wrap_readonly_spec.rb +0 -43
  330. data/spec/UnitTest/test_CAVirtual.rb +0 -214
  331. data/spec/spec_all.rb +0 -10
  332. data/utils/ca_ase.rb +0 -21
  333. data/utils/ca_methods.rb +0 -15
  334. data/utils/cast_checker.rb +0 -30
  335. data/utils/convert_test.rb +0 -73
  336. data/utils/extract_yard.rb +0 -22
  337. data/utils/guess_shape.rb +0 -76
  338. data/utils/monkey_patch_methods.rb +0 -62
  339. data/utils/remove_resource_fork.sh +0 -5
@@ -0,0 +1,2096 @@
1
+ /* ---------------------------------------------------------------------------
2
+
3
+ carray_kernels.c -- GENERATED by ext/mkkernel.rb -- DO NOT EDIT
4
+
5
+ Kernel definitions live in mkkernel.rb (search for `MkKernel.reduce`).
6
+ Regenerate by running:
7
+
8
+ cd ext && ruby mkkernel.rb > carray_kernels.c
9
+
10
+ extconf.rb regenerates automatically when mkkernel.rb is touched.
11
+
12
+ --------------------------------------------------------------------------- */
13
+
14
+ #include "carray.h"
15
+ #include "ca_kernel_iterator.h"
16
+ #include "ca_sort_kernels.h" /* sort kernels: internal, not via the carray.h umbrella */
17
+ #include "carray_internal.h" /* ca_lazy_arena_*, ca_is_lazy_view (streaming reduce) */
18
+ #include "ca_obj_face.h" /* rb_ca_strip_face_value (Face ordering gate) */
19
+ #include <math.h>
20
+ #include <stdint.h>
21
+ #include <stdlib.h> /* qsort, mergesort (HAVE_MERGESORT) -- for :sort kind */
22
+
23
+ /* MEMO_REDUCTION_FASTPATH_ENTITY_ONLY_GUARD Tier 2: CAStack identity is
24
+ probed by operation-table function pointer (obj_type is runtime-
25
+ assigned, so no CA_OBJ_STACK compile-time constant exists). */
26
+ extern ca_operation_function_t ca_stack_func;
27
+ /* BOOL2VAL: bool -> Ruby (Qtrue/Qfalse). Used as ruby_scalar wrapper
28
+ for the all/any flat-reduction Ruby surface so `a.all` / `a.any`
29
+ return real true/false, not Integer 0/1. (BOOL2OBJ already exists
30
+ but returns Integer per CArray's boolean-as-int convention.) */
31
+ #ifndef CARRAY_BOOL2VAL_DEFINED
32
+ #define CARRAY_BOOL2VAL_DEFINED
33
+ static inline VALUE BOOL2VAL (boolean8_t x) { return x ? Qtrue : Qfalse; }
34
+ #endif
35
+
36
+ #include "ca_op_powi.h"
37
+
38
+ /* ===== moncmp is_nan ============================================ */
39
+
40
+ static void
41
+ ca_moncmp_is_nan_int8_t (ca_size_t n, boolean8_t *m,
42
+ char *ptr1, ca_size_t i1,
43
+ boolean8_t *ptr2, ca_size_t i2)
44
+ {
45
+ int8_t *q1 = (int8_t *) ptr1;
46
+ int8_t *p1 = q1;
47
+ boolean8_t *q2 = (boolean8_t *) ptr2;
48
+ boolean8_t *p2 = q2;
49
+ ca_size_t k;
50
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
51
+ if ( m ) {
52
+ boolean8_t *pm;
53
+ for (k=0; k<n; k++) {
54
+ pm = m + k;
55
+ if ( ! *pm ) {
56
+ p1 = q1 + k*i1;
57
+ p2 = q2 + k*i2;
58
+ { (*p2) = 0; }
59
+ }
60
+ }
61
+ } else {
62
+ for (k=0; k<n; k++) {
63
+ p1 = q1 + k*i1;
64
+ p2 = q2 + k*i2;
65
+ { (*p2) = 0; }
66
+ }
67
+ }
68
+ }
69
+
70
+ static void
71
+ ca_moncmp_is_nan_uint8_t (ca_size_t n, boolean8_t *m,
72
+ char *ptr1, ca_size_t i1,
73
+ boolean8_t *ptr2, ca_size_t i2)
74
+ {
75
+ uint8_t *q1 = (uint8_t *) ptr1;
76
+ uint8_t *p1 = q1;
77
+ boolean8_t *q2 = (boolean8_t *) ptr2;
78
+ boolean8_t *p2 = q2;
79
+ ca_size_t k;
80
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
81
+ if ( m ) {
82
+ boolean8_t *pm;
83
+ for (k=0; k<n; k++) {
84
+ pm = m + k;
85
+ if ( ! *pm ) {
86
+ p1 = q1 + k*i1;
87
+ p2 = q2 + k*i2;
88
+ { (*p2) = 0; }
89
+ }
90
+ }
91
+ } else {
92
+ for (k=0; k<n; k++) {
93
+ p1 = q1 + k*i1;
94
+ p2 = q2 + k*i2;
95
+ { (*p2) = 0; }
96
+ }
97
+ }
98
+ }
99
+
100
+ static void
101
+ ca_moncmp_is_nan_int16_t (ca_size_t n, boolean8_t *m,
102
+ char *ptr1, ca_size_t i1,
103
+ boolean8_t *ptr2, ca_size_t i2)
104
+ {
105
+ int16_t *q1 = (int16_t *) ptr1;
106
+ int16_t *p1 = q1;
107
+ boolean8_t *q2 = (boolean8_t *) ptr2;
108
+ boolean8_t *p2 = q2;
109
+ ca_size_t k;
110
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
111
+ if ( m ) {
112
+ boolean8_t *pm;
113
+ for (k=0; k<n; k++) {
114
+ pm = m + k;
115
+ if ( ! *pm ) {
116
+ p1 = q1 + k*i1;
117
+ p2 = q2 + k*i2;
118
+ { (*p2) = 0; }
119
+ }
120
+ }
121
+ } else {
122
+ for (k=0; k<n; k++) {
123
+ p1 = q1 + k*i1;
124
+ p2 = q2 + k*i2;
125
+ { (*p2) = 0; }
126
+ }
127
+ }
128
+ }
129
+
130
+ static void
131
+ ca_moncmp_is_nan_uint16_t (ca_size_t n, boolean8_t *m,
132
+ char *ptr1, ca_size_t i1,
133
+ boolean8_t *ptr2, ca_size_t i2)
134
+ {
135
+ uint16_t *q1 = (uint16_t *) ptr1;
136
+ uint16_t *p1 = q1;
137
+ boolean8_t *q2 = (boolean8_t *) ptr2;
138
+ boolean8_t *p2 = q2;
139
+ ca_size_t k;
140
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
141
+ if ( m ) {
142
+ boolean8_t *pm;
143
+ for (k=0; k<n; k++) {
144
+ pm = m + k;
145
+ if ( ! *pm ) {
146
+ p1 = q1 + k*i1;
147
+ p2 = q2 + k*i2;
148
+ { (*p2) = 0; }
149
+ }
150
+ }
151
+ } else {
152
+ for (k=0; k<n; k++) {
153
+ p1 = q1 + k*i1;
154
+ p2 = q2 + k*i2;
155
+ { (*p2) = 0; }
156
+ }
157
+ }
158
+ }
159
+
160
+ static void
161
+ ca_moncmp_is_nan_int32_t (ca_size_t n, boolean8_t *m,
162
+ char *ptr1, ca_size_t i1,
163
+ boolean8_t *ptr2, ca_size_t i2)
164
+ {
165
+ int32_t *q1 = (int32_t *) ptr1;
166
+ int32_t *p1 = q1;
167
+ boolean8_t *q2 = (boolean8_t *) ptr2;
168
+ boolean8_t *p2 = q2;
169
+ ca_size_t k;
170
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
171
+ if ( m ) {
172
+ boolean8_t *pm;
173
+ for (k=0; k<n; k++) {
174
+ pm = m + k;
175
+ if ( ! *pm ) {
176
+ p1 = q1 + k*i1;
177
+ p2 = q2 + k*i2;
178
+ { (*p2) = 0; }
179
+ }
180
+ }
181
+ } else {
182
+ for (k=0; k<n; k++) {
183
+ p1 = q1 + k*i1;
184
+ p2 = q2 + k*i2;
185
+ { (*p2) = 0; }
186
+ }
187
+ }
188
+ }
189
+
190
+ static void
191
+ ca_moncmp_is_nan_uint32_t (ca_size_t n, boolean8_t *m,
192
+ char *ptr1, ca_size_t i1,
193
+ boolean8_t *ptr2, ca_size_t i2)
194
+ {
195
+ uint32_t *q1 = (uint32_t *) ptr1;
196
+ uint32_t *p1 = q1;
197
+ boolean8_t *q2 = (boolean8_t *) ptr2;
198
+ boolean8_t *p2 = q2;
199
+ ca_size_t k;
200
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
201
+ if ( m ) {
202
+ boolean8_t *pm;
203
+ for (k=0; k<n; k++) {
204
+ pm = m + k;
205
+ if ( ! *pm ) {
206
+ p1 = q1 + k*i1;
207
+ p2 = q2 + k*i2;
208
+ { (*p2) = 0; }
209
+ }
210
+ }
211
+ } else {
212
+ for (k=0; k<n; k++) {
213
+ p1 = q1 + k*i1;
214
+ p2 = q2 + k*i2;
215
+ { (*p2) = 0; }
216
+ }
217
+ }
218
+ }
219
+
220
+ static void
221
+ ca_moncmp_is_nan_int64_t (ca_size_t n, boolean8_t *m,
222
+ char *ptr1, ca_size_t i1,
223
+ boolean8_t *ptr2, ca_size_t i2)
224
+ {
225
+ int64_t *q1 = (int64_t *) ptr1;
226
+ int64_t *p1 = q1;
227
+ boolean8_t *q2 = (boolean8_t *) ptr2;
228
+ boolean8_t *p2 = q2;
229
+ ca_size_t k;
230
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
231
+ if ( m ) {
232
+ boolean8_t *pm;
233
+ for (k=0; k<n; k++) {
234
+ pm = m + k;
235
+ if ( ! *pm ) {
236
+ p1 = q1 + k*i1;
237
+ p2 = q2 + k*i2;
238
+ { (*p2) = 0; }
239
+ }
240
+ }
241
+ } else {
242
+ for (k=0; k<n; k++) {
243
+ p1 = q1 + k*i1;
244
+ p2 = q2 + k*i2;
245
+ { (*p2) = 0; }
246
+ }
247
+ }
248
+ }
249
+
250
+ static void
251
+ ca_moncmp_is_nan_uint64_t (ca_size_t n, boolean8_t *m,
252
+ char *ptr1, ca_size_t i1,
253
+ boolean8_t *ptr2, ca_size_t i2)
254
+ {
255
+ uint64_t *q1 = (uint64_t *) ptr1;
256
+ uint64_t *p1 = q1;
257
+ boolean8_t *q2 = (boolean8_t *) ptr2;
258
+ boolean8_t *p2 = q2;
259
+ ca_size_t k;
260
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
261
+ if ( m ) {
262
+ boolean8_t *pm;
263
+ for (k=0; k<n; k++) {
264
+ pm = m + k;
265
+ if ( ! *pm ) {
266
+ p1 = q1 + k*i1;
267
+ p2 = q2 + k*i2;
268
+ { (*p2) = 0; }
269
+ }
270
+ }
271
+ } else {
272
+ for (k=0; k<n; k++) {
273
+ p1 = q1 + k*i1;
274
+ p2 = q2 + k*i2;
275
+ { (*p2) = 0; }
276
+ }
277
+ }
278
+ }
279
+
280
+ static void
281
+ ca_moncmp_is_nan_float32_t (ca_size_t n, boolean8_t *m,
282
+ char *ptr1, ca_size_t i1,
283
+ boolean8_t *ptr2, ca_size_t i2)
284
+ {
285
+ float *q1 = (float *) ptr1;
286
+ float *p1 = q1;
287
+ boolean8_t *q2 = (boolean8_t *) ptr2;
288
+ boolean8_t *p2 = q2;
289
+ ca_size_t k;
290
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
291
+ if ( m ) {
292
+ boolean8_t *pm;
293
+ for (k=0; k<n; k++) {
294
+ pm = m + k;
295
+ if ( ! *pm ) {
296
+ p1 = q1 + k*i1;
297
+ p2 = q2 + k*i2;
298
+ { (*p2) = isnan(*p1); }
299
+ }
300
+ }
301
+ } else {
302
+ for (k=0; k<n; k++) {
303
+ p1 = q1 + k*i1;
304
+ p2 = q2 + k*i2;
305
+ { (*p2) = isnan(*p1); }
306
+ }
307
+ }
308
+ }
309
+
310
+ static void
311
+ ca_moncmp_is_nan_float64_t (ca_size_t n, boolean8_t *m,
312
+ char *ptr1, ca_size_t i1,
313
+ boolean8_t *ptr2, ca_size_t i2)
314
+ {
315
+ double *q1 = (double *) ptr1;
316
+ double *p1 = q1;
317
+ boolean8_t *q2 = (boolean8_t *) ptr2;
318
+ boolean8_t *p2 = q2;
319
+ ca_size_t k;
320
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
321
+ if ( m ) {
322
+ boolean8_t *pm;
323
+ for (k=0; k<n; k++) {
324
+ pm = m + k;
325
+ if ( ! *pm ) {
326
+ p1 = q1 + k*i1;
327
+ p2 = q2 + k*i2;
328
+ { (*p2) = isnan(*p1); }
329
+ }
330
+ }
331
+ } else {
332
+ for (k=0; k<n; k++) {
333
+ p1 = q1 + k*i1;
334
+ p2 = q2 + k*i2;
335
+ { (*p2) = isnan(*p1); }
336
+ }
337
+ }
338
+ }
339
+
340
+ static void
341
+ ca_moncmp_is_nan_cmplx64_t (ca_size_t n, boolean8_t *m,
342
+ char *ptr1, ca_size_t i1,
343
+ boolean8_t *ptr2, ca_size_t i2)
344
+ {
345
+ cmplx64_t *q1 = (cmplx64_t *) ptr1;
346
+ cmplx64_t *p1 = q1;
347
+ boolean8_t *q2 = (boolean8_t *) ptr2;
348
+ boolean8_t *p2 = q2;
349
+ ca_size_t k;
350
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
351
+ if ( m ) {
352
+ boolean8_t *pm;
353
+ for (k=0; k<n; k++) {
354
+ pm = m + k;
355
+ if ( ! *pm ) {
356
+ p1 = q1 + k*i1;
357
+ p2 = q2 + k*i2;
358
+ { (*p2) = (isnan(creal(*p1)) || isnan(cimag(*p1))); }
359
+ }
360
+ }
361
+ } else {
362
+ for (k=0; k<n; k++) {
363
+ p1 = q1 + k*i1;
364
+ p2 = q2 + k*i2;
365
+ { (*p2) = (isnan(creal(*p1)) || isnan(cimag(*p1))); }
366
+ }
367
+ }
368
+ }
369
+
370
+ static void
371
+ ca_moncmp_is_nan_cmplx128_t (ca_size_t n, boolean8_t *m,
372
+ char *ptr1, ca_size_t i1,
373
+ boolean8_t *ptr2, ca_size_t i2)
374
+ {
375
+ cmplx128_t *q1 = (cmplx128_t *) ptr1;
376
+ cmplx128_t *p1 = q1;
377
+ boolean8_t *q2 = (boolean8_t *) ptr2;
378
+ boolean8_t *p2 = q2;
379
+ ca_size_t k;
380
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
381
+ if ( m ) {
382
+ boolean8_t *pm;
383
+ for (k=0; k<n; k++) {
384
+ pm = m + k;
385
+ if ( ! *pm ) {
386
+ p1 = q1 + k*i1;
387
+ p2 = q2 + k*i2;
388
+ { (*p2) = (isnan(creal(*p1)) || isnan(cimag(*p1))); }
389
+ }
390
+ }
391
+ } else {
392
+ for (k=0; k<n; k++) {
393
+ p1 = q1 + k*i1;
394
+ p2 = q2 + k*i2;
395
+ { (*p2) = (isnan(creal(*p1)) || isnan(cimag(*p1))); }
396
+ }
397
+ }
398
+ }
399
+
400
+ static void
401
+ ca_moncmp_is_nan_VALUE (ca_size_t n, boolean8_t *m,
402
+ char *ptr1, ca_size_t i1,
403
+ boolean8_t *ptr2, ca_size_t i2)
404
+ {
405
+ VALUE *q1 = (VALUE *) ptr1;
406
+ VALUE *p1 = q1;
407
+ boolean8_t *q2 = (boolean8_t *) ptr2;
408
+ boolean8_t *p2 = q2;
409
+ ca_size_t k;
410
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
411
+ if ( m ) {
412
+ boolean8_t *pm;
413
+ for (k=0; k<n; k++) {
414
+ pm = m + k;
415
+ if ( ! *pm ) {
416
+ p1 = q1 + k*i1;
417
+ p2 = q2 + k*i2;
418
+ { (*p2) = rb_funcall((*p1), rb_intern("nan?"), 0); }
419
+ }
420
+ }
421
+ } else {
422
+ for (k=0; k<n; k++) {
423
+ p1 = q1 + k*i1;
424
+ p2 = q2 + k*i2;
425
+ { (*p2) = rb_funcall((*p1), rb_intern("nan?"), 0); }
426
+ }
427
+ }
428
+ }
429
+
430
+ ca_moncmp_func_t
431
+ ca_moncmp_is_nan[CA_NTYPE] = {
432
+ ca_moncmp_not_implement,
433
+ ca_moncmp_not_implement,
434
+ ca_moncmp_is_nan_int8_t,
435
+ ca_moncmp_is_nan_uint8_t,
436
+ ca_moncmp_is_nan_int16_t,
437
+ ca_moncmp_is_nan_uint16_t,
438
+ ca_moncmp_is_nan_int32_t,
439
+ ca_moncmp_is_nan_uint32_t,
440
+ ca_moncmp_is_nan_int64_t,
441
+ ca_moncmp_is_nan_uint64_t,
442
+ ca_moncmp_is_nan_float32_t,
443
+ ca_moncmp_is_nan_float64_t,
444
+ ca_moncmp_not_implement,
445
+ ca_moncmp_is_nan_cmplx64_t,
446
+ ca_moncmp_is_nan_cmplx128_t,
447
+ ca_moncmp_not_implement,
448
+ ca_moncmp_is_nan_VALUE,
449
+ };
450
+
451
+ VALUE rb_ca_is_nan (VALUE self)
452
+ { return rb_ca_call_moncmp(self, ca_moncmp_is_nan); }
453
+
454
+ /* ===== moncmp is_inf ============================================ */
455
+
456
+ static void
457
+ ca_moncmp_is_inf_int8_t (ca_size_t n, boolean8_t *m,
458
+ char *ptr1, ca_size_t i1,
459
+ boolean8_t *ptr2, ca_size_t i2)
460
+ {
461
+ int8_t *q1 = (int8_t *) ptr1;
462
+ int8_t *p1 = q1;
463
+ boolean8_t *q2 = (boolean8_t *) ptr2;
464
+ boolean8_t *p2 = q2;
465
+ ca_size_t k;
466
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
467
+ if ( m ) {
468
+ boolean8_t *pm;
469
+ for (k=0; k<n; k++) {
470
+ pm = m + k;
471
+ if ( ! *pm ) {
472
+ p1 = q1 + k*i1;
473
+ p2 = q2 + k*i2;
474
+ { (*p2) = 0; }
475
+ }
476
+ }
477
+ } else {
478
+ for (k=0; k<n; k++) {
479
+ p1 = q1 + k*i1;
480
+ p2 = q2 + k*i2;
481
+ { (*p2) = 0; }
482
+ }
483
+ }
484
+ }
485
+
486
+ static void
487
+ ca_moncmp_is_inf_uint8_t (ca_size_t n, boolean8_t *m,
488
+ char *ptr1, ca_size_t i1,
489
+ boolean8_t *ptr2, ca_size_t i2)
490
+ {
491
+ uint8_t *q1 = (uint8_t *) ptr1;
492
+ uint8_t *p1 = q1;
493
+ boolean8_t *q2 = (boolean8_t *) ptr2;
494
+ boolean8_t *p2 = q2;
495
+ ca_size_t k;
496
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
497
+ if ( m ) {
498
+ boolean8_t *pm;
499
+ for (k=0; k<n; k++) {
500
+ pm = m + k;
501
+ if ( ! *pm ) {
502
+ p1 = q1 + k*i1;
503
+ p2 = q2 + k*i2;
504
+ { (*p2) = 0; }
505
+ }
506
+ }
507
+ } else {
508
+ for (k=0; k<n; k++) {
509
+ p1 = q1 + k*i1;
510
+ p2 = q2 + k*i2;
511
+ { (*p2) = 0; }
512
+ }
513
+ }
514
+ }
515
+
516
+ static void
517
+ ca_moncmp_is_inf_int16_t (ca_size_t n, boolean8_t *m,
518
+ char *ptr1, ca_size_t i1,
519
+ boolean8_t *ptr2, ca_size_t i2)
520
+ {
521
+ int16_t *q1 = (int16_t *) ptr1;
522
+ int16_t *p1 = q1;
523
+ boolean8_t *q2 = (boolean8_t *) ptr2;
524
+ boolean8_t *p2 = q2;
525
+ ca_size_t k;
526
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
527
+ if ( m ) {
528
+ boolean8_t *pm;
529
+ for (k=0; k<n; k++) {
530
+ pm = m + k;
531
+ if ( ! *pm ) {
532
+ p1 = q1 + k*i1;
533
+ p2 = q2 + k*i2;
534
+ { (*p2) = 0; }
535
+ }
536
+ }
537
+ } else {
538
+ for (k=0; k<n; k++) {
539
+ p1 = q1 + k*i1;
540
+ p2 = q2 + k*i2;
541
+ { (*p2) = 0; }
542
+ }
543
+ }
544
+ }
545
+
546
+ static void
547
+ ca_moncmp_is_inf_uint16_t (ca_size_t n, boolean8_t *m,
548
+ char *ptr1, ca_size_t i1,
549
+ boolean8_t *ptr2, ca_size_t i2)
550
+ {
551
+ uint16_t *q1 = (uint16_t *) ptr1;
552
+ uint16_t *p1 = q1;
553
+ boolean8_t *q2 = (boolean8_t *) ptr2;
554
+ boolean8_t *p2 = q2;
555
+ ca_size_t k;
556
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
557
+ if ( m ) {
558
+ boolean8_t *pm;
559
+ for (k=0; k<n; k++) {
560
+ pm = m + k;
561
+ if ( ! *pm ) {
562
+ p1 = q1 + k*i1;
563
+ p2 = q2 + k*i2;
564
+ { (*p2) = 0; }
565
+ }
566
+ }
567
+ } else {
568
+ for (k=0; k<n; k++) {
569
+ p1 = q1 + k*i1;
570
+ p2 = q2 + k*i2;
571
+ { (*p2) = 0; }
572
+ }
573
+ }
574
+ }
575
+
576
+ static void
577
+ ca_moncmp_is_inf_int32_t (ca_size_t n, boolean8_t *m,
578
+ char *ptr1, ca_size_t i1,
579
+ boolean8_t *ptr2, ca_size_t i2)
580
+ {
581
+ int32_t *q1 = (int32_t *) ptr1;
582
+ int32_t *p1 = q1;
583
+ boolean8_t *q2 = (boolean8_t *) ptr2;
584
+ boolean8_t *p2 = q2;
585
+ ca_size_t k;
586
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
587
+ if ( m ) {
588
+ boolean8_t *pm;
589
+ for (k=0; k<n; k++) {
590
+ pm = m + k;
591
+ if ( ! *pm ) {
592
+ p1 = q1 + k*i1;
593
+ p2 = q2 + k*i2;
594
+ { (*p2) = 0; }
595
+ }
596
+ }
597
+ } else {
598
+ for (k=0; k<n; k++) {
599
+ p1 = q1 + k*i1;
600
+ p2 = q2 + k*i2;
601
+ { (*p2) = 0; }
602
+ }
603
+ }
604
+ }
605
+
606
+ static void
607
+ ca_moncmp_is_inf_uint32_t (ca_size_t n, boolean8_t *m,
608
+ char *ptr1, ca_size_t i1,
609
+ boolean8_t *ptr2, ca_size_t i2)
610
+ {
611
+ uint32_t *q1 = (uint32_t *) ptr1;
612
+ uint32_t *p1 = q1;
613
+ boolean8_t *q2 = (boolean8_t *) ptr2;
614
+ boolean8_t *p2 = q2;
615
+ ca_size_t k;
616
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
617
+ if ( m ) {
618
+ boolean8_t *pm;
619
+ for (k=0; k<n; k++) {
620
+ pm = m + k;
621
+ if ( ! *pm ) {
622
+ p1 = q1 + k*i1;
623
+ p2 = q2 + k*i2;
624
+ { (*p2) = 0; }
625
+ }
626
+ }
627
+ } else {
628
+ for (k=0; k<n; k++) {
629
+ p1 = q1 + k*i1;
630
+ p2 = q2 + k*i2;
631
+ { (*p2) = 0; }
632
+ }
633
+ }
634
+ }
635
+
636
+ static void
637
+ ca_moncmp_is_inf_int64_t (ca_size_t n, boolean8_t *m,
638
+ char *ptr1, ca_size_t i1,
639
+ boolean8_t *ptr2, ca_size_t i2)
640
+ {
641
+ int64_t *q1 = (int64_t *) ptr1;
642
+ int64_t *p1 = q1;
643
+ boolean8_t *q2 = (boolean8_t *) ptr2;
644
+ boolean8_t *p2 = q2;
645
+ ca_size_t k;
646
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
647
+ if ( m ) {
648
+ boolean8_t *pm;
649
+ for (k=0; k<n; k++) {
650
+ pm = m + k;
651
+ if ( ! *pm ) {
652
+ p1 = q1 + k*i1;
653
+ p2 = q2 + k*i2;
654
+ { (*p2) = 0; }
655
+ }
656
+ }
657
+ } else {
658
+ for (k=0; k<n; k++) {
659
+ p1 = q1 + k*i1;
660
+ p2 = q2 + k*i2;
661
+ { (*p2) = 0; }
662
+ }
663
+ }
664
+ }
665
+
666
+ static void
667
+ ca_moncmp_is_inf_uint64_t (ca_size_t n, boolean8_t *m,
668
+ char *ptr1, ca_size_t i1,
669
+ boolean8_t *ptr2, ca_size_t i2)
670
+ {
671
+ uint64_t *q1 = (uint64_t *) ptr1;
672
+ uint64_t *p1 = q1;
673
+ boolean8_t *q2 = (boolean8_t *) ptr2;
674
+ boolean8_t *p2 = q2;
675
+ ca_size_t k;
676
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
677
+ if ( m ) {
678
+ boolean8_t *pm;
679
+ for (k=0; k<n; k++) {
680
+ pm = m + k;
681
+ if ( ! *pm ) {
682
+ p1 = q1 + k*i1;
683
+ p2 = q2 + k*i2;
684
+ { (*p2) = 0; }
685
+ }
686
+ }
687
+ } else {
688
+ for (k=0; k<n; k++) {
689
+ p1 = q1 + k*i1;
690
+ p2 = q2 + k*i2;
691
+ { (*p2) = 0; }
692
+ }
693
+ }
694
+ }
695
+
696
+ static void
697
+ ca_moncmp_is_inf_float32_t (ca_size_t n, boolean8_t *m,
698
+ char *ptr1, ca_size_t i1,
699
+ boolean8_t *ptr2, ca_size_t i2)
700
+ {
701
+ float *q1 = (float *) ptr1;
702
+ float *p1 = q1;
703
+ boolean8_t *q2 = (boolean8_t *) ptr2;
704
+ boolean8_t *p2 = q2;
705
+ ca_size_t k;
706
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
707
+ if ( m ) {
708
+ boolean8_t *pm;
709
+ for (k=0; k<n; k++) {
710
+ pm = m + k;
711
+ if ( ! *pm ) {
712
+ p1 = q1 + k*i1;
713
+ p2 = q2 + k*i2;
714
+ { (*p2) = isinf(*p1); }
715
+ }
716
+ }
717
+ } else {
718
+ for (k=0; k<n; k++) {
719
+ p1 = q1 + k*i1;
720
+ p2 = q2 + k*i2;
721
+ { (*p2) = isinf(*p1); }
722
+ }
723
+ }
724
+ }
725
+
726
+ static void
727
+ ca_moncmp_is_inf_float64_t (ca_size_t n, boolean8_t *m,
728
+ char *ptr1, ca_size_t i1,
729
+ boolean8_t *ptr2, ca_size_t i2)
730
+ {
731
+ double *q1 = (double *) ptr1;
732
+ double *p1 = q1;
733
+ boolean8_t *q2 = (boolean8_t *) ptr2;
734
+ boolean8_t *p2 = q2;
735
+ ca_size_t k;
736
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
737
+ if ( m ) {
738
+ boolean8_t *pm;
739
+ for (k=0; k<n; k++) {
740
+ pm = m + k;
741
+ if ( ! *pm ) {
742
+ p1 = q1 + k*i1;
743
+ p2 = q2 + k*i2;
744
+ { (*p2) = isinf(*p1); }
745
+ }
746
+ }
747
+ } else {
748
+ for (k=0; k<n; k++) {
749
+ p1 = q1 + k*i1;
750
+ p2 = q2 + k*i2;
751
+ { (*p2) = isinf(*p1); }
752
+ }
753
+ }
754
+ }
755
+
756
+ static void
757
+ ca_moncmp_is_inf_cmplx64_t (ca_size_t n, boolean8_t *m,
758
+ char *ptr1, ca_size_t i1,
759
+ boolean8_t *ptr2, ca_size_t i2)
760
+ {
761
+ cmplx64_t *q1 = (cmplx64_t *) ptr1;
762
+ cmplx64_t *p1 = q1;
763
+ boolean8_t *q2 = (boolean8_t *) ptr2;
764
+ boolean8_t *p2 = q2;
765
+ ca_size_t k;
766
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
767
+ if ( m ) {
768
+ boolean8_t *pm;
769
+ for (k=0; k<n; k++) {
770
+ pm = m + k;
771
+ if ( ! *pm ) {
772
+ p1 = q1 + k*i1;
773
+ p2 = q2 + k*i2;
774
+ { (*p2) = (isinf(creal(*p1)) || isinf(cimag(*p1))); }
775
+ }
776
+ }
777
+ } else {
778
+ for (k=0; k<n; k++) {
779
+ p1 = q1 + k*i1;
780
+ p2 = q2 + k*i2;
781
+ { (*p2) = (isinf(creal(*p1)) || isinf(cimag(*p1))); }
782
+ }
783
+ }
784
+ }
785
+
786
+ static void
787
+ ca_moncmp_is_inf_cmplx128_t (ca_size_t n, boolean8_t *m,
788
+ char *ptr1, ca_size_t i1,
789
+ boolean8_t *ptr2, ca_size_t i2)
790
+ {
791
+ cmplx128_t *q1 = (cmplx128_t *) ptr1;
792
+ cmplx128_t *p1 = q1;
793
+ boolean8_t *q2 = (boolean8_t *) ptr2;
794
+ boolean8_t *p2 = q2;
795
+ ca_size_t k;
796
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
797
+ if ( m ) {
798
+ boolean8_t *pm;
799
+ for (k=0; k<n; k++) {
800
+ pm = m + k;
801
+ if ( ! *pm ) {
802
+ p1 = q1 + k*i1;
803
+ p2 = q2 + k*i2;
804
+ { (*p2) = (isinf(creal(*p1)) || isinf(cimag(*p1))); }
805
+ }
806
+ }
807
+ } else {
808
+ for (k=0; k<n; k++) {
809
+ p1 = q1 + k*i1;
810
+ p2 = q2 + k*i2;
811
+ { (*p2) = (isinf(creal(*p1)) || isinf(cimag(*p1))); }
812
+ }
813
+ }
814
+ }
815
+
816
+ static void
817
+ ca_moncmp_is_inf_VALUE (ca_size_t n, boolean8_t *m,
818
+ char *ptr1, ca_size_t i1,
819
+ boolean8_t *ptr2, ca_size_t i2)
820
+ {
821
+ VALUE *q1 = (VALUE *) ptr1;
822
+ VALUE *p1 = q1;
823
+ boolean8_t *q2 = (boolean8_t *) ptr2;
824
+ boolean8_t *p2 = q2;
825
+ ca_size_t k;
826
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
827
+ if ( m ) {
828
+ boolean8_t *pm;
829
+ for (k=0; k<n; k++) {
830
+ pm = m + k;
831
+ if ( ! *pm ) {
832
+ p1 = q1 + k*i1;
833
+ p2 = q2 + k*i2;
834
+ { (*p2) = rb_funcall((*p1), rb_intern("infinite?"), 0); }
835
+ }
836
+ }
837
+ } else {
838
+ for (k=0; k<n; k++) {
839
+ p1 = q1 + k*i1;
840
+ p2 = q2 + k*i2;
841
+ { (*p2) = rb_funcall((*p1), rb_intern("infinite?"), 0); }
842
+ }
843
+ }
844
+ }
845
+
846
+ ca_moncmp_func_t
847
+ ca_moncmp_is_inf[CA_NTYPE] = {
848
+ ca_moncmp_not_implement,
849
+ ca_moncmp_not_implement,
850
+ ca_moncmp_is_inf_int8_t,
851
+ ca_moncmp_is_inf_uint8_t,
852
+ ca_moncmp_is_inf_int16_t,
853
+ ca_moncmp_is_inf_uint16_t,
854
+ ca_moncmp_is_inf_int32_t,
855
+ ca_moncmp_is_inf_uint32_t,
856
+ ca_moncmp_is_inf_int64_t,
857
+ ca_moncmp_is_inf_uint64_t,
858
+ ca_moncmp_is_inf_float32_t,
859
+ ca_moncmp_is_inf_float64_t,
860
+ ca_moncmp_not_implement,
861
+ ca_moncmp_is_inf_cmplx64_t,
862
+ ca_moncmp_is_inf_cmplx128_t,
863
+ ca_moncmp_not_implement,
864
+ ca_moncmp_is_inf_VALUE,
865
+ };
866
+
867
+ VALUE rb_ca_is_inf (VALUE self)
868
+ { return rb_ca_call_moncmp(self, ca_moncmp_is_inf); }
869
+
870
+ /* ===== moncmp is_finite ============================================ */
871
+
872
+ static void
873
+ ca_moncmp_is_finite_int8_t (ca_size_t n, boolean8_t *m,
874
+ char *ptr1, ca_size_t i1,
875
+ boolean8_t *ptr2, ca_size_t i2)
876
+ {
877
+ int8_t *q1 = (int8_t *) ptr1;
878
+ int8_t *p1 = q1;
879
+ boolean8_t *q2 = (boolean8_t *) ptr2;
880
+ boolean8_t *p2 = q2;
881
+ ca_size_t k;
882
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
883
+ if ( m ) {
884
+ boolean8_t *pm;
885
+ for (k=0; k<n; k++) {
886
+ pm = m + k;
887
+ if ( ! *pm ) {
888
+ p1 = q1 + k*i1;
889
+ p2 = q2 + k*i2;
890
+ { (*p2) = 1; }
891
+ }
892
+ }
893
+ } else {
894
+ for (k=0; k<n; k++) {
895
+ p1 = q1 + k*i1;
896
+ p2 = q2 + k*i2;
897
+ { (*p2) = 1; }
898
+ }
899
+ }
900
+ }
901
+
902
+ static void
903
+ ca_moncmp_is_finite_uint8_t (ca_size_t n, boolean8_t *m,
904
+ char *ptr1, ca_size_t i1,
905
+ boolean8_t *ptr2, ca_size_t i2)
906
+ {
907
+ uint8_t *q1 = (uint8_t *) ptr1;
908
+ uint8_t *p1 = q1;
909
+ boolean8_t *q2 = (boolean8_t *) ptr2;
910
+ boolean8_t *p2 = q2;
911
+ ca_size_t k;
912
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
913
+ if ( m ) {
914
+ boolean8_t *pm;
915
+ for (k=0; k<n; k++) {
916
+ pm = m + k;
917
+ if ( ! *pm ) {
918
+ p1 = q1 + k*i1;
919
+ p2 = q2 + k*i2;
920
+ { (*p2) = 1; }
921
+ }
922
+ }
923
+ } else {
924
+ for (k=0; k<n; k++) {
925
+ p1 = q1 + k*i1;
926
+ p2 = q2 + k*i2;
927
+ { (*p2) = 1; }
928
+ }
929
+ }
930
+ }
931
+
932
+ static void
933
+ ca_moncmp_is_finite_int16_t (ca_size_t n, boolean8_t *m,
934
+ char *ptr1, ca_size_t i1,
935
+ boolean8_t *ptr2, ca_size_t i2)
936
+ {
937
+ int16_t *q1 = (int16_t *) ptr1;
938
+ int16_t *p1 = q1;
939
+ boolean8_t *q2 = (boolean8_t *) ptr2;
940
+ boolean8_t *p2 = q2;
941
+ ca_size_t k;
942
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
943
+ if ( m ) {
944
+ boolean8_t *pm;
945
+ for (k=0; k<n; k++) {
946
+ pm = m + k;
947
+ if ( ! *pm ) {
948
+ p1 = q1 + k*i1;
949
+ p2 = q2 + k*i2;
950
+ { (*p2) = 1; }
951
+ }
952
+ }
953
+ } else {
954
+ for (k=0; k<n; k++) {
955
+ p1 = q1 + k*i1;
956
+ p2 = q2 + k*i2;
957
+ { (*p2) = 1; }
958
+ }
959
+ }
960
+ }
961
+
962
+ static void
963
+ ca_moncmp_is_finite_uint16_t (ca_size_t n, boolean8_t *m,
964
+ char *ptr1, ca_size_t i1,
965
+ boolean8_t *ptr2, ca_size_t i2)
966
+ {
967
+ uint16_t *q1 = (uint16_t *) ptr1;
968
+ uint16_t *p1 = q1;
969
+ boolean8_t *q2 = (boolean8_t *) ptr2;
970
+ boolean8_t *p2 = q2;
971
+ ca_size_t k;
972
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
973
+ if ( m ) {
974
+ boolean8_t *pm;
975
+ for (k=0; k<n; k++) {
976
+ pm = m + k;
977
+ if ( ! *pm ) {
978
+ p1 = q1 + k*i1;
979
+ p2 = q2 + k*i2;
980
+ { (*p2) = 1; }
981
+ }
982
+ }
983
+ } else {
984
+ for (k=0; k<n; k++) {
985
+ p1 = q1 + k*i1;
986
+ p2 = q2 + k*i2;
987
+ { (*p2) = 1; }
988
+ }
989
+ }
990
+ }
991
+
992
+ static void
993
+ ca_moncmp_is_finite_int32_t (ca_size_t n, boolean8_t *m,
994
+ char *ptr1, ca_size_t i1,
995
+ boolean8_t *ptr2, ca_size_t i2)
996
+ {
997
+ int32_t *q1 = (int32_t *) ptr1;
998
+ int32_t *p1 = q1;
999
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1000
+ boolean8_t *p2 = q2;
1001
+ ca_size_t k;
1002
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1003
+ if ( m ) {
1004
+ boolean8_t *pm;
1005
+ for (k=0; k<n; k++) {
1006
+ pm = m + k;
1007
+ if ( ! *pm ) {
1008
+ p1 = q1 + k*i1;
1009
+ p2 = q2 + k*i2;
1010
+ { (*p2) = 1; }
1011
+ }
1012
+ }
1013
+ } else {
1014
+ for (k=0; k<n; k++) {
1015
+ p1 = q1 + k*i1;
1016
+ p2 = q2 + k*i2;
1017
+ { (*p2) = 1; }
1018
+ }
1019
+ }
1020
+ }
1021
+
1022
+ static void
1023
+ ca_moncmp_is_finite_uint32_t (ca_size_t n, boolean8_t *m,
1024
+ char *ptr1, ca_size_t i1,
1025
+ boolean8_t *ptr2, ca_size_t i2)
1026
+ {
1027
+ uint32_t *q1 = (uint32_t *) ptr1;
1028
+ uint32_t *p1 = q1;
1029
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1030
+ boolean8_t *p2 = q2;
1031
+ ca_size_t k;
1032
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1033
+ if ( m ) {
1034
+ boolean8_t *pm;
1035
+ for (k=0; k<n; k++) {
1036
+ pm = m + k;
1037
+ if ( ! *pm ) {
1038
+ p1 = q1 + k*i1;
1039
+ p2 = q2 + k*i2;
1040
+ { (*p2) = 1; }
1041
+ }
1042
+ }
1043
+ } else {
1044
+ for (k=0; k<n; k++) {
1045
+ p1 = q1 + k*i1;
1046
+ p2 = q2 + k*i2;
1047
+ { (*p2) = 1; }
1048
+ }
1049
+ }
1050
+ }
1051
+
1052
+ static void
1053
+ ca_moncmp_is_finite_int64_t (ca_size_t n, boolean8_t *m,
1054
+ char *ptr1, ca_size_t i1,
1055
+ boolean8_t *ptr2, ca_size_t i2)
1056
+ {
1057
+ int64_t *q1 = (int64_t *) ptr1;
1058
+ int64_t *p1 = q1;
1059
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1060
+ boolean8_t *p2 = q2;
1061
+ ca_size_t k;
1062
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1063
+ if ( m ) {
1064
+ boolean8_t *pm;
1065
+ for (k=0; k<n; k++) {
1066
+ pm = m + k;
1067
+ if ( ! *pm ) {
1068
+ p1 = q1 + k*i1;
1069
+ p2 = q2 + k*i2;
1070
+ { (*p2) = 1; }
1071
+ }
1072
+ }
1073
+ } else {
1074
+ for (k=0; k<n; k++) {
1075
+ p1 = q1 + k*i1;
1076
+ p2 = q2 + k*i2;
1077
+ { (*p2) = 1; }
1078
+ }
1079
+ }
1080
+ }
1081
+
1082
+ static void
1083
+ ca_moncmp_is_finite_uint64_t (ca_size_t n, boolean8_t *m,
1084
+ char *ptr1, ca_size_t i1,
1085
+ boolean8_t *ptr2, ca_size_t i2)
1086
+ {
1087
+ uint64_t *q1 = (uint64_t *) ptr1;
1088
+ uint64_t *p1 = q1;
1089
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1090
+ boolean8_t *p2 = q2;
1091
+ ca_size_t k;
1092
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1093
+ if ( m ) {
1094
+ boolean8_t *pm;
1095
+ for (k=0; k<n; k++) {
1096
+ pm = m + k;
1097
+ if ( ! *pm ) {
1098
+ p1 = q1 + k*i1;
1099
+ p2 = q2 + k*i2;
1100
+ { (*p2) = 1; }
1101
+ }
1102
+ }
1103
+ } else {
1104
+ for (k=0; k<n; k++) {
1105
+ p1 = q1 + k*i1;
1106
+ p2 = q2 + k*i2;
1107
+ { (*p2) = 1; }
1108
+ }
1109
+ }
1110
+ }
1111
+
1112
+ static void
1113
+ ca_moncmp_is_finite_float32_t (ca_size_t n, boolean8_t *m,
1114
+ char *ptr1, ca_size_t i1,
1115
+ boolean8_t *ptr2, ca_size_t i2)
1116
+ {
1117
+ float *q1 = (float *) ptr1;
1118
+ float *p1 = q1;
1119
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1120
+ boolean8_t *p2 = q2;
1121
+ ca_size_t k;
1122
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1123
+ if ( m ) {
1124
+ boolean8_t *pm;
1125
+ for (k=0; k<n; k++) {
1126
+ pm = m + k;
1127
+ if ( ! *pm ) {
1128
+ p1 = q1 + k*i1;
1129
+ p2 = q2 + k*i2;
1130
+ { (*p2) = isfinite(*p1); }
1131
+ }
1132
+ }
1133
+ } else {
1134
+ for (k=0; k<n; k++) {
1135
+ p1 = q1 + k*i1;
1136
+ p2 = q2 + k*i2;
1137
+ { (*p2) = isfinite(*p1); }
1138
+ }
1139
+ }
1140
+ }
1141
+
1142
+ static void
1143
+ ca_moncmp_is_finite_float64_t (ca_size_t n, boolean8_t *m,
1144
+ char *ptr1, ca_size_t i1,
1145
+ boolean8_t *ptr2, ca_size_t i2)
1146
+ {
1147
+ double *q1 = (double *) ptr1;
1148
+ double *p1 = q1;
1149
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1150
+ boolean8_t *p2 = q2;
1151
+ ca_size_t k;
1152
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1153
+ if ( m ) {
1154
+ boolean8_t *pm;
1155
+ for (k=0; k<n; k++) {
1156
+ pm = m + k;
1157
+ if ( ! *pm ) {
1158
+ p1 = q1 + k*i1;
1159
+ p2 = q2 + k*i2;
1160
+ { (*p2) = isfinite(*p1); }
1161
+ }
1162
+ }
1163
+ } else {
1164
+ for (k=0; k<n; k++) {
1165
+ p1 = q1 + k*i1;
1166
+ p2 = q2 + k*i2;
1167
+ { (*p2) = isfinite(*p1); }
1168
+ }
1169
+ }
1170
+ }
1171
+
1172
+ static void
1173
+ ca_moncmp_is_finite_cmplx64_t (ca_size_t n, boolean8_t *m,
1174
+ char *ptr1, ca_size_t i1,
1175
+ boolean8_t *ptr2, ca_size_t i2)
1176
+ {
1177
+ cmplx64_t *q1 = (cmplx64_t *) ptr1;
1178
+ cmplx64_t *p1 = q1;
1179
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1180
+ boolean8_t *p2 = q2;
1181
+ ca_size_t k;
1182
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1183
+ if ( m ) {
1184
+ boolean8_t *pm;
1185
+ for (k=0; k<n; k++) {
1186
+ pm = m + k;
1187
+ if ( ! *pm ) {
1188
+ p1 = q1 + k*i1;
1189
+ p2 = q2 + k*i2;
1190
+ { (*p2) = (isfinite(creal(*p1)) && isfinite(cimag(*p1))); }
1191
+ }
1192
+ }
1193
+ } else {
1194
+ for (k=0; k<n; k++) {
1195
+ p1 = q1 + k*i1;
1196
+ p2 = q2 + k*i2;
1197
+ { (*p2) = (isfinite(creal(*p1)) && isfinite(cimag(*p1))); }
1198
+ }
1199
+ }
1200
+ }
1201
+
1202
+ static void
1203
+ ca_moncmp_is_finite_cmplx128_t (ca_size_t n, boolean8_t *m,
1204
+ char *ptr1, ca_size_t i1,
1205
+ boolean8_t *ptr2, ca_size_t i2)
1206
+ {
1207
+ cmplx128_t *q1 = (cmplx128_t *) ptr1;
1208
+ cmplx128_t *p1 = q1;
1209
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1210
+ boolean8_t *p2 = q2;
1211
+ ca_size_t k;
1212
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1213
+ if ( m ) {
1214
+ boolean8_t *pm;
1215
+ for (k=0; k<n; k++) {
1216
+ pm = m + k;
1217
+ if ( ! *pm ) {
1218
+ p1 = q1 + k*i1;
1219
+ p2 = q2 + k*i2;
1220
+ { (*p2) = (isfinite(creal(*p1)) && isfinite(cimag(*p1))); }
1221
+ }
1222
+ }
1223
+ } else {
1224
+ for (k=0; k<n; k++) {
1225
+ p1 = q1 + k*i1;
1226
+ p2 = q2 + k*i2;
1227
+ { (*p2) = (isfinite(creal(*p1)) && isfinite(cimag(*p1))); }
1228
+ }
1229
+ }
1230
+ }
1231
+
1232
+ static void
1233
+ ca_moncmp_is_finite_VALUE (ca_size_t n, boolean8_t *m,
1234
+ char *ptr1, ca_size_t i1,
1235
+ boolean8_t *ptr2, ca_size_t i2)
1236
+ {
1237
+ VALUE *q1 = (VALUE *) ptr1;
1238
+ VALUE *p1 = q1;
1239
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1240
+ boolean8_t *p2 = q2;
1241
+ ca_size_t k;
1242
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1243
+ if ( m ) {
1244
+ boolean8_t *pm;
1245
+ for (k=0; k<n; k++) {
1246
+ pm = m + k;
1247
+ if ( ! *pm ) {
1248
+ p1 = q1 + k*i1;
1249
+ p2 = q2 + k*i2;
1250
+ { (*p2) = rb_funcall((*p1), rb_intern("finite?"), 0); }
1251
+ }
1252
+ }
1253
+ } else {
1254
+ for (k=0; k<n; k++) {
1255
+ p1 = q1 + k*i1;
1256
+ p2 = q2 + k*i2;
1257
+ { (*p2) = rb_funcall((*p1), rb_intern("finite?"), 0); }
1258
+ }
1259
+ }
1260
+ }
1261
+
1262
+ ca_moncmp_func_t
1263
+ ca_moncmp_is_finite[CA_NTYPE] = {
1264
+ ca_moncmp_not_implement,
1265
+ ca_moncmp_not_implement,
1266
+ ca_moncmp_is_finite_int8_t,
1267
+ ca_moncmp_is_finite_uint8_t,
1268
+ ca_moncmp_is_finite_int16_t,
1269
+ ca_moncmp_is_finite_uint16_t,
1270
+ ca_moncmp_is_finite_int32_t,
1271
+ ca_moncmp_is_finite_uint32_t,
1272
+ ca_moncmp_is_finite_int64_t,
1273
+ ca_moncmp_is_finite_uint64_t,
1274
+ ca_moncmp_is_finite_float32_t,
1275
+ ca_moncmp_is_finite_float64_t,
1276
+ ca_moncmp_not_implement,
1277
+ ca_moncmp_is_finite_cmplx64_t,
1278
+ ca_moncmp_is_finite_cmplx128_t,
1279
+ ca_moncmp_not_implement,
1280
+ ca_moncmp_is_finite_VALUE,
1281
+ };
1282
+
1283
+ VALUE rb_ca_is_finite (VALUE self)
1284
+ { return rb_ca_call_moncmp(self, ca_moncmp_is_finite); }
1285
+
1286
+ /* ===== moncmp is_invalid ============================================ */
1287
+
1288
+ static void
1289
+ ca_moncmp_is_invalid_boolean8_t (ca_size_t n, boolean8_t *m,
1290
+ char *ptr1, ca_size_t i1,
1291
+ boolean8_t *ptr2, ca_size_t i2)
1292
+ {
1293
+ boolean8_t *q1 = (boolean8_t *) ptr1;
1294
+ boolean8_t *p1 = q1;
1295
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1296
+ boolean8_t *p2 = q2;
1297
+ ca_size_t k;
1298
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1299
+ if ( m ) {
1300
+ boolean8_t *pm;
1301
+ for (k=0; k<n; k++) {
1302
+ pm = m + k;
1303
+ if ( ! *pm ) {
1304
+ p1 = q1 + k*i1;
1305
+ p2 = q2 + k*i2;
1306
+ { (*p2) = 0; }
1307
+ }
1308
+ }
1309
+ } else {
1310
+ for (k=0; k<n; k++) {
1311
+ p1 = q1 + k*i1;
1312
+ p2 = q2 + k*i2;
1313
+ { (*p2) = 0; }
1314
+ }
1315
+ }
1316
+ }
1317
+
1318
+ static void
1319
+ ca_moncmp_is_invalid_int8_t (ca_size_t n, boolean8_t *m,
1320
+ char *ptr1, ca_size_t i1,
1321
+ boolean8_t *ptr2, ca_size_t i2)
1322
+ {
1323
+ int8_t *q1 = (int8_t *) ptr1;
1324
+ int8_t *p1 = q1;
1325
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1326
+ boolean8_t *p2 = q2;
1327
+ ca_size_t k;
1328
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1329
+ if ( m ) {
1330
+ boolean8_t *pm;
1331
+ for (k=0; k<n; k++) {
1332
+ pm = m + k;
1333
+ if ( ! *pm ) {
1334
+ p1 = q1 + k*i1;
1335
+ p2 = q2 + k*i2;
1336
+ { (*p2) = 0; }
1337
+ }
1338
+ }
1339
+ } else {
1340
+ for (k=0; k<n; k++) {
1341
+ p1 = q1 + k*i1;
1342
+ p2 = q2 + k*i2;
1343
+ { (*p2) = 0; }
1344
+ }
1345
+ }
1346
+ }
1347
+
1348
+ static void
1349
+ ca_moncmp_is_invalid_uint8_t (ca_size_t n, boolean8_t *m,
1350
+ char *ptr1, ca_size_t i1,
1351
+ boolean8_t *ptr2, ca_size_t i2)
1352
+ {
1353
+ uint8_t *q1 = (uint8_t *) ptr1;
1354
+ uint8_t *p1 = q1;
1355
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1356
+ boolean8_t *p2 = q2;
1357
+ ca_size_t k;
1358
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1359
+ if ( m ) {
1360
+ boolean8_t *pm;
1361
+ for (k=0; k<n; k++) {
1362
+ pm = m + k;
1363
+ if ( ! *pm ) {
1364
+ p1 = q1 + k*i1;
1365
+ p2 = q2 + k*i2;
1366
+ { (*p2) = 0; }
1367
+ }
1368
+ }
1369
+ } else {
1370
+ for (k=0; k<n; k++) {
1371
+ p1 = q1 + k*i1;
1372
+ p2 = q2 + k*i2;
1373
+ { (*p2) = 0; }
1374
+ }
1375
+ }
1376
+ }
1377
+
1378
+ static void
1379
+ ca_moncmp_is_invalid_int16_t (ca_size_t n, boolean8_t *m,
1380
+ char *ptr1, ca_size_t i1,
1381
+ boolean8_t *ptr2, ca_size_t i2)
1382
+ {
1383
+ int16_t *q1 = (int16_t *) ptr1;
1384
+ int16_t *p1 = q1;
1385
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1386
+ boolean8_t *p2 = q2;
1387
+ ca_size_t k;
1388
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1389
+ if ( m ) {
1390
+ boolean8_t *pm;
1391
+ for (k=0; k<n; k++) {
1392
+ pm = m + k;
1393
+ if ( ! *pm ) {
1394
+ p1 = q1 + k*i1;
1395
+ p2 = q2 + k*i2;
1396
+ { (*p2) = 0; }
1397
+ }
1398
+ }
1399
+ } else {
1400
+ for (k=0; k<n; k++) {
1401
+ p1 = q1 + k*i1;
1402
+ p2 = q2 + k*i2;
1403
+ { (*p2) = 0; }
1404
+ }
1405
+ }
1406
+ }
1407
+
1408
+ static void
1409
+ ca_moncmp_is_invalid_uint16_t (ca_size_t n, boolean8_t *m,
1410
+ char *ptr1, ca_size_t i1,
1411
+ boolean8_t *ptr2, ca_size_t i2)
1412
+ {
1413
+ uint16_t *q1 = (uint16_t *) ptr1;
1414
+ uint16_t *p1 = q1;
1415
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1416
+ boolean8_t *p2 = q2;
1417
+ ca_size_t k;
1418
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1419
+ if ( m ) {
1420
+ boolean8_t *pm;
1421
+ for (k=0; k<n; k++) {
1422
+ pm = m + k;
1423
+ if ( ! *pm ) {
1424
+ p1 = q1 + k*i1;
1425
+ p2 = q2 + k*i2;
1426
+ { (*p2) = 0; }
1427
+ }
1428
+ }
1429
+ } else {
1430
+ for (k=0; k<n; k++) {
1431
+ p1 = q1 + k*i1;
1432
+ p2 = q2 + k*i2;
1433
+ { (*p2) = 0; }
1434
+ }
1435
+ }
1436
+ }
1437
+
1438
+ static void
1439
+ ca_moncmp_is_invalid_int32_t (ca_size_t n, boolean8_t *m,
1440
+ char *ptr1, ca_size_t i1,
1441
+ boolean8_t *ptr2, ca_size_t i2)
1442
+ {
1443
+ int32_t *q1 = (int32_t *) ptr1;
1444
+ int32_t *p1 = q1;
1445
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1446
+ boolean8_t *p2 = q2;
1447
+ ca_size_t k;
1448
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1449
+ if ( m ) {
1450
+ boolean8_t *pm;
1451
+ for (k=0; k<n; k++) {
1452
+ pm = m + k;
1453
+ if ( ! *pm ) {
1454
+ p1 = q1 + k*i1;
1455
+ p2 = q2 + k*i2;
1456
+ { (*p2) = 0; }
1457
+ }
1458
+ }
1459
+ } else {
1460
+ for (k=0; k<n; k++) {
1461
+ p1 = q1 + k*i1;
1462
+ p2 = q2 + k*i2;
1463
+ { (*p2) = 0; }
1464
+ }
1465
+ }
1466
+ }
1467
+
1468
+ static void
1469
+ ca_moncmp_is_invalid_uint32_t (ca_size_t n, boolean8_t *m,
1470
+ char *ptr1, ca_size_t i1,
1471
+ boolean8_t *ptr2, ca_size_t i2)
1472
+ {
1473
+ uint32_t *q1 = (uint32_t *) ptr1;
1474
+ uint32_t *p1 = q1;
1475
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1476
+ boolean8_t *p2 = q2;
1477
+ ca_size_t k;
1478
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1479
+ if ( m ) {
1480
+ boolean8_t *pm;
1481
+ for (k=0; k<n; k++) {
1482
+ pm = m + k;
1483
+ if ( ! *pm ) {
1484
+ p1 = q1 + k*i1;
1485
+ p2 = q2 + k*i2;
1486
+ { (*p2) = 0; }
1487
+ }
1488
+ }
1489
+ } else {
1490
+ for (k=0; k<n; k++) {
1491
+ p1 = q1 + k*i1;
1492
+ p2 = q2 + k*i2;
1493
+ { (*p2) = 0; }
1494
+ }
1495
+ }
1496
+ }
1497
+
1498
+ static void
1499
+ ca_moncmp_is_invalid_int64_t (ca_size_t n, boolean8_t *m,
1500
+ char *ptr1, ca_size_t i1,
1501
+ boolean8_t *ptr2, ca_size_t i2)
1502
+ {
1503
+ int64_t *q1 = (int64_t *) ptr1;
1504
+ int64_t *p1 = q1;
1505
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1506
+ boolean8_t *p2 = q2;
1507
+ ca_size_t k;
1508
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1509
+ if ( m ) {
1510
+ boolean8_t *pm;
1511
+ for (k=0; k<n; k++) {
1512
+ pm = m + k;
1513
+ if ( ! *pm ) {
1514
+ p1 = q1 + k*i1;
1515
+ p2 = q2 + k*i2;
1516
+ { (*p2) = 0; }
1517
+ }
1518
+ }
1519
+ } else {
1520
+ for (k=0; k<n; k++) {
1521
+ p1 = q1 + k*i1;
1522
+ p2 = q2 + k*i2;
1523
+ { (*p2) = 0; }
1524
+ }
1525
+ }
1526
+ }
1527
+
1528
+ static void
1529
+ ca_moncmp_is_invalid_uint64_t (ca_size_t n, boolean8_t *m,
1530
+ char *ptr1, ca_size_t i1,
1531
+ boolean8_t *ptr2, ca_size_t i2)
1532
+ {
1533
+ uint64_t *q1 = (uint64_t *) ptr1;
1534
+ uint64_t *p1 = q1;
1535
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1536
+ boolean8_t *p2 = q2;
1537
+ ca_size_t k;
1538
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1539
+ if ( m ) {
1540
+ boolean8_t *pm;
1541
+ for (k=0; k<n; k++) {
1542
+ pm = m + k;
1543
+ if ( ! *pm ) {
1544
+ p1 = q1 + k*i1;
1545
+ p2 = q2 + k*i2;
1546
+ { (*p2) = 0; }
1547
+ }
1548
+ }
1549
+ } else {
1550
+ for (k=0; k<n; k++) {
1551
+ p1 = q1 + k*i1;
1552
+ p2 = q2 + k*i2;
1553
+ { (*p2) = 0; }
1554
+ }
1555
+ }
1556
+ }
1557
+
1558
+ static void
1559
+ ca_moncmp_is_invalid_float32_t (ca_size_t n, boolean8_t *m,
1560
+ char *ptr1, ca_size_t i1,
1561
+ boolean8_t *ptr2, ca_size_t i2)
1562
+ {
1563
+ float *q1 = (float *) ptr1;
1564
+ float *p1 = q1;
1565
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1566
+ boolean8_t *p2 = q2;
1567
+ ca_size_t k;
1568
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1569
+ if ( m ) {
1570
+ boolean8_t *pm;
1571
+ for (k=0; k<n; k++) {
1572
+ pm = m + k;
1573
+ if ( ! *pm ) {
1574
+ p1 = q1 + k*i1;
1575
+ p2 = q2 + k*i2;
1576
+ { (*p2) = (!isfinite(*p1)); }
1577
+ }
1578
+ }
1579
+ } else {
1580
+ for (k=0; k<n; k++) {
1581
+ p1 = q1 + k*i1;
1582
+ p2 = q2 + k*i2;
1583
+ { (*p2) = (!isfinite(*p1)); }
1584
+ }
1585
+ }
1586
+ }
1587
+
1588
+ static void
1589
+ ca_moncmp_is_invalid_float64_t (ca_size_t n, boolean8_t *m,
1590
+ char *ptr1, ca_size_t i1,
1591
+ boolean8_t *ptr2, ca_size_t i2)
1592
+ {
1593
+ double *q1 = (double *) ptr1;
1594
+ double *p1 = q1;
1595
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1596
+ boolean8_t *p2 = q2;
1597
+ ca_size_t k;
1598
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1599
+ if ( m ) {
1600
+ boolean8_t *pm;
1601
+ for (k=0; k<n; k++) {
1602
+ pm = m + k;
1603
+ if ( ! *pm ) {
1604
+ p1 = q1 + k*i1;
1605
+ p2 = q2 + k*i2;
1606
+ { (*p2) = (!isfinite(*p1)); }
1607
+ }
1608
+ }
1609
+ } else {
1610
+ for (k=0; k<n; k++) {
1611
+ p1 = q1 + k*i1;
1612
+ p2 = q2 + k*i2;
1613
+ { (*p2) = (!isfinite(*p1)); }
1614
+ }
1615
+ }
1616
+ }
1617
+
1618
+ static void
1619
+ ca_moncmp_is_invalid_cmplx64_t (ca_size_t n, boolean8_t *m,
1620
+ char *ptr1, ca_size_t i1,
1621
+ boolean8_t *ptr2, ca_size_t i2)
1622
+ {
1623
+ cmplx64_t *q1 = (cmplx64_t *) ptr1;
1624
+ cmplx64_t *p1 = q1;
1625
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1626
+ boolean8_t *p2 = q2;
1627
+ ca_size_t k;
1628
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1629
+ if ( m ) {
1630
+ boolean8_t *pm;
1631
+ for (k=0; k<n; k++) {
1632
+ pm = m + k;
1633
+ if ( ! *pm ) {
1634
+ p1 = q1 + k*i1;
1635
+ p2 = q2 + k*i2;
1636
+ { (*p2) = (!isfinite(creal(*p1)) || !isfinite(cimag(*p1))); }
1637
+ }
1638
+ }
1639
+ } else {
1640
+ for (k=0; k<n; k++) {
1641
+ p1 = q1 + k*i1;
1642
+ p2 = q2 + k*i2;
1643
+ { (*p2) = (!isfinite(creal(*p1)) || !isfinite(cimag(*p1))); }
1644
+ }
1645
+ }
1646
+ }
1647
+
1648
+ static void
1649
+ ca_moncmp_is_invalid_cmplx128_t (ca_size_t n, boolean8_t *m,
1650
+ char *ptr1, ca_size_t i1,
1651
+ boolean8_t *ptr2, ca_size_t i2)
1652
+ {
1653
+ cmplx128_t *q1 = (cmplx128_t *) ptr1;
1654
+ cmplx128_t *p1 = q1;
1655
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1656
+ boolean8_t *p2 = q2;
1657
+ ca_size_t k;
1658
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1659
+ if ( m ) {
1660
+ boolean8_t *pm;
1661
+ for (k=0; k<n; k++) {
1662
+ pm = m + k;
1663
+ if ( ! *pm ) {
1664
+ p1 = q1 + k*i1;
1665
+ p2 = q2 + k*i2;
1666
+ { (*p2) = (!isfinite(creal(*p1)) || !isfinite(cimag(*p1))); }
1667
+ }
1668
+ }
1669
+ } else {
1670
+ for (k=0; k<n; k++) {
1671
+ p1 = q1 + k*i1;
1672
+ p2 = q2 + k*i2;
1673
+ { (*p2) = (!isfinite(creal(*p1)) || !isfinite(cimag(*p1))); }
1674
+ }
1675
+ }
1676
+ }
1677
+
1678
+ static void
1679
+ ca_moncmp_is_invalid_VALUE (ca_size_t n, boolean8_t *m,
1680
+ char *ptr1, ca_size_t i1,
1681
+ boolean8_t *ptr2, ca_size_t i2)
1682
+ {
1683
+ VALUE *q1 = (VALUE *) ptr1;
1684
+ VALUE *p1 = q1;
1685
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1686
+ boolean8_t *p2 = q2;
1687
+ ca_size_t k;
1688
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1689
+ if ( m ) {
1690
+ boolean8_t *pm;
1691
+ for (k=0; k<n; k++) {
1692
+ pm = m + k;
1693
+ if ( ! *pm ) {
1694
+ p1 = q1 + k*i1;
1695
+ p2 = q2 + k*i2;
1696
+ { (*p2) = (RTEST(rb_funcall((*p1), rb_intern("finite?"), 0)) ? 0 : 1); }
1697
+ }
1698
+ }
1699
+ } else {
1700
+ for (k=0; k<n; k++) {
1701
+ p1 = q1 + k*i1;
1702
+ p2 = q2 + k*i2;
1703
+ { (*p2) = (RTEST(rb_funcall((*p1), rb_intern("finite?"), 0)) ? 0 : 1); }
1704
+ }
1705
+ }
1706
+ }
1707
+
1708
+ ca_moncmp_func_t
1709
+ ca_moncmp_is_invalid[CA_NTYPE] = {
1710
+ ca_moncmp_not_implement,
1711
+ ca_moncmp_is_invalid_boolean8_t,
1712
+ ca_moncmp_is_invalid_int8_t,
1713
+ ca_moncmp_is_invalid_uint8_t,
1714
+ ca_moncmp_is_invalid_int16_t,
1715
+ ca_moncmp_is_invalid_uint16_t,
1716
+ ca_moncmp_is_invalid_int32_t,
1717
+ ca_moncmp_is_invalid_uint32_t,
1718
+ ca_moncmp_is_invalid_int64_t,
1719
+ ca_moncmp_is_invalid_uint64_t,
1720
+ ca_moncmp_is_invalid_float32_t,
1721
+ ca_moncmp_is_invalid_float64_t,
1722
+ ca_moncmp_not_implement,
1723
+ ca_moncmp_is_invalid_cmplx64_t,
1724
+ ca_moncmp_is_invalid_cmplx128_t,
1725
+ ca_moncmp_not_implement,
1726
+ ca_moncmp_is_invalid_VALUE,
1727
+ };
1728
+
1729
+ VALUE rb_ca_is_invalid (VALUE self)
1730
+ { return rb_ca_call_moncmp(self, ca_moncmp_is_invalid); }
1731
+
1732
+ /* ===== moncmp signbit ============================================ */
1733
+
1734
+ static void
1735
+ ca_moncmp_signbit_int8_t (ca_size_t n, boolean8_t *m,
1736
+ char *ptr1, ca_size_t i1,
1737
+ boolean8_t *ptr2, ca_size_t i2)
1738
+ {
1739
+ int8_t *q1 = (int8_t *) ptr1;
1740
+ int8_t *p1 = q1;
1741
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1742
+ boolean8_t *p2 = q2;
1743
+ ca_size_t k;
1744
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1745
+ if ( m ) {
1746
+ boolean8_t *pm;
1747
+ for (k=0; k<n; k++) {
1748
+ pm = m + k;
1749
+ if ( ! *pm ) {
1750
+ p1 = q1 + k*i1;
1751
+ p2 = q2 + k*i2;
1752
+ { (*p2) = ((*p1) < 0); }
1753
+ }
1754
+ }
1755
+ } else {
1756
+ for (k=0; k<n; k++) {
1757
+ p1 = q1 + k*i1;
1758
+ p2 = q2 + k*i2;
1759
+ { (*p2) = ((*p1) < 0); }
1760
+ }
1761
+ }
1762
+ }
1763
+
1764
+ static void
1765
+ ca_moncmp_signbit_int16_t (ca_size_t n, boolean8_t *m,
1766
+ char *ptr1, ca_size_t i1,
1767
+ boolean8_t *ptr2, ca_size_t i2)
1768
+ {
1769
+ int16_t *q1 = (int16_t *) ptr1;
1770
+ int16_t *p1 = q1;
1771
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1772
+ boolean8_t *p2 = q2;
1773
+ ca_size_t k;
1774
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1775
+ if ( m ) {
1776
+ boolean8_t *pm;
1777
+ for (k=0; k<n; k++) {
1778
+ pm = m + k;
1779
+ if ( ! *pm ) {
1780
+ p1 = q1 + k*i1;
1781
+ p2 = q2 + k*i2;
1782
+ { (*p2) = ((*p1) < 0); }
1783
+ }
1784
+ }
1785
+ } else {
1786
+ for (k=0; k<n; k++) {
1787
+ p1 = q1 + k*i1;
1788
+ p2 = q2 + k*i2;
1789
+ { (*p2) = ((*p1) < 0); }
1790
+ }
1791
+ }
1792
+ }
1793
+
1794
+ static void
1795
+ ca_moncmp_signbit_int32_t (ca_size_t n, boolean8_t *m,
1796
+ char *ptr1, ca_size_t i1,
1797
+ boolean8_t *ptr2, ca_size_t i2)
1798
+ {
1799
+ int32_t *q1 = (int32_t *) ptr1;
1800
+ int32_t *p1 = q1;
1801
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1802
+ boolean8_t *p2 = q2;
1803
+ ca_size_t k;
1804
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1805
+ if ( m ) {
1806
+ boolean8_t *pm;
1807
+ for (k=0; k<n; k++) {
1808
+ pm = m + k;
1809
+ if ( ! *pm ) {
1810
+ p1 = q1 + k*i1;
1811
+ p2 = q2 + k*i2;
1812
+ { (*p2) = ((*p1) < 0); }
1813
+ }
1814
+ }
1815
+ } else {
1816
+ for (k=0; k<n; k++) {
1817
+ p1 = q1 + k*i1;
1818
+ p2 = q2 + k*i2;
1819
+ { (*p2) = ((*p1) < 0); }
1820
+ }
1821
+ }
1822
+ }
1823
+
1824
+ static void
1825
+ ca_moncmp_signbit_int64_t (ca_size_t n, boolean8_t *m,
1826
+ char *ptr1, ca_size_t i1,
1827
+ boolean8_t *ptr2, ca_size_t i2)
1828
+ {
1829
+ int64_t *q1 = (int64_t *) ptr1;
1830
+ int64_t *p1 = q1;
1831
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1832
+ boolean8_t *p2 = q2;
1833
+ ca_size_t k;
1834
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1835
+ if ( m ) {
1836
+ boolean8_t *pm;
1837
+ for (k=0; k<n; k++) {
1838
+ pm = m + k;
1839
+ if ( ! *pm ) {
1840
+ p1 = q1 + k*i1;
1841
+ p2 = q2 + k*i2;
1842
+ { (*p2) = ((*p1) < 0); }
1843
+ }
1844
+ }
1845
+ } else {
1846
+ for (k=0; k<n; k++) {
1847
+ p1 = q1 + k*i1;
1848
+ p2 = q2 + k*i2;
1849
+ { (*p2) = ((*p1) < 0); }
1850
+ }
1851
+ }
1852
+ }
1853
+
1854
+ static void
1855
+ ca_moncmp_signbit_uint8_t (ca_size_t n, boolean8_t *m,
1856
+ char *ptr1, ca_size_t i1,
1857
+ boolean8_t *ptr2, ca_size_t i2)
1858
+ {
1859
+ uint8_t *q1 = (uint8_t *) ptr1;
1860
+ uint8_t *p1 = q1;
1861
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1862
+ boolean8_t *p2 = q2;
1863
+ ca_size_t k;
1864
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1865
+ if ( m ) {
1866
+ boolean8_t *pm;
1867
+ for (k=0; k<n; k++) {
1868
+ pm = m + k;
1869
+ if ( ! *pm ) {
1870
+ p1 = q1 + k*i1;
1871
+ p2 = q2 + k*i2;
1872
+ { (*p2) = 0; }
1873
+ }
1874
+ }
1875
+ } else {
1876
+ for (k=0; k<n; k++) {
1877
+ p1 = q1 + k*i1;
1878
+ p2 = q2 + k*i2;
1879
+ { (*p2) = 0; }
1880
+ }
1881
+ }
1882
+ }
1883
+
1884
+ static void
1885
+ ca_moncmp_signbit_uint16_t (ca_size_t n, boolean8_t *m,
1886
+ char *ptr1, ca_size_t i1,
1887
+ boolean8_t *ptr2, ca_size_t i2)
1888
+ {
1889
+ uint16_t *q1 = (uint16_t *) ptr1;
1890
+ uint16_t *p1 = q1;
1891
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1892
+ boolean8_t *p2 = q2;
1893
+ ca_size_t k;
1894
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1895
+ if ( m ) {
1896
+ boolean8_t *pm;
1897
+ for (k=0; k<n; k++) {
1898
+ pm = m + k;
1899
+ if ( ! *pm ) {
1900
+ p1 = q1 + k*i1;
1901
+ p2 = q2 + k*i2;
1902
+ { (*p2) = 0; }
1903
+ }
1904
+ }
1905
+ } else {
1906
+ for (k=0; k<n; k++) {
1907
+ p1 = q1 + k*i1;
1908
+ p2 = q2 + k*i2;
1909
+ { (*p2) = 0; }
1910
+ }
1911
+ }
1912
+ }
1913
+
1914
+ static void
1915
+ ca_moncmp_signbit_uint32_t (ca_size_t n, boolean8_t *m,
1916
+ char *ptr1, ca_size_t i1,
1917
+ boolean8_t *ptr2, ca_size_t i2)
1918
+ {
1919
+ uint32_t *q1 = (uint32_t *) ptr1;
1920
+ uint32_t *p1 = q1;
1921
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1922
+ boolean8_t *p2 = q2;
1923
+ ca_size_t k;
1924
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1925
+ if ( m ) {
1926
+ boolean8_t *pm;
1927
+ for (k=0; k<n; k++) {
1928
+ pm = m + k;
1929
+ if ( ! *pm ) {
1930
+ p1 = q1 + k*i1;
1931
+ p2 = q2 + k*i2;
1932
+ { (*p2) = 0; }
1933
+ }
1934
+ }
1935
+ } else {
1936
+ for (k=0; k<n; k++) {
1937
+ p1 = q1 + k*i1;
1938
+ p2 = q2 + k*i2;
1939
+ { (*p2) = 0; }
1940
+ }
1941
+ }
1942
+ }
1943
+
1944
+ static void
1945
+ ca_moncmp_signbit_uint64_t (ca_size_t n, boolean8_t *m,
1946
+ char *ptr1, ca_size_t i1,
1947
+ boolean8_t *ptr2, ca_size_t i2)
1948
+ {
1949
+ uint64_t *q1 = (uint64_t *) ptr1;
1950
+ uint64_t *p1 = q1;
1951
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1952
+ boolean8_t *p2 = q2;
1953
+ ca_size_t k;
1954
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1955
+ if ( m ) {
1956
+ boolean8_t *pm;
1957
+ for (k=0; k<n; k++) {
1958
+ pm = m + k;
1959
+ if ( ! *pm ) {
1960
+ p1 = q1 + k*i1;
1961
+ p2 = q2 + k*i2;
1962
+ { (*p2) = 0; }
1963
+ }
1964
+ }
1965
+ } else {
1966
+ for (k=0; k<n; k++) {
1967
+ p1 = q1 + k*i1;
1968
+ p2 = q2 + k*i2;
1969
+ { (*p2) = 0; }
1970
+ }
1971
+ }
1972
+ }
1973
+
1974
+ static void
1975
+ ca_moncmp_signbit_float32_t (ca_size_t n, boolean8_t *m,
1976
+ char *ptr1, ca_size_t i1,
1977
+ boolean8_t *ptr2, ca_size_t i2)
1978
+ {
1979
+ float *q1 = (float *) ptr1;
1980
+ float *p1 = q1;
1981
+ boolean8_t *q2 = (boolean8_t *) ptr2;
1982
+ boolean8_t *p2 = q2;
1983
+ ca_size_t k;
1984
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
1985
+ if ( m ) {
1986
+ boolean8_t *pm;
1987
+ for (k=0; k<n; k++) {
1988
+ pm = m + k;
1989
+ if ( ! *pm ) {
1990
+ p1 = q1 + k*i1;
1991
+ p2 = q2 + k*i2;
1992
+ { (*p2) = signbit(*p1); }
1993
+ }
1994
+ }
1995
+ } else {
1996
+ for (k=0; k<n; k++) {
1997
+ p1 = q1 + k*i1;
1998
+ p2 = q2 + k*i2;
1999
+ { (*p2) = signbit(*p1); }
2000
+ }
2001
+ }
2002
+ }
2003
+
2004
+ static void
2005
+ ca_moncmp_signbit_float64_t (ca_size_t n, boolean8_t *m,
2006
+ char *ptr1, ca_size_t i1,
2007
+ boolean8_t *ptr2, ca_size_t i2)
2008
+ {
2009
+ double *q1 = (double *) ptr1;
2010
+ double *p1 = q1;
2011
+ boolean8_t *q2 = (boolean8_t *) ptr2;
2012
+ boolean8_t *p2 = q2;
2013
+ ca_size_t k;
2014
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
2015
+ if ( m ) {
2016
+ boolean8_t *pm;
2017
+ for (k=0; k<n; k++) {
2018
+ pm = m + k;
2019
+ if ( ! *pm ) {
2020
+ p1 = q1 + k*i1;
2021
+ p2 = q2 + k*i2;
2022
+ { (*p2) = signbit(*p1); }
2023
+ }
2024
+ }
2025
+ } else {
2026
+ for (k=0; k<n; k++) {
2027
+ p1 = q1 + k*i1;
2028
+ p2 = q2 + k*i2;
2029
+ { (*p2) = signbit(*p1); }
2030
+ }
2031
+ }
2032
+ }
2033
+
2034
+ static void
2035
+ ca_moncmp_signbit_VALUE (ca_size_t n, boolean8_t *m,
2036
+ char *ptr1, ca_size_t i1,
2037
+ boolean8_t *ptr2, ca_size_t i2)
2038
+ {
2039
+ VALUE *q1 = (VALUE *) ptr1;
2040
+ VALUE *p1 = q1;
2041
+ boolean8_t *q2 = (boolean8_t *) ptr2;
2042
+ boolean8_t *p2 = q2;
2043
+ ca_size_t k;
2044
+ (void) p1; /* expr may not reference *p1 (e.g. constant predicate) */
2045
+ if ( m ) {
2046
+ boolean8_t *pm;
2047
+ for (k=0; k<n; k++) {
2048
+ pm = m + k;
2049
+ if ( ! *pm ) {
2050
+ p1 = q1 + k*i1;
2051
+ p2 = q2 + k*i2;
2052
+ { (*p2) = (RTEST(rb_funcall((*p1), rb_intern("negative?"), 0)) ? 1 : 0); }
2053
+ }
2054
+ }
2055
+ } else {
2056
+ for (k=0; k<n; k++) {
2057
+ p1 = q1 + k*i1;
2058
+ p2 = q2 + k*i2;
2059
+ { (*p2) = (RTEST(rb_funcall((*p1), rb_intern("negative?"), 0)) ? 1 : 0); }
2060
+ }
2061
+ }
2062
+ }
2063
+
2064
+ ca_moncmp_func_t
2065
+ ca_moncmp_signbit[CA_NTYPE] = {
2066
+ ca_moncmp_not_implement,
2067
+ ca_moncmp_not_implement,
2068
+ ca_moncmp_signbit_int8_t,
2069
+ ca_moncmp_signbit_uint8_t,
2070
+ ca_moncmp_signbit_int16_t,
2071
+ ca_moncmp_signbit_uint16_t,
2072
+ ca_moncmp_signbit_int32_t,
2073
+ ca_moncmp_signbit_uint32_t,
2074
+ ca_moncmp_signbit_int64_t,
2075
+ ca_moncmp_signbit_uint64_t,
2076
+ ca_moncmp_signbit_float32_t,
2077
+ ca_moncmp_signbit_float64_t,
2078
+ ca_moncmp_not_implement,
2079
+ ca_moncmp_not_implement,
2080
+ ca_moncmp_not_implement,
2081
+ ca_moncmp_not_implement,
2082
+ ca_moncmp_signbit_VALUE,
2083
+ };
2084
+
2085
+ VALUE rb_ca_signbit (VALUE self)
2086
+ { return rb_ca_call_moncmp(self, ca_moncmp_signbit); }
2087
+
2088
+ void
2089
+ Init_carray_kernels_moncmp (void)
2090
+ {
2091
+ rb_define_method(rb_cCArray, "is_nan", rb_ca_is_nan, 0);
2092
+ rb_define_method(rb_cCArray, "is_inf", rb_ca_is_inf, 0);
2093
+ rb_define_method(rb_cCArray, "is_finite", rb_ca_is_finite, 0);
2094
+ rb_define_method(rb_cCArray, "is_invalid", rb_ca_is_invalid, 0);
2095
+ rb_define_method(rb_cCArray, "signbit", rb_ca_signbit, 0);
2096
+ }