carray 3.0.4 → 3.0.5

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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +205 -0
  3. data/carray.gemspec +1 -1
  4. data/ext/ca_array_pool.c +25 -1
  5. data/ext/ca_axis_dispatch.c +13 -20
  6. data/ext/ca_categorical_iterator.c +27 -20
  7. data/ext/ca_compare.c +4 -4
  8. data/ext/ca_composite_dispatch.c +9 -9
  9. data/ext/ca_kernel_iterator.c +6 -6
  10. data/ext/ca_kernel_iterator.h +112 -83
  11. data/ext/ca_obj_array.c +69 -19
  12. data/ext/ca_obj_bincmp.c +1 -0
  13. data/ext/ca_obj_binop.c +1 -0
  14. data/ext/ca_obj_bitarray.c +5 -1
  15. data/ext/ca_obj_bitfield.c +58 -43
  16. data/ext/ca_obj_byte_swap.c +2 -1
  17. data/ext/ca_obj_const_string.c +15 -3
  18. data/ext/ca_obj_face.c +42 -1
  19. data/ext/ca_obj_field.c +13 -3
  20. data/ext/ca_obj_grid.c +52 -5
  21. data/ext/ca_obj_monop.c +46 -10
  22. data/ext/ca_obj_object.c +64 -12
  23. data/ext/ca_obj_record.c +3 -0
  24. data/ext/ca_obj_reduce.c +4 -0
  25. data/ext/ca_obj_refer.c +18 -9
  26. data/ext/ca_obj_roll.c +26 -6
  27. data/ext/ca_obj_select.c +34 -5
  28. data/ext/ca_obj_shift.c +31 -7
  29. data/ext/ca_obj_stack.c +1 -0
  30. data/ext/ca_obj_stride.c +28 -19
  31. data/ext/ca_obj_string.c +11 -2
  32. data/ext/ca_obj_tile.c +27 -7
  33. data/ext/ca_obj_transpose.c +8 -4
  34. data/ext/ca_obj_triop.c +3 -0
  35. data/ext/ca_obj_window.c +79 -50
  36. data/ext/ca_op_ipower.c +4 -4
  37. data/ext/ca_sort_kernels.h +6 -3
  38. data/ext/carray.h +33 -0
  39. data/ext/carray_access.c +16 -3
  40. data/ext/carray_attribute.c +24 -0
  41. data/ext/carray_cast.c +243 -82
  42. data/ext/carray_cast_func.rb +56 -26
  43. data/ext/carray_conversion.c +2 -2
  44. data/ext/carray_core.c +3 -0
  45. data/ext/carray_count.c +6 -0
  46. data/ext/carray_element.c +9 -4
  47. data/ext/carray_factorize.c +20 -20
  48. data/ext/carray_generate.c +8 -2
  49. data/ext/carray_histogram.c +1 -1
  50. data/ext/carray_index_classifier.c +4 -4
  51. data/ext/carray_internal.h +12 -0
  52. data/ext/carray_kernels_bincmp.c +168 -168
  53. data/ext/carray_kernels_binop.c +900 -900
  54. data/ext/carray_kernels_init.c +4 -4
  55. data/ext/carray_kernels_moncmp.c +96 -96
  56. data/ext/carray_kernels_monop.c +1984 -1984
  57. data/ext/carray_kernels_reduce_aggregate.c +1733 -1733
  58. data/ext/carray_kernels_reduce_cumulative.c +642 -642
  59. data/ext/carray_kernels_reduce_extreme.c +1150 -1150
  60. data/ext/carray_kernels_reduce_variance.c +258 -258
  61. data/ext/carray_kernels_scan.c +128 -128
  62. data/ext/carray_kernels_search.c +340 -340
  63. data/ext/carray_kernels_sort.c +295 -304
  64. data/ext/carray_kernels_triop.c +114 -114
  65. data/ext/carray_key_windows.c +4 -0
  66. data/ext/carray_mask.c +45 -22
  67. data/ext/carray_memory_view.c +2 -2
  68. data/ext/carray_operator.c +5 -5
  69. data/ext/carray_order.c +227 -8
  70. data/ext/carray_random.c +18 -18
  71. data/ext/carray_scatter.c +24 -7
  72. data/ext/carray_slab.c +32 -9
  73. data/ext/carray_sort.c +224 -16
  74. data/ext/carray_sort_kernel.c +5 -7
  75. data/ext/carray_struct.c +35 -43
  76. data/ext/carray_time_text.c +4 -2
  77. data/ext/carray_utils.c +63 -21
  78. data/ext/mkkernel.rb +210 -115
  79. data/ext/version.h +4 -4
  80. data/lib/carray/attribute.rb +17 -4
  81. data/lib/carray/basics.rb +27 -7
  82. data/lib/carray/categorical.rb +30 -16
  83. data/lib/carray/categorical_iterator.rb +6 -6
  84. data/lib/carray/const_string.rb +10 -0
  85. data/lib/carray/data_type_extension.rb +8 -1
  86. data/lib/carray/fixlen_string.rb +41 -2
  87. data/lib/carray/frame/column_verbs.rb +4 -3
  88. data/lib/carray/frame/concat.rb +17 -3
  89. data/lib/carray/frame/frame.rb +6 -7
  90. data/lib/carray/frame/group.rb +100 -13
  91. data/lib/carray/frame/io.rb +3 -1
  92. data/lib/carray/fuse_source.rb +31 -2
  93. data/lib/carray/lazy.rb +35 -0
  94. data/lib/carray/methods/is_in.rb +8 -1
  95. data/lib/carray/segment_iterator.rb +12 -8
  96. data/lib/carray/serialize.rb +19 -2
  97. data/lib/carray/stack.rb +15 -12
  98. data/lib/carray/string.rb +8 -0
  99. data/lib/carray/string_operation_extension.rb +13 -5
  100. data/lib/carray/struct_builder.rb +5 -3
  101. data/lib/carray/time.rb +107 -68
  102. data/yard-stubs/ca_obj_transpose.rb +5 -4
  103. data/yard-stubs/carray_attribute.rb +3 -1
  104. data/yard-stubs/carray_cast.rb +2 -0
  105. data/yard-stubs/carray_conversion.rb +5 -1
  106. data/yard-stubs/carray_element.rb +7 -6
  107. data/yard-stubs/carray_mask.rb +8 -3
  108. data/yard-stubs/carray_math.rb +14 -4
  109. data/yard-stubs/carray_order.rb +100 -4
  110. data/yard-stubs/carray_scatter.rb +7 -5
  111. metadata +1 -1
@@ -101,13 +101,13 @@ sort_index_ki_native_i8 (VALUE self, CArray *ca, int axis, int do_stable, int ma
101
101
  if ( masked_last ) {
102
102
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
103
103
  if ( mi[k * mstride] ) continue;
104
- buf[n_valid].v = *(int8_t *) (pi + k * istride);
104
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
105
105
  buf[n_valid].i = k;
106
106
  n_valid++;
107
107
  }
108
108
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
109
109
  if ( ! mi[k * mstride] ) continue;
110
- buf[n_valid + n_masked].v = *(int8_t *) (pi + k * istride);
110
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
111
111
  buf[n_valid + n_masked].i = k;
112
112
  n_masked++;
113
113
  }
@@ -115,13 +115,13 @@ sort_index_ki_native_i8 (VALUE self, CArray *ca, int axis, int do_stable, int ma
115
115
  } else {
116
116
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
117
117
  if ( ! mi[k * mstride] ) continue;
118
- buf[n_masked].v = *(int8_t *) (pi + k * istride);
118
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
119
119
  buf[n_masked].i = k;
120
120
  n_masked++;
121
121
  }
122
122
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
123
123
  if ( mi[k * mstride] ) continue;
124
- buf[n_masked + n_valid].v = *(int8_t *) (pi + k * istride);
124
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
125
125
  buf[n_masked + n_valid].i = k;
126
126
  n_valid++;
127
127
  }
@@ -129,7 +129,7 @@ sort_index_ki_native_i8 (VALUE self, CArray *ca, int axis, int do_stable, int ma
129
129
  }
130
130
  } else {
131
131
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
132
- buf[k].v = *(int8_t *) (pi + k * istride);
132
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
133
133
  buf[k].i = k;
134
134
  }
135
135
  sort_lo = 0; sort_n = fiber_n;
@@ -216,13 +216,13 @@ sort_index_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int ma
216
216
  if ( masked_last ) {
217
217
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
218
218
  if ( mi[k * mstride] ) continue;
219
- buf[n_valid].v = *(uint8_t *) (pi + k * istride);
219
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
220
220
  buf[n_valid].i = k;
221
221
  n_valid++;
222
222
  }
223
223
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
224
224
  if ( ! mi[k * mstride] ) continue;
225
- buf[n_valid + n_masked].v = *(uint8_t *) (pi + k * istride);
225
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
226
226
  buf[n_valid + n_masked].i = k;
227
227
  n_masked++;
228
228
  }
@@ -230,13 +230,13 @@ sort_index_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int ma
230
230
  } else {
231
231
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
232
232
  if ( ! mi[k * mstride] ) continue;
233
- buf[n_masked].v = *(uint8_t *) (pi + k * istride);
233
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
234
234
  buf[n_masked].i = k;
235
235
  n_masked++;
236
236
  }
237
237
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
238
238
  if ( mi[k * mstride] ) continue;
239
- buf[n_masked + n_valid].v = *(uint8_t *) (pi + k * istride);
239
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
240
240
  buf[n_masked + n_valid].i = k;
241
241
  n_valid++;
242
242
  }
@@ -244,7 +244,7 @@ sort_index_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int ma
244
244
  }
245
245
  } else {
246
246
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
247
- buf[k].v = *(uint8_t *) (pi + k * istride);
247
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
248
248
  buf[k].i = k;
249
249
  }
250
250
  sort_lo = 0; sort_n = fiber_n;
@@ -276,7 +276,7 @@ sort_index_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int ma
276
276
  }
277
277
 
278
278
  typedef struct {
279
- int16_t v;
279
+ ca_u_int16_t v;
280
280
  ca_size_t i;
281
281
  } sort_index_pair_i16;
282
282
 
@@ -331,13 +331,13 @@ sort_index_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int m
331
331
  if ( masked_last ) {
332
332
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
333
333
  if ( mi[k * mstride] ) continue;
334
- buf[n_valid].v = *(int16_t *) (pi + k * istride);
334
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
335
335
  buf[n_valid].i = k;
336
336
  n_valid++;
337
337
  }
338
338
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
339
339
  if ( ! mi[k * mstride] ) continue;
340
- buf[n_valid + n_masked].v = *(int16_t *) (pi + k * istride);
340
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
341
341
  buf[n_valid + n_masked].i = k;
342
342
  n_masked++;
343
343
  }
@@ -345,13 +345,13 @@ sort_index_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int m
345
345
  } else {
346
346
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
347
347
  if ( ! mi[k * mstride] ) continue;
348
- buf[n_masked].v = *(int16_t *) (pi + k * istride);
348
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
349
349
  buf[n_masked].i = k;
350
350
  n_masked++;
351
351
  }
352
352
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
353
353
  if ( mi[k * mstride] ) continue;
354
- buf[n_masked + n_valid].v = *(int16_t *) (pi + k * istride);
354
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
355
355
  buf[n_masked + n_valid].i = k;
356
356
  n_valid++;
357
357
  }
@@ -359,7 +359,7 @@ sort_index_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int m
359
359
  }
360
360
  } else {
361
361
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
362
- buf[k].v = *(int16_t *) (pi + k * istride);
362
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
363
363
  buf[k].i = k;
364
364
  }
365
365
  sort_lo = 0; sort_n = fiber_n;
@@ -391,7 +391,7 @@ sort_index_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int m
391
391
  }
392
392
 
393
393
  typedef struct {
394
- uint16_t v;
394
+ ca_u_uint16_t v;
395
395
  ca_size_t i;
396
396
  } sort_index_pair_u16;
397
397
 
@@ -446,13 +446,13 @@ sort_index_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int m
446
446
  if ( masked_last ) {
447
447
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
448
448
  if ( mi[k * mstride] ) continue;
449
- buf[n_valid].v = *(uint16_t *) (pi + k * istride);
449
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
450
450
  buf[n_valid].i = k;
451
451
  n_valid++;
452
452
  }
453
453
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
454
454
  if ( ! mi[k * mstride] ) continue;
455
- buf[n_valid + n_masked].v = *(uint16_t *) (pi + k * istride);
455
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
456
456
  buf[n_valid + n_masked].i = k;
457
457
  n_masked++;
458
458
  }
@@ -460,13 +460,13 @@ sort_index_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int m
460
460
  } else {
461
461
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
462
462
  if ( ! mi[k * mstride] ) continue;
463
- buf[n_masked].v = *(uint16_t *) (pi + k * istride);
463
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
464
464
  buf[n_masked].i = k;
465
465
  n_masked++;
466
466
  }
467
467
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
468
468
  if ( mi[k * mstride] ) continue;
469
- buf[n_masked + n_valid].v = *(uint16_t *) (pi + k * istride);
469
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
470
470
  buf[n_masked + n_valid].i = k;
471
471
  n_valid++;
472
472
  }
@@ -474,7 +474,7 @@ sort_index_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int m
474
474
  }
475
475
  } else {
476
476
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
477
- buf[k].v = *(uint16_t *) (pi + k * istride);
477
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
478
478
  buf[k].i = k;
479
479
  }
480
480
  sort_lo = 0; sort_n = fiber_n;
@@ -506,7 +506,7 @@ sort_index_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int m
506
506
  }
507
507
 
508
508
  typedef struct {
509
- int32_t v;
509
+ ca_u_int32_t v;
510
510
  ca_size_t i;
511
511
  } sort_index_pair_i32;
512
512
 
@@ -561,13 +561,13 @@ sort_index_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int m
561
561
  if ( masked_last ) {
562
562
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
563
563
  if ( mi[k * mstride] ) continue;
564
- buf[n_valid].v = *(int32_t *) (pi + k * istride);
564
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
565
565
  buf[n_valid].i = k;
566
566
  n_valid++;
567
567
  }
568
568
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
569
569
  if ( ! mi[k * mstride] ) continue;
570
- buf[n_valid + n_masked].v = *(int32_t *) (pi + k * istride);
570
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
571
571
  buf[n_valid + n_masked].i = k;
572
572
  n_masked++;
573
573
  }
@@ -575,13 +575,13 @@ sort_index_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int m
575
575
  } else {
576
576
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
577
577
  if ( ! mi[k * mstride] ) continue;
578
- buf[n_masked].v = *(int32_t *) (pi + k * istride);
578
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
579
579
  buf[n_masked].i = k;
580
580
  n_masked++;
581
581
  }
582
582
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
583
583
  if ( mi[k * mstride] ) continue;
584
- buf[n_masked + n_valid].v = *(int32_t *) (pi + k * istride);
584
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
585
585
  buf[n_masked + n_valid].i = k;
586
586
  n_valid++;
587
587
  }
@@ -589,7 +589,7 @@ sort_index_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int m
589
589
  }
590
590
  } else {
591
591
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
592
- buf[k].v = *(int32_t *) (pi + k * istride);
592
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
593
593
  buf[k].i = k;
594
594
  }
595
595
  sort_lo = 0; sort_n = fiber_n;
@@ -621,7 +621,7 @@ sort_index_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int m
621
621
  }
622
622
 
623
623
  typedef struct {
624
- uint32_t v;
624
+ ca_u_uint32_t v;
625
625
  ca_size_t i;
626
626
  } sort_index_pair_u32;
627
627
 
@@ -676,13 +676,13 @@ sort_index_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int m
676
676
  if ( masked_last ) {
677
677
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
678
678
  if ( mi[k * mstride] ) continue;
679
- buf[n_valid].v = *(uint32_t *) (pi + k * istride);
679
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
680
680
  buf[n_valid].i = k;
681
681
  n_valid++;
682
682
  }
683
683
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
684
684
  if ( ! mi[k * mstride] ) continue;
685
- buf[n_valid + n_masked].v = *(uint32_t *) (pi + k * istride);
685
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
686
686
  buf[n_valid + n_masked].i = k;
687
687
  n_masked++;
688
688
  }
@@ -690,13 +690,13 @@ sort_index_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int m
690
690
  } else {
691
691
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
692
692
  if ( ! mi[k * mstride] ) continue;
693
- buf[n_masked].v = *(uint32_t *) (pi + k * istride);
693
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
694
694
  buf[n_masked].i = k;
695
695
  n_masked++;
696
696
  }
697
697
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
698
698
  if ( mi[k * mstride] ) continue;
699
- buf[n_masked + n_valid].v = *(uint32_t *) (pi + k * istride);
699
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
700
700
  buf[n_masked + n_valid].i = k;
701
701
  n_valid++;
702
702
  }
@@ -704,7 +704,7 @@ sort_index_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int m
704
704
  }
705
705
  } else {
706
706
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
707
- buf[k].v = *(uint32_t *) (pi + k * istride);
707
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
708
708
  buf[k].i = k;
709
709
  }
710
710
  sort_lo = 0; sort_n = fiber_n;
@@ -736,7 +736,7 @@ sort_index_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int m
736
736
  }
737
737
 
738
738
  typedef struct {
739
- int64_t v;
739
+ ca_u_int64_t v;
740
740
  ca_size_t i;
741
741
  } sort_index_pair_i64;
742
742
 
@@ -791,13 +791,13 @@ sort_index_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int m
791
791
  if ( masked_last ) {
792
792
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
793
793
  if ( mi[k * mstride] ) continue;
794
- buf[n_valid].v = *(int64_t *) (pi + k * istride);
794
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
795
795
  buf[n_valid].i = k;
796
796
  n_valid++;
797
797
  }
798
798
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
799
799
  if ( ! mi[k * mstride] ) continue;
800
- buf[n_valid + n_masked].v = *(int64_t *) (pi + k * istride);
800
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
801
801
  buf[n_valid + n_masked].i = k;
802
802
  n_masked++;
803
803
  }
@@ -805,13 +805,13 @@ sort_index_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int m
805
805
  } else {
806
806
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
807
807
  if ( ! mi[k * mstride] ) continue;
808
- buf[n_masked].v = *(int64_t *) (pi + k * istride);
808
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
809
809
  buf[n_masked].i = k;
810
810
  n_masked++;
811
811
  }
812
812
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
813
813
  if ( mi[k * mstride] ) continue;
814
- buf[n_masked + n_valid].v = *(int64_t *) (pi + k * istride);
814
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
815
815
  buf[n_masked + n_valid].i = k;
816
816
  n_valid++;
817
817
  }
@@ -819,7 +819,7 @@ sort_index_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int m
819
819
  }
820
820
  } else {
821
821
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
822
- buf[k].v = *(int64_t *) (pi + k * istride);
822
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
823
823
  buf[k].i = k;
824
824
  }
825
825
  sort_lo = 0; sort_n = fiber_n;
@@ -851,7 +851,7 @@ sort_index_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int m
851
851
  }
852
852
 
853
853
  typedef struct {
854
- uint64_t v;
854
+ ca_u_uint64_t v;
855
855
  ca_size_t i;
856
856
  } sort_index_pair_u64;
857
857
 
@@ -906,13 +906,13 @@ sort_index_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int m
906
906
  if ( masked_last ) {
907
907
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
908
908
  if ( mi[k * mstride] ) continue;
909
- buf[n_valid].v = *(uint64_t *) (pi + k * istride);
909
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
910
910
  buf[n_valid].i = k;
911
911
  n_valid++;
912
912
  }
913
913
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
914
914
  if ( ! mi[k * mstride] ) continue;
915
- buf[n_valid + n_masked].v = *(uint64_t *) (pi + k * istride);
915
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
916
916
  buf[n_valid + n_masked].i = k;
917
917
  n_masked++;
918
918
  }
@@ -920,13 +920,13 @@ sort_index_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int m
920
920
  } else {
921
921
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
922
922
  if ( ! mi[k * mstride] ) continue;
923
- buf[n_masked].v = *(uint64_t *) (pi + k * istride);
923
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
924
924
  buf[n_masked].i = k;
925
925
  n_masked++;
926
926
  }
927
927
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
928
928
  if ( mi[k * mstride] ) continue;
929
- buf[n_masked + n_valid].v = *(uint64_t *) (pi + k * istride);
929
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
930
930
  buf[n_masked + n_valid].i = k;
931
931
  n_valid++;
932
932
  }
@@ -934,7 +934,7 @@ sort_index_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int m
934
934
  }
935
935
  } else {
936
936
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
937
- buf[k].v = *(uint64_t *) (pi + k * istride);
937
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
938
938
  buf[k].i = k;
939
939
  }
940
940
  sort_lo = 0; sort_n = fiber_n;
@@ -966,7 +966,7 @@ sort_index_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int m
966
966
  }
967
967
 
968
968
  typedef struct {
969
- float v;
969
+ ca_u_float32_t v;
970
970
  ca_size_t i;
971
971
  } sort_index_pair_f32;
972
972
 
@@ -1021,13 +1021,13 @@ sort_index_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int m
1021
1021
  if ( masked_last ) {
1022
1022
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1023
1023
  if ( mi[k * mstride] ) continue;
1024
- buf[n_valid].v = *(float *) (pi + k * istride);
1024
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
1025
1025
  buf[n_valid].i = k;
1026
1026
  n_valid++;
1027
1027
  }
1028
1028
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1029
1029
  if ( ! mi[k * mstride] ) continue;
1030
- buf[n_valid + n_masked].v = *(float *) (pi + k * istride);
1030
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
1031
1031
  buf[n_valid + n_masked].i = k;
1032
1032
  n_masked++;
1033
1033
  }
@@ -1035,13 +1035,13 @@ sort_index_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int m
1035
1035
  } else {
1036
1036
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1037
1037
  if ( ! mi[k * mstride] ) continue;
1038
- buf[n_masked].v = *(float *) (pi + k * istride);
1038
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
1039
1039
  buf[n_masked].i = k;
1040
1040
  n_masked++;
1041
1041
  }
1042
1042
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1043
1043
  if ( mi[k * mstride] ) continue;
1044
- buf[n_masked + n_valid].v = *(float *) (pi + k * istride);
1044
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
1045
1045
  buf[n_masked + n_valid].i = k;
1046
1046
  n_valid++;
1047
1047
  }
@@ -1049,7 +1049,7 @@ sort_index_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int m
1049
1049
  }
1050
1050
  } else {
1051
1051
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1052
- buf[k].v = *(float *) (pi + k * istride);
1052
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
1053
1053
  buf[k].i = k;
1054
1054
  }
1055
1055
  sort_lo = 0; sort_n = fiber_n;
@@ -1085,7 +1085,7 @@ sort_index_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int m
1085
1085
  }
1086
1086
 
1087
1087
  typedef struct {
1088
- double v;
1088
+ ca_u_float64_t v;
1089
1089
  ca_size_t i;
1090
1090
  } sort_index_pair_f64;
1091
1091
 
@@ -1140,13 +1140,13 @@ sort_index_ki_native_f64 (VALUE self, CArray *ca, int axis, int do_stable, int m
1140
1140
  if ( masked_last ) {
1141
1141
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1142
1142
  if ( mi[k * mstride] ) continue;
1143
- buf[n_valid].v = *(double *) (pi + k * istride);
1143
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
1144
1144
  buf[n_valid].i = k;
1145
1145
  n_valid++;
1146
1146
  }
1147
1147
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1148
1148
  if ( ! mi[k * mstride] ) continue;
1149
- buf[n_valid + n_masked].v = *(double *) (pi + k * istride);
1149
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
1150
1150
  buf[n_valid + n_masked].i = k;
1151
1151
  n_masked++;
1152
1152
  }
@@ -1154,13 +1154,13 @@ sort_index_ki_native_f64 (VALUE self, CArray *ca, int axis, int do_stable, int m
1154
1154
  } else {
1155
1155
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1156
1156
  if ( ! mi[k * mstride] ) continue;
1157
- buf[n_masked].v = *(double *) (pi + k * istride);
1157
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
1158
1158
  buf[n_masked].i = k;
1159
1159
  n_masked++;
1160
1160
  }
1161
1161
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1162
1162
  if ( mi[k * mstride] ) continue;
1163
- buf[n_masked + n_valid].v = *(double *) (pi + k * istride);
1163
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
1164
1164
  buf[n_masked + n_valid].i = k;
1165
1165
  n_valid++;
1166
1166
  }
@@ -1168,7 +1168,7 @@ sort_index_ki_native_f64 (VALUE self, CArray *ca, int axis, int do_stable, int m
1168
1168
  }
1169
1169
  } else {
1170
1170
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1171
- buf[k].v = *(double *) (pi + k * istride);
1171
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
1172
1172
  buf[k].i = k;
1173
1173
  }
1174
1174
  sort_lo = 0; sort_n = fiber_n;
@@ -1259,13 +1259,13 @@ sort_index_ki_native_bool (VALUE self, CArray *ca, int axis, int do_stable, int
1259
1259
  if ( masked_last ) {
1260
1260
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1261
1261
  if ( mi[k * mstride] ) continue;
1262
- buf[n_valid].v = *(boolean8_t *) (pi + k * istride);
1262
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
1263
1263
  buf[n_valid].i = k;
1264
1264
  n_valid++;
1265
1265
  }
1266
1266
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1267
1267
  if ( ! mi[k * mstride] ) continue;
1268
- buf[n_valid + n_masked].v = *(boolean8_t *) (pi + k * istride);
1268
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
1269
1269
  buf[n_valid + n_masked].i = k;
1270
1270
  n_masked++;
1271
1271
  }
@@ -1273,13 +1273,13 @@ sort_index_ki_native_bool (VALUE self, CArray *ca, int axis, int do_stable, int
1273
1273
  } else {
1274
1274
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1275
1275
  if ( ! mi[k * mstride] ) continue;
1276
- buf[n_masked].v = *(boolean8_t *) (pi + k * istride);
1276
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
1277
1277
  buf[n_masked].i = k;
1278
1278
  n_masked++;
1279
1279
  }
1280
1280
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1281
1281
  if ( mi[k * mstride] ) continue;
1282
- buf[n_masked + n_valid].v = *(boolean8_t *) (pi + k * istride);
1282
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
1283
1283
  buf[n_masked + n_valid].i = k;
1284
1284
  n_valid++;
1285
1285
  }
@@ -1287,7 +1287,7 @@ sort_index_ki_native_bool (VALUE self, CArray *ca, int axis, int do_stable, int
1287
1287
  }
1288
1288
  } else {
1289
1289
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1290
- buf[k].v = *(boolean8_t *) (pi + k * istride);
1290
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
1291
1291
  buf[k].i = k;
1292
1292
  }
1293
1293
  sort_lo = 0; sort_n = fiber_n;
@@ -1408,13 +1408,13 @@ sort_index_ki_native_object_body (VALUE arg)
1408
1408
  if ( masked_last ) {
1409
1409
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1410
1410
  if ( mi[k * mstride] ) continue;
1411
- buf[n_valid].v = *(VALUE *) (pi + k * istride);
1411
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
1412
1412
  buf[n_valid].i = k;
1413
1413
  n_valid++;
1414
1414
  }
1415
1415
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1416
1416
  if ( ! mi[k * mstride] ) continue;
1417
- buf[n_valid + n_masked].v = *(VALUE *) (pi + k * istride);
1417
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
1418
1418
  buf[n_valid + n_masked].i = k;
1419
1419
  n_masked++;
1420
1420
  }
@@ -1422,13 +1422,13 @@ sort_index_ki_native_object_body (VALUE arg)
1422
1422
  } else {
1423
1423
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1424
1424
  if ( ! mi[k * mstride] ) continue;
1425
- buf[n_masked].v = *(VALUE *) (pi + k * istride);
1425
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
1426
1426
  buf[n_masked].i = k;
1427
1427
  n_masked++;
1428
1428
  }
1429
1429
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1430
1430
  if ( mi[k * mstride] ) continue;
1431
- buf[n_masked + n_valid].v = *(VALUE *) (pi + k * istride);
1431
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
1432
1432
  buf[n_masked + n_valid].i = k;
1433
1433
  n_valid++;
1434
1434
  }
@@ -1436,7 +1436,7 @@ sort_index_ki_native_object_body (VALUE arg)
1436
1436
  }
1437
1437
  } else {
1438
1438
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1439
- buf[k].v = *(VALUE *) (pi + k * istride);
1439
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
1440
1440
  buf[k].i = k;
1441
1441
  }
1442
1442
  sort_lo = 0; sort_n = fiber_n;
@@ -1528,10 +1528,7 @@ sort_index_ki_native_fixlen (VALUE self, CArray *ca, int axis, int do_stable, in
1528
1528
  ca_size_t fiber_n = st_in.slab_elements;
1529
1529
  volatile VALUE hbuf = 0, haux = 0;
1530
1530
  sort_index_pair_fixlen *buf = ALLOCV_N(sort_index_pair_fixlen, hbuf, fiber_n);
1531
- sort_index_pair_fixlen *aux = NULL;
1532
- if ( do_stable ) {
1533
- aux = ALLOCV_N(sort_index_pair_fixlen, haux, fiber_n);
1534
- }
1531
+ (void) haux;
1535
1532
 
1536
1533
  char *pi, *po;
1537
1534
  boolean8_t *mi, *mo;
@@ -1778,13 +1775,13 @@ sort_addr_ki_native_i8 (VALUE self, CArray *ca, int axis, int do_stable, int mas
1778
1775
  if ( masked_last ) {
1779
1776
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1780
1777
  if ( mi[k * mstride] ) continue;
1781
- buf[n_valid].v = *(int8_t *) (pi + k * istride);
1778
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
1782
1779
  buf[n_valid].i = outer_off + k * axis_vstride;
1783
1780
  n_valid++;
1784
1781
  }
1785
1782
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1786
1783
  if ( ! mi[k * mstride] ) continue;
1787
- buf[n_valid + n_masked].v = *(int8_t *) (pi + k * istride);
1784
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
1788
1785
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
1789
1786
  n_masked++;
1790
1787
  }
@@ -1792,13 +1789,13 @@ sort_addr_ki_native_i8 (VALUE self, CArray *ca, int axis, int do_stable, int mas
1792
1789
  } else {
1793
1790
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1794
1791
  if ( ! mi[k * mstride] ) continue;
1795
- buf[n_masked].v = *(int8_t *) (pi + k * istride);
1792
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
1796
1793
  buf[n_masked].i = outer_off + k * axis_vstride;
1797
1794
  n_masked++;
1798
1795
  }
1799
1796
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1800
1797
  if ( mi[k * mstride] ) continue;
1801
- buf[n_masked + n_valid].v = *(int8_t *) (pi + k * istride);
1798
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
1802
1799
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
1803
1800
  n_valid++;
1804
1801
  }
@@ -1806,7 +1803,7 @@ sort_addr_ki_native_i8 (VALUE self, CArray *ca, int axis, int do_stable, int mas
1806
1803
  }
1807
1804
  } else {
1808
1805
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1809
- buf[k].v = *(int8_t *) (pi + k * istride);
1806
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
1810
1807
  buf[k].i = outer_off + k * axis_vstride;
1811
1808
  }
1812
1809
  sort_lo = 0; sort_n = fiber_n;
@@ -1925,13 +1922,13 @@ sort_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int mas
1925
1922
  if ( masked_last ) {
1926
1923
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1927
1924
  if ( mi[k * mstride] ) continue;
1928
- buf[n_valid].v = *(uint8_t *) (pi + k * istride);
1925
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
1929
1926
  buf[n_valid].i = outer_off + k * axis_vstride;
1930
1927
  n_valid++;
1931
1928
  }
1932
1929
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1933
1930
  if ( ! mi[k * mstride] ) continue;
1934
- buf[n_valid + n_masked].v = *(uint8_t *) (pi + k * istride);
1931
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
1935
1932
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
1936
1933
  n_masked++;
1937
1934
  }
@@ -1939,13 +1936,13 @@ sort_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int mas
1939
1936
  } else {
1940
1937
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1941
1938
  if ( ! mi[k * mstride] ) continue;
1942
- buf[n_masked].v = *(uint8_t *) (pi + k * istride);
1939
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
1943
1940
  buf[n_masked].i = outer_off + k * axis_vstride;
1944
1941
  n_masked++;
1945
1942
  }
1946
1943
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1947
1944
  if ( mi[k * mstride] ) continue;
1948
- buf[n_masked + n_valid].v = *(uint8_t *) (pi + k * istride);
1945
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
1949
1946
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
1950
1947
  n_valid++;
1951
1948
  }
@@ -1953,7 +1950,7 @@ sort_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int mas
1953
1950
  }
1954
1951
  } else {
1955
1952
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
1956
- buf[k].v = *(uint8_t *) (pi + k * istride);
1953
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
1957
1954
  buf[k].i = outer_off + k * axis_vstride;
1958
1955
  }
1959
1956
  sort_lo = 0; sort_n = fiber_n;
@@ -1990,7 +1987,7 @@ sort_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int mas
1990
1987
  }
1991
1988
 
1992
1989
  typedef struct {
1993
- int16_t v;
1990
+ ca_u_int16_t v;
1994
1991
  ca_size_t i;
1995
1992
  } sort_addr_pair_i16;
1996
1993
 
@@ -2072,13 +2069,13 @@ sort_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2072
2069
  if ( masked_last ) {
2073
2070
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2074
2071
  if ( mi[k * mstride] ) continue;
2075
- buf[n_valid].v = *(int16_t *) (pi + k * istride);
2072
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
2076
2073
  buf[n_valid].i = outer_off + k * axis_vstride;
2077
2074
  n_valid++;
2078
2075
  }
2079
2076
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2080
2077
  if ( ! mi[k * mstride] ) continue;
2081
- buf[n_valid + n_masked].v = *(int16_t *) (pi + k * istride);
2078
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
2082
2079
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
2083
2080
  n_masked++;
2084
2081
  }
@@ -2086,13 +2083,13 @@ sort_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2086
2083
  } else {
2087
2084
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2088
2085
  if ( ! mi[k * mstride] ) continue;
2089
- buf[n_masked].v = *(int16_t *) (pi + k * istride);
2086
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
2090
2087
  buf[n_masked].i = outer_off + k * axis_vstride;
2091
2088
  n_masked++;
2092
2089
  }
2093
2090
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2094
2091
  if ( mi[k * mstride] ) continue;
2095
- buf[n_masked + n_valid].v = *(int16_t *) (pi + k * istride);
2092
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
2096
2093
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
2097
2094
  n_valid++;
2098
2095
  }
@@ -2100,7 +2097,7 @@ sort_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2100
2097
  }
2101
2098
  } else {
2102
2099
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2103
- buf[k].v = *(int16_t *) (pi + k * istride);
2100
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
2104
2101
  buf[k].i = outer_off + k * axis_vstride;
2105
2102
  }
2106
2103
  sort_lo = 0; sort_n = fiber_n;
@@ -2137,7 +2134,7 @@ sort_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2137
2134
  }
2138
2135
 
2139
2136
  typedef struct {
2140
- uint16_t v;
2137
+ ca_u_uint16_t v;
2141
2138
  ca_size_t i;
2142
2139
  } sort_addr_pair_u16;
2143
2140
 
@@ -2219,13 +2216,13 @@ sort_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2219
2216
  if ( masked_last ) {
2220
2217
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2221
2218
  if ( mi[k * mstride] ) continue;
2222
- buf[n_valid].v = *(uint16_t *) (pi + k * istride);
2219
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
2223
2220
  buf[n_valid].i = outer_off + k * axis_vstride;
2224
2221
  n_valid++;
2225
2222
  }
2226
2223
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2227
2224
  if ( ! mi[k * mstride] ) continue;
2228
- buf[n_valid + n_masked].v = *(uint16_t *) (pi + k * istride);
2225
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
2229
2226
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
2230
2227
  n_masked++;
2231
2228
  }
@@ -2233,13 +2230,13 @@ sort_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2233
2230
  } else {
2234
2231
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2235
2232
  if ( ! mi[k * mstride] ) continue;
2236
- buf[n_masked].v = *(uint16_t *) (pi + k * istride);
2233
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
2237
2234
  buf[n_masked].i = outer_off + k * axis_vstride;
2238
2235
  n_masked++;
2239
2236
  }
2240
2237
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2241
2238
  if ( mi[k * mstride] ) continue;
2242
- buf[n_masked + n_valid].v = *(uint16_t *) (pi + k * istride);
2239
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
2243
2240
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
2244
2241
  n_valid++;
2245
2242
  }
@@ -2247,7 +2244,7 @@ sort_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2247
2244
  }
2248
2245
  } else {
2249
2246
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2250
- buf[k].v = *(uint16_t *) (pi + k * istride);
2247
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
2251
2248
  buf[k].i = outer_off + k * axis_vstride;
2252
2249
  }
2253
2250
  sort_lo = 0; sort_n = fiber_n;
@@ -2284,7 +2281,7 @@ sort_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2284
2281
  }
2285
2282
 
2286
2283
  typedef struct {
2287
- int32_t v;
2284
+ ca_u_int32_t v;
2288
2285
  ca_size_t i;
2289
2286
  } sort_addr_pair_i32;
2290
2287
 
@@ -2366,13 +2363,13 @@ sort_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2366
2363
  if ( masked_last ) {
2367
2364
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2368
2365
  if ( mi[k * mstride] ) continue;
2369
- buf[n_valid].v = *(int32_t *) (pi + k * istride);
2366
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
2370
2367
  buf[n_valid].i = outer_off + k * axis_vstride;
2371
2368
  n_valid++;
2372
2369
  }
2373
2370
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2374
2371
  if ( ! mi[k * mstride] ) continue;
2375
- buf[n_valid + n_masked].v = *(int32_t *) (pi + k * istride);
2372
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
2376
2373
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
2377
2374
  n_masked++;
2378
2375
  }
@@ -2380,13 +2377,13 @@ sort_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2380
2377
  } else {
2381
2378
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2382
2379
  if ( ! mi[k * mstride] ) continue;
2383
- buf[n_masked].v = *(int32_t *) (pi + k * istride);
2380
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
2384
2381
  buf[n_masked].i = outer_off + k * axis_vstride;
2385
2382
  n_masked++;
2386
2383
  }
2387
2384
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2388
2385
  if ( mi[k * mstride] ) continue;
2389
- buf[n_masked + n_valid].v = *(int32_t *) (pi + k * istride);
2386
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
2390
2387
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
2391
2388
  n_valid++;
2392
2389
  }
@@ -2394,7 +2391,7 @@ sort_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2394
2391
  }
2395
2392
  } else {
2396
2393
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2397
- buf[k].v = *(int32_t *) (pi + k * istride);
2394
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
2398
2395
  buf[k].i = outer_off + k * axis_vstride;
2399
2396
  }
2400
2397
  sort_lo = 0; sort_n = fiber_n;
@@ -2431,7 +2428,7 @@ sort_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2431
2428
  }
2432
2429
 
2433
2430
  typedef struct {
2434
- uint32_t v;
2431
+ ca_u_uint32_t v;
2435
2432
  ca_size_t i;
2436
2433
  } sort_addr_pair_u32;
2437
2434
 
@@ -2513,13 +2510,13 @@ sort_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2513
2510
  if ( masked_last ) {
2514
2511
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2515
2512
  if ( mi[k * mstride] ) continue;
2516
- buf[n_valid].v = *(uint32_t *) (pi + k * istride);
2513
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
2517
2514
  buf[n_valid].i = outer_off + k * axis_vstride;
2518
2515
  n_valid++;
2519
2516
  }
2520
2517
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2521
2518
  if ( ! mi[k * mstride] ) continue;
2522
- buf[n_valid + n_masked].v = *(uint32_t *) (pi + k * istride);
2519
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
2523
2520
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
2524
2521
  n_masked++;
2525
2522
  }
@@ -2527,13 +2524,13 @@ sort_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2527
2524
  } else {
2528
2525
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2529
2526
  if ( ! mi[k * mstride] ) continue;
2530
- buf[n_masked].v = *(uint32_t *) (pi + k * istride);
2527
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
2531
2528
  buf[n_masked].i = outer_off + k * axis_vstride;
2532
2529
  n_masked++;
2533
2530
  }
2534
2531
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2535
2532
  if ( mi[k * mstride] ) continue;
2536
- buf[n_masked + n_valid].v = *(uint32_t *) (pi + k * istride);
2533
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
2537
2534
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
2538
2535
  n_valid++;
2539
2536
  }
@@ -2541,7 +2538,7 @@ sort_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2541
2538
  }
2542
2539
  } else {
2543
2540
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2544
- buf[k].v = *(uint32_t *) (pi + k * istride);
2541
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
2545
2542
  buf[k].i = outer_off + k * axis_vstride;
2546
2543
  }
2547
2544
  sort_lo = 0; sort_n = fiber_n;
@@ -2578,7 +2575,7 @@ sort_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2578
2575
  }
2579
2576
 
2580
2577
  typedef struct {
2581
- int64_t v;
2578
+ ca_u_int64_t v;
2582
2579
  ca_size_t i;
2583
2580
  } sort_addr_pair_i64;
2584
2581
 
@@ -2660,13 +2657,13 @@ sort_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2660
2657
  if ( masked_last ) {
2661
2658
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2662
2659
  if ( mi[k * mstride] ) continue;
2663
- buf[n_valid].v = *(int64_t *) (pi + k * istride);
2660
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
2664
2661
  buf[n_valid].i = outer_off + k * axis_vstride;
2665
2662
  n_valid++;
2666
2663
  }
2667
2664
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2668
2665
  if ( ! mi[k * mstride] ) continue;
2669
- buf[n_valid + n_masked].v = *(int64_t *) (pi + k * istride);
2666
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
2670
2667
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
2671
2668
  n_masked++;
2672
2669
  }
@@ -2674,13 +2671,13 @@ sort_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2674
2671
  } else {
2675
2672
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2676
2673
  if ( ! mi[k * mstride] ) continue;
2677
- buf[n_masked].v = *(int64_t *) (pi + k * istride);
2674
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
2678
2675
  buf[n_masked].i = outer_off + k * axis_vstride;
2679
2676
  n_masked++;
2680
2677
  }
2681
2678
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2682
2679
  if ( mi[k * mstride] ) continue;
2683
- buf[n_masked + n_valid].v = *(int64_t *) (pi + k * istride);
2680
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
2684
2681
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
2685
2682
  n_valid++;
2686
2683
  }
@@ -2688,7 +2685,7 @@ sort_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2688
2685
  }
2689
2686
  } else {
2690
2687
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2691
- buf[k].v = *(int64_t *) (pi + k * istride);
2688
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
2692
2689
  buf[k].i = outer_off + k * axis_vstride;
2693
2690
  }
2694
2691
  sort_lo = 0; sort_n = fiber_n;
@@ -2725,7 +2722,7 @@ sort_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2725
2722
  }
2726
2723
 
2727
2724
  typedef struct {
2728
- uint64_t v;
2725
+ ca_u_uint64_t v;
2729
2726
  ca_size_t i;
2730
2727
  } sort_addr_pair_u64;
2731
2728
 
@@ -2807,13 +2804,13 @@ sort_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2807
2804
  if ( masked_last ) {
2808
2805
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2809
2806
  if ( mi[k * mstride] ) continue;
2810
- buf[n_valid].v = *(uint64_t *) (pi + k * istride);
2807
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
2811
2808
  buf[n_valid].i = outer_off + k * axis_vstride;
2812
2809
  n_valid++;
2813
2810
  }
2814
2811
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2815
2812
  if ( ! mi[k * mstride] ) continue;
2816
- buf[n_valid + n_masked].v = *(uint64_t *) (pi + k * istride);
2813
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
2817
2814
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
2818
2815
  n_masked++;
2819
2816
  }
@@ -2821,13 +2818,13 @@ sort_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2821
2818
  } else {
2822
2819
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2823
2820
  if ( ! mi[k * mstride] ) continue;
2824
- buf[n_masked].v = *(uint64_t *) (pi + k * istride);
2821
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
2825
2822
  buf[n_masked].i = outer_off + k * axis_vstride;
2826
2823
  n_masked++;
2827
2824
  }
2828
2825
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2829
2826
  if ( mi[k * mstride] ) continue;
2830
- buf[n_masked + n_valid].v = *(uint64_t *) (pi + k * istride);
2827
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
2831
2828
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
2832
2829
  n_valid++;
2833
2830
  }
@@ -2835,7 +2832,7 @@ sort_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2835
2832
  }
2836
2833
  } else {
2837
2834
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2838
- buf[k].v = *(uint64_t *) (pi + k * istride);
2835
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
2839
2836
  buf[k].i = outer_off + k * axis_vstride;
2840
2837
  }
2841
2838
  sort_lo = 0; sort_n = fiber_n;
@@ -2872,7 +2869,7 @@ sort_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2872
2869
  }
2873
2870
 
2874
2871
  typedef struct {
2875
- float v;
2872
+ ca_u_float32_t v;
2876
2873
  ca_size_t i;
2877
2874
  } sort_addr_pair_f32;
2878
2875
 
@@ -2954,13 +2951,13 @@ sort_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2954
2951
  if ( masked_last ) {
2955
2952
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2956
2953
  if ( mi[k * mstride] ) continue;
2957
- buf[n_valid].v = *(float *) (pi + k * istride);
2954
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
2958
2955
  buf[n_valid].i = outer_off + k * axis_vstride;
2959
2956
  n_valid++;
2960
2957
  }
2961
2958
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2962
2959
  if ( ! mi[k * mstride] ) continue;
2963
- buf[n_valid + n_masked].v = *(float *) (pi + k * istride);
2960
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
2964
2961
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
2965
2962
  n_masked++;
2966
2963
  }
@@ -2968,13 +2965,13 @@ sort_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2968
2965
  } else {
2969
2966
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2970
2967
  if ( ! mi[k * mstride] ) continue;
2971
- buf[n_masked].v = *(float *) (pi + k * istride);
2968
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
2972
2969
  buf[n_masked].i = outer_off + k * axis_vstride;
2973
2970
  n_masked++;
2974
2971
  }
2975
2972
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2976
2973
  if ( mi[k * mstride] ) continue;
2977
- buf[n_masked + n_valid].v = *(float *) (pi + k * istride);
2974
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
2978
2975
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
2979
2976
  n_valid++;
2980
2977
  }
@@ -2982,7 +2979,7 @@ sort_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
2982
2979
  }
2983
2980
  } else {
2984
2981
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
2985
- buf[k].v = *(float *) (pi + k * istride);
2982
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
2986
2983
  buf[k].i = outer_off + k * axis_vstride;
2987
2984
  }
2988
2985
  sort_lo = 0; sort_n = fiber_n;
@@ -3023,7 +3020,7 @@ sort_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int ma
3023
3020
  }
3024
3021
 
3025
3022
  typedef struct {
3026
- double v;
3023
+ ca_u_float64_t v;
3027
3024
  ca_size_t i;
3028
3025
  } sort_addr_pair_f64;
3029
3026
 
@@ -3105,13 +3102,13 @@ sort_addr_ki_native_f64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
3105
3102
  if ( masked_last ) {
3106
3103
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3107
3104
  if ( mi[k * mstride] ) continue;
3108
- buf[n_valid].v = *(double *) (pi + k * istride);
3105
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
3109
3106
  buf[n_valid].i = outer_off + k * axis_vstride;
3110
3107
  n_valid++;
3111
3108
  }
3112
3109
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3113
3110
  if ( ! mi[k * mstride] ) continue;
3114
- buf[n_valid + n_masked].v = *(double *) (pi + k * istride);
3111
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
3115
3112
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
3116
3113
  n_masked++;
3117
3114
  }
@@ -3119,13 +3116,13 @@ sort_addr_ki_native_f64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
3119
3116
  } else {
3120
3117
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3121
3118
  if ( ! mi[k * mstride] ) continue;
3122
- buf[n_masked].v = *(double *) (pi + k * istride);
3119
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
3123
3120
  buf[n_masked].i = outer_off + k * axis_vstride;
3124
3121
  n_masked++;
3125
3122
  }
3126
3123
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3127
3124
  if ( mi[k * mstride] ) continue;
3128
- buf[n_masked + n_valid].v = *(double *) (pi + k * istride);
3125
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
3129
3126
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
3130
3127
  n_valid++;
3131
3128
  }
@@ -3133,7 +3130,7 @@ sort_addr_ki_native_f64 (VALUE self, CArray *ca, int axis, int do_stable, int ma
3133
3130
  }
3134
3131
  } else {
3135
3132
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3136
- buf[k].v = *(double *) (pi + k * istride);
3133
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
3137
3134
  buf[k].i = outer_off + k * axis_vstride;
3138
3135
  }
3139
3136
  sort_lo = 0; sort_n = fiber_n;
@@ -3256,13 +3253,13 @@ sort_addr_ki_native_bool (VALUE self, CArray *ca, int axis, int do_stable, int m
3256
3253
  if ( masked_last ) {
3257
3254
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3258
3255
  if ( mi[k * mstride] ) continue;
3259
- buf[n_valid].v = *(boolean8_t *) (pi + k * istride);
3256
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
3260
3257
  buf[n_valid].i = outer_off + k * axis_vstride;
3261
3258
  n_valid++;
3262
3259
  }
3263
3260
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3264
3261
  if ( ! mi[k * mstride] ) continue;
3265
- buf[n_valid + n_masked].v = *(boolean8_t *) (pi + k * istride);
3262
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
3266
3263
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
3267
3264
  n_masked++;
3268
3265
  }
@@ -3270,13 +3267,13 @@ sort_addr_ki_native_bool (VALUE self, CArray *ca, int axis, int do_stable, int m
3270
3267
  } else {
3271
3268
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3272
3269
  if ( ! mi[k * mstride] ) continue;
3273
- buf[n_masked].v = *(boolean8_t *) (pi + k * istride);
3270
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
3274
3271
  buf[n_masked].i = outer_off + k * axis_vstride;
3275
3272
  n_masked++;
3276
3273
  }
3277
3274
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3278
3275
  if ( mi[k * mstride] ) continue;
3279
- buf[n_masked + n_valid].v = *(boolean8_t *) (pi + k * istride);
3276
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
3280
3277
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
3281
3278
  n_valid++;
3282
3279
  }
@@ -3284,7 +3281,7 @@ sort_addr_ki_native_bool (VALUE self, CArray *ca, int axis, int do_stable, int m
3284
3281
  }
3285
3282
  } else {
3286
3283
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3287
- buf[k].v = *(boolean8_t *) (pi + k * istride);
3284
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
3288
3285
  buf[k].i = outer_off + k * axis_vstride;
3289
3286
  }
3290
3287
  sort_lo = 0; sort_n = fiber_n;
@@ -3437,13 +3434,13 @@ sort_addr_ki_native_object_body (VALUE arg)
3437
3434
  if ( masked_last ) {
3438
3435
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3439
3436
  if ( mi[k * mstride] ) continue;
3440
- buf[n_valid].v = *(VALUE *) (pi + k * istride);
3437
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
3441
3438
  buf[n_valid].i = outer_off + k * axis_vstride;
3442
3439
  n_valid++;
3443
3440
  }
3444
3441
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3445
3442
  if ( ! mi[k * mstride] ) continue;
3446
- buf[n_valid + n_masked].v = *(VALUE *) (pi + k * istride);
3443
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
3447
3444
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
3448
3445
  n_masked++;
3449
3446
  }
@@ -3451,13 +3448,13 @@ sort_addr_ki_native_object_body (VALUE arg)
3451
3448
  } else {
3452
3449
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3453
3450
  if ( ! mi[k * mstride] ) continue;
3454
- buf[n_masked].v = *(VALUE *) (pi + k * istride);
3451
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
3455
3452
  buf[n_masked].i = outer_off + k * axis_vstride;
3456
3453
  n_masked++;
3457
3454
  }
3458
3455
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3459
3456
  if ( mi[k * mstride] ) continue;
3460
- buf[n_masked + n_valid].v = *(VALUE *) (pi + k * istride);
3457
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
3461
3458
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
3462
3459
  n_valid++;
3463
3460
  }
@@ -3465,7 +3462,7 @@ sort_addr_ki_native_object_body (VALUE arg)
3465
3462
  }
3466
3463
  } else {
3467
3464
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3468
- buf[k].v = *(VALUE *) (pi + k * istride);
3465
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
3469
3466
  buf[k].i = outer_off + k * axis_vstride;
3470
3467
  }
3471
3468
  sort_lo = 0; sort_n = fiber_n;
@@ -3562,10 +3559,7 @@ sort_addr_ki_native_fixlen (VALUE self, CArray *ca, int axis, int do_stable, int
3562
3559
  ca_size_t fiber_n = st_in.slab_elements;
3563
3560
  volatile VALUE hbuf = 0, haux = 0;
3564
3561
  sort_addr_pair_fixlen *buf = ALLOCV_N(sort_addr_pair_fixlen, hbuf, fiber_n);
3565
- sort_addr_pair_fixlen *aux = NULL;
3566
- if ( do_stable ) {
3567
- aux = ALLOCV_N(sort_addr_pair_fixlen, haux, fiber_n);
3568
- }
3562
+ (void) haux;
3569
3563
 
3570
3564
  /* :view_flat semantics: kernel computes view-flat address
3571
3565
  (= row-major position in ca's shape, 0..elements-1) for
@@ -3852,13 +3846,13 @@ partition_index_ki_native_i8 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
3852
3846
  if ( masked_last ) {
3853
3847
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3854
3848
  if ( mi[k * mstride] ) continue;
3855
- buf[n_valid].v = *(int8_t *) (pi + k * istride);
3849
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
3856
3850
  buf[n_valid].i = k;
3857
3851
  n_valid++;
3858
3852
  }
3859
3853
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3860
3854
  if ( ! mi[k * mstride] ) continue;
3861
- buf[n_valid + n_masked].v = *(int8_t *) (pi + k * istride);
3855
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
3862
3856
  buf[n_valid + n_masked].i = k;
3863
3857
  n_masked++;
3864
3858
  }
@@ -3866,13 +3860,13 @@ partition_index_ki_native_i8 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
3866
3860
  } else {
3867
3861
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3868
3862
  if ( ! mi[k * mstride] ) continue;
3869
- buf[n_masked].v = *(int8_t *) (pi + k * istride);
3863
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
3870
3864
  buf[n_masked].i = k;
3871
3865
  n_masked++;
3872
3866
  }
3873
3867
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3874
3868
  if ( mi[k * mstride] ) continue;
3875
- buf[n_masked + n_valid].v = *(int8_t *) (pi + k * istride);
3869
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
3876
3870
  buf[n_masked + n_valid].i = k;
3877
3871
  n_valid++;
3878
3872
  }
@@ -3880,7 +3874,7 @@ partition_index_ki_native_i8 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
3880
3874
  }
3881
3875
  } else {
3882
3876
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
3883
- buf[k].v = *(int8_t *) (pi + k * istride);
3877
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
3884
3878
  buf[k].i = k;
3885
3879
  }
3886
3880
  sort_lo = 0; sort_n = fiber_n;
@@ -4031,13 +4025,13 @@ partition_index_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
4031
4025
  if ( masked_last ) {
4032
4026
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4033
4027
  if ( mi[k * mstride] ) continue;
4034
- buf[n_valid].v = *(uint8_t *) (pi + k * istride);
4028
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
4035
4029
  buf[n_valid].i = k;
4036
4030
  n_valid++;
4037
4031
  }
4038
4032
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4039
4033
  if ( ! mi[k * mstride] ) continue;
4040
- buf[n_valid + n_masked].v = *(uint8_t *) (pi + k * istride);
4034
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
4041
4035
  buf[n_valid + n_masked].i = k;
4042
4036
  n_masked++;
4043
4037
  }
@@ -4045,13 +4039,13 @@ partition_index_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
4045
4039
  } else {
4046
4040
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4047
4041
  if ( ! mi[k * mstride] ) continue;
4048
- buf[n_masked].v = *(uint8_t *) (pi + k * istride);
4042
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
4049
4043
  buf[n_masked].i = k;
4050
4044
  n_masked++;
4051
4045
  }
4052
4046
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4053
4047
  if ( mi[k * mstride] ) continue;
4054
- buf[n_masked + n_valid].v = *(uint8_t *) (pi + k * istride);
4048
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
4055
4049
  buf[n_masked + n_valid].i = k;
4056
4050
  n_valid++;
4057
4051
  }
@@ -4059,7 +4053,7 @@ partition_index_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
4059
4053
  }
4060
4054
  } else {
4061
4055
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4062
- buf[k].v = *(uint8_t *) (pi + k * istride);
4056
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
4063
4057
  buf[k].i = k;
4064
4058
  }
4065
4059
  sort_lo = 0; sort_n = fiber_n;
@@ -4090,7 +4084,7 @@ partition_index_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
4090
4084
  }
4091
4085
 
4092
4086
  typedef struct {
4093
- int16_t v;
4087
+ ca_u_int16_t v;
4094
4088
  ca_size_t i;
4095
4089
  } partition_index_pair_i16;
4096
4090
 
@@ -4210,13 +4204,13 @@ partition_index_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4210
4204
  if ( masked_last ) {
4211
4205
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4212
4206
  if ( mi[k * mstride] ) continue;
4213
- buf[n_valid].v = *(int16_t *) (pi + k * istride);
4207
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
4214
4208
  buf[n_valid].i = k;
4215
4209
  n_valid++;
4216
4210
  }
4217
4211
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4218
4212
  if ( ! mi[k * mstride] ) continue;
4219
- buf[n_valid + n_masked].v = *(int16_t *) (pi + k * istride);
4213
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
4220
4214
  buf[n_valid + n_masked].i = k;
4221
4215
  n_masked++;
4222
4216
  }
@@ -4224,13 +4218,13 @@ partition_index_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4224
4218
  } else {
4225
4219
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4226
4220
  if ( ! mi[k * mstride] ) continue;
4227
- buf[n_masked].v = *(int16_t *) (pi + k * istride);
4221
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
4228
4222
  buf[n_masked].i = k;
4229
4223
  n_masked++;
4230
4224
  }
4231
4225
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4232
4226
  if ( mi[k * mstride] ) continue;
4233
- buf[n_masked + n_valid].v = *(int16_t *) (pi + k * istride);
4227
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
4234
4228
  buf[n_masked + n_valid].i = k;
4235
4229
  n_valid++;
4236
4230
  }
@@ -4238,7 +4232,7 @@ partition_index_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4238
4232
  }
4239
4233
  } else {
4240
4234
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4241
- buf[k].v = *(int16_t *) (pi + k * istride);
4235
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
4242
4236
  buf[k].i = k;
4243
4237
  }
4244
4238
  sort_lo = 0; sort_n = fiber_n;
@@ -4269,7 +4263,7 @@ partition_index_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4269
4263
  }
4270
4264
 
4271
4265
  typedef struct {
4272
- uint16_t v;
4266
+ ca_u_uint16_t v;
4273
4267
  ca_size_t i;
4274
4268
  } partition_index_pair_u16;
4275
4269
 
@@ -4389,13 +4383,13 @@ partition_index_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4389
4383
  if ( masked_last ) {
4390
4384
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4391
4385
  if ( mi[k * mstride] ) continue;
4392
- buf[n_valid].v = *(uint16_t *) (pi + k * istride);
4386
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
4393
4387
  buf[n_valid].i = k;
4394
4388
  n_valid++;
4395
4389
  }
4396
4390
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4397
4391
  if ( ! mi[k * mstride] ) continue;
4398
- buf[n_valid + n_masked].v = *(uint16_t *) (pi + k * istride);
4392
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
4399
4393
  buf[n_valid + n_masked].i = k;
4400
4394
  n_masked++;
4401
4395
  }
@@ -4403,13 +4397,13 @@ partition_index_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4403
4397
  } else {
4404
4398
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4405
4399
  if ( ! mi[k * mstride] ) continue;
4406
- buf[n_masked].v = *(uint16_t *) (pi + k * istride);
4400
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
4407
4401
  buf[n_masked].i = k;
4408
4402
  n_masked++;
4409
4403
  }
4410
4404
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4411
4405
  if ( mi[k * mstride] ) continue;
4412
- buf[n_masked + n_valid].v = *(uint16_t *) (pi + k * istride);
4406
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
4413
4407
  buf[n_masked + n_valid].i = k;
4414
4408
  n_valid++;
4415
4409
  }
@@ -4417,7 +4411,7 @@ partition_index_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4417
4411
  }
4418
4412
  } else {
4419
4413
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4420
- buf[k].v = *(uint16_t *) (pi + k * istride);
4414
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
4421
4415
  buf[k].i = k;
4422
4416
  }
4423
4417
  sort_lo = 0; sort_n = fiber_n;
@@ -4448,7 +4442,7 @@ partition_index_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4448
4442
  }
4449
4443
 
4450
4444
  typedef struct {
4451
- int32_t v;
4445
+ ca_u_int32_t v;
4452
4446
  ca_size_t i;
4453
4447
  } partition_index_pair_i32;
4454
4448
 
@@ -4568,13 +4562,13 @@ partition_index_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4568
4562
  if ( masked_last ) {
4569
4563
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4570
4564
  if ( mi[k * mstride] ) continue;
4571
- buf[n_valid].v = *(int32_t *) (pi + k * istride);
4565
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
4572
4566
  buf[n_valid].i = k;
4573
4567
  n_valid++;
4574
4568
  }
4575
4569
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4576
4570
  if ( ! mi[k * mstride] ) continue;
4577
- buf[n_valid + n_masked].v = *(int32_t *) (pi + k * istride);
4571
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
4578
4572
  buf[n_valid + n_masked].i = k;
4579
4573
  n_masked++;
4580
4574
  }
@@ -4582,13 +4576,13 @@ partition_index_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4582
4576
  } else {
4583
4577
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4584
4578
  if ( ! mi[k * mstride] ) continue;
4585
- buf[n_masked].v = *(int32_t *) (pi + k * istride);
4579
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
4586
4580
  buf[n_masked].i = k;
4587
4581
  n_masked++;
4588
4582
  }
4589
4583
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4590
4584
  if ( mi[k * mstride] ) continue;
4591
- buf[n_masked + n_valid].v = *(int32_t *) (pi + k * istride);
4585
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
4592
4586
  buf[n_masked + n_valid].i = k;
4593
4587
  n_valid++;
4594
4588
  }
@@ -4596,7 +4590,7 @@ partition_index_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4596
4590
  }
4597
4591
  } else {
4598
4592
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4599
- buf[k].v = *(int32_t *) (pi + k * istride);
4593
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
4600
4594
  buf[k].i = k;
4601
4595
  }
4602
4596
  sort_lo = 0; sort_n = fiber_n;
@@ -4627,7 +4621,7 @@ partition_index_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4627
4621
  }
4628
4622
 
4629
4623
  typedef struct {
4630
- uint32_t v;
4624
+ ca_u_uint32_t v;
4631
4625
  ca_size_t i;
4632
4626
  } partition_index_pair_u32;
4633
4627
 
@@ -4747,13 +4741,13 @@ partition_index_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4747
4741
  if ( masked_last ) {
4748
4742
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4749
4743
  if ( mi[k * mstride] ) continue;
4750
- buf[n_valid].v = *(uint32_t *) (pi + k * istride);
4744
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
4751
4745
  buf[n_valid].i = k;
4752
4746
  n_valid++;
4753
4747
  }
4754
4748
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4755
4749
  if ( ! mi[k * mstride] ) continue;
4756
- buf[n_valid + n_masked].v = *(uint32_t *) (pi + k * istride);
4750
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
4757
4751
  buf[n_valid + n_masked].i = k;
4758
4752
  n_masked++;
4759
4753
  }
@@ -4761,13 +4755,13 @@ partition_index_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4761
4755
  } else {
4762
4756
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4763
4757
  if ( ! mi[k * mstride] ) continue;
4764
- buf[n_masked].v = *(uint32_t *) (pi + k * istride);
4758
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
4765
4759
  buf[n_masked].i = k;
4766
4760
  n_masked++;
4767
4761
  }
4768
4762
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4769
4763
  if ( mi[k * mstride] ) continue;
4770
- buf[n_masked + n_valid].v = *(uint32_t *) (pi + k * istride);
4764
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
4771
4765
  buf[n_masked + n_valid].i = k;
4772
4766
  n_valid++;
4773
4767
  }
@@ -4775,7 +4769,7 @@ partition_index_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4775
4769
  }
4776
4770
  } else {
4777
4771
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4778
- buf[k].v = *(uint32_t *) (pi + k * istride);
4772
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
4779
4773
  buf[k].i = k;
4780
4774
  }
4781
4775
  sort_lo = 0; sort_n = fiber_n;
@@ -4806,7 +4800,7 @@ partition_index_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4806
4800
  }
4807
4801
 
4808
4802
  typedef struct {
4809
- int64_t v;
4803
+ ca_u_int64_t v;
4810
4804
  ca_size_t i;
4811
4805
  } partition_index_pair_i64;
4812
4806
 
@@ -4926,13 +4920,13 @@ partition_index_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4926
4920
  if ( masked_last ) {
4927
4921
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4928
4922
  if ( mi[k * mstride] ) continue;
4929
- buf[n_valid].v = *(int64_t *) (pi + k * istride);
4923
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
4930
4924
  buf[n_valid].i = k;
4931
4925
  n_valid++;
4932
4926
  }
4933
4927
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4934
4928
  if ( ! mi[k * mstride] ) continue;
4935
- buf[n_valid + n_masked].v = *(int64_t *) (pi + k * istride);
4929
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
4936
4930
  buf[n_valid + n_masked].i = k;
4937
4931
  n_masked++;
4938
4932
  }
@@ -4940,13 +4934,13 @@ partition_index_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4940
4934
  } else {
4941
4935
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4942
4936
  if ( ! mi[k * mstride] ) continue;
4943
- buf[n_masked].v = *(int64_t *) (pi + k * istride);
4937
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
4944
4938
  buf[n_masked].i = k;
4945
4939
  n_masked++;
4946
4940
  }
4947
4941
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4948
4942
  if ( mi[k * mstride] ) continue;
4949
- buf[n_masked + n_valid].v = *(int64_t *) (pi + k * istride);
4943
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
4950
4944
  buf[n_masked + n_valid].i = k;
4951
4945
  n_valid++;
4952
4946
  }
@@ -4954,7 +4948,7 @@ partition_index_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4954
4948
  }
4955
4949
  } else {
4956
4950
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
4957
- buf[k].v = *(int64_t *) (pi + k * istride);
4951
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
4958
4952
  buf[k].i = k;
4959
4953
  }
4960
4954
  sort_lo = 0; sort_n = fiber_n;
@@ -4985,7 +4979,7 @@ partition_index_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
4985
4979
  }
4986
4980
 
4987
4981
  typedef struct {
4988
- uint64_t v;
4982
+ ca_u_uint64_t v;
4989
4983
  ca_size_t i;
4990
4984
  } partition_index_pair_u64;
4991
4985
 
@@ -5105,13 +5099,13 @@ partition_index_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5105
5099
  if ( masked_last ) {
5106
5100
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5107
5101
  if ( mi[k * mstride] ) continue;
5108
- buf[n_valid].v = *(uint64_t *) (pi + k * istride);
5102
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
5109
5103
  buf[n_valid].i = k;
5110
5104
  n_valid++;
5111
5105
  }
5112
5106
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5113
5107
  if ( ! mi[k * mstride] ) continue;
5114
- buf[n_valid + n_masked].v = *(uint64_t *) (pi + k * istride);
5108
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
5115
5109
  buf[n_valid + n_masked].i = k;
5116
5110
  n_masked++;
5117
5111
  }
@@ -5119,13 +5113,13 @@ partition_index_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5119
5113
  } else {
5120
5114
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5121
5115
  if ( ! mi[k * mstride] ) continue;
5122
- buf[n_masked].v = *(uint64_t *) (pi + k * istride);
5116
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
5123
5117
  buf[n_masked].i = k;
5124
5118
  n_masked++;
5125
5119
  }
5126
5120
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5127
5121
  if ( mi[k * mstride] ) continue;
5128
- buf[n_masked + n_valid].v = *(uint64_t *) (pi + k * istride);
5122
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
5129
5123
  buf[n_masked + n_valid].i = k;
5130
5124
  n_valid++;
5131
5125
  }
@@ -5133,7 +5127,7 @@ partition_index_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5133
5127
  }
5134
5128
  } else {
5135
5129
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5136
- buf[k].v = *(uint64_t *) (pi + k * istride);
5130
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
5137
5131
  buf[k].i = k;
5138
5132
  }
5139
5133
  sort_lo = 0; sort_n = fiber_n;
@@ -5164,7 +5158,7 @@ partition_index_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5164
5158
  }
5165
5159
 
5166
5160
  typedef struct {
5167
- float v;
5161
+ ca_u_float32_t v;
5168
5162
  ca_size_t i;
5169
5163
  } partition_index_pair_f32;
5170
5164
 
@@ -5284,13 +5278,13 @@ partition_index_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5284
5278
  if ( masked_last ) {
5285
5279
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5286
5280
  if ( mi[k * mstride] ) continue;
5287
- buf[n_valid].v = *(float *) (pi + k * istride);
5281
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
5288
5282
  buf[n_valid].i = k;
5289
5283
  n_valid++;
5290
5284
  }
5291
5285
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5292
5286
  if ( ! mi[k * mstride] ) continue;
5293
- buf[n_valid + n_masked].v = *(float *) (pi + k * istride);
5287
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
5294
5288
  buf[n_valid + n_masked].i = k;
5295
5289
  n_masked++;
5296
5290
  }
@@ -5298,13 +5292,13 @@ partition_index_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5298
5292
  } else {
5299
5293
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5300
5294
  if ( ! mi[k * mstride] ) continue;
5301
- buf[n_masked].v = *(float *) (pi + k * istride);
5295
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
5302
5296
  buf[n_masked].i = k;
5303
5297
  n_masked++;
5304
5298
  }
5305
5299
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5306
5300
  if ( mi[k * mstride] ) continue;
5307
- buf[n_masked + n_valid].v = *(float *) (pi + k * istride);
5301
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
5308
5302
  buf[n_masked + n_valid].i = k;
5309
5303
  n_valid++;
5310
5304
  }
@@ -5312,7 +5306,7 @@ partition_index_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5312
5306
  }
5313
5307
  } else {
5314
5308
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5315
- buf[k].v = *(float *) (pi + k * istride);
5309
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
5316
5310
  buf[k].i = k;
5317
5311
  }
5318
5312
  sort_lo = 0; sort_n = fiber_n;
@@ -5343,7 +5337,7 @@ partition_index_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5343
5337
  }
5344
5338
 
5345
5339
  typedef struct {
5346
- double v;
5340
+ ca_u_float64_t v;
5347
5341
  ca_size_t i;
5348
5342
  } partition_index_pair_f64;
5349
5343
 
@@ -5463,13 +5457,13 @@ partition_index_ki_native_f64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5463
5457
  if ( masked_last ) {
5464
5458
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5465
5459
  if ( mi[k * mstride] ) continue;
5466
- buf[n_valid].v = *(double *) (pi + k * istride);
5460
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
5467
5461
  buf[n_valid].i = k;
5468
5462
  n_valid++;
5469
5463
  }
5470
5464
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5471
5465
  if ( ! mi[k * mstride] ) continue;
5472
- buf[n_valid + n_masked].v = *(double *) (pi + k * istride);
5466
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
5473
5467
  buf[n_valid + n_masked].i = k;
5474
5468
  n_masked++;
5475
5469
  }
@@ -5477,13 +5471,13 @@ partition_index_ki_native_f64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5477
5471
  } else {
5478
5472
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5479
5473
  if ( ! mi[k * mstride] ) continue;
5480
- buf[n_masked].v = *(double *) (pi + k * istride);
5474
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
5481
5475
  buf[n_masked].i = k;
5482
5476
  n_masked++;
5483
5477
  }
5484
5478
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5485
5479
  if ( mi[k * mstride] ) continue;
5486
- buf[n_masked + n_valid].v = *(double *) (pi + k * istride);
5480
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
5487
5481
  buf[n_masked + n_valid].i = k;
5488
5482
  n_valid++;
5489
5483
  }
@@ -5491,7 +5485,7 @@ partition_index_ki_native_f64 (VALUE self, CArray *ca, int axis, ca_size_t kth,
5491
5485
  }
5492
5486
  } else {
5493
5487
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5494
- buf[k].v = *(double *) (pi + k * istride);
5488
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
5495
5489
  buf[k].i = k;
5496
5490
  }
5497
5491
  sort_lo = 0; sort_n = fiber_n;
@@ -5642,13 +5636,13 @@ partition_index_ki_native_bool (VALUE self, CArray *ca, int axis, ca_size_t kth,
5642
5636
  if ( masked_last ) {
5643
5637
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5644
5638
  if ( mi[k * mstride] ) continue;
5645
- buf[n_valid].v = *(boolean8_t *) (pi + k * istride);
5639
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
5646
5640
  buf[n_valid].i = k;
5647
5641
  n_valid++;
5648
5642
  }
5649
5643
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5650
5644
  if ( ! mi[k * mstride] ) continue;
5651
- buf[n_valid + n_masked].v = *(boolean8_t *) (pi + k * istride);
5645
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
5652
5646
  buf[n_valid + n_masked].i = k;
5653
5647
  n_masked++;
5654
5648
  }
@@ -5656,13 +5650,13 @@ partition_index_ki_native_bool (VALUE self, CArray *ca, int axis, ca_size_t kth,
5656
5650
  } else {
5657
5651
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5658
5652
  if ( ! mi[k * mstride] ) continue;
5659
- buf[n_masked].v = *(boolean8_t *) (pi + k * istride);
5653
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
5660
5654
  buf[n_masked].i = k;
5661
5655
  n_masked++;
5662
5656
  }
5663
5657
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5664
5658
  if ( mi[k * mstride] ) continue;
5665
- buf[n_masked + n_valid].v = *(boolean8_t *) (pi + k * istride);
5659
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
5666
5660
  buf[n_masked + n_valid].i = k;
5667
5661
  n_valid++;
5668
5662
  }
@@ -5670,7 +5664,7 @@ partition_index_ki_native_bool (VALUE self, CArray *ca, int axis, ca_size_t kth,
5670
5664
  }
5671
5665
  } else {
5672
5666
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5673
- buf[k].v = *(boolean8_t *) (pi + k * istride);
5667
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
5674
5668
  buf[k].i = k;
5675
5669
  }
5676
5670
  sort_lo = 0; sort_n = fiber_n;
@@ -5845,13 +5839,13 @@ partition_index_ki_native_object_body (VALUE arg)
5845
5839
  if ( masked_last ) {
5846
5840
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5847
5841
  if ( mi[k * mstride] ) continue;
5848
- buf[n_valid].v = *(VALUE *) (pi + k * istride);
5842
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
5849
5843
  buf[n_valid].i = k;
5850
5844
  n_valid++;
5851
5845
  }
5852
5846
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5853
5847
  if ( ! mi[k * mstride] ) continue;
5854
- buf[n_valid + n_masked].v = *(VALUE *) (pi + k * istride);
5848
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
5855
5849
  buf[n_valid + n_masked].i = k;
5856
5850
  n_masked++;
5857
5851
  }
@@ -5859,13 +5853,13 @@ partition_index_ki_native_object_body (VALUE arg)
5859
5853
  } else {
5860
5854
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5861
5855
  if ( ! mi[k * mstride] ) continue;
5862
- buf[n_masked].v = *(VALUE *) (pi + k * istride);
5856
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
5863
5857
  buf[n_masked].i = k;
5864
5858
  n_masked++;
5865
5859
  }
5866
5860
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5867
5861
  if ( mi[k * mstride] ) continue;
5868
- buf[n_masked + n_valid].v = *(VALUE *) (pi + k * istride);
5862
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
5869
5863
  buf[n_masked + n_valid].i = k;
5870
5864
  n_valid++;
5871
5865
  }
@@ -5873,7 +5867,7 @@ partition_index_ki_native_object_body (VALUE arg)
5873
5867
  }
5874
5868
  } else {
5875
5869
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
5876
- buf[k].v = *(VALUE *) (pi + k * istride);
5870
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
5877
5871
  buf[k].i = k;
5878
5872
  }
5879
5873
  sort_lo = 0; sort_n = fiber_n;
@@ -6322,13 +6316,13 @@ partition_addr_ki_native_i8 (VALUE self, CArray *ca, int axis, ca_size_t kth, in
6322
6316
  if ( masked_last ) {
6323
6317
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6324
6318
  if ( mi[k * mstride] ) continue;
6325
- buf[n_valid].v = *(int8_t *) (pi + k * istride);
6319
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
6326
6320
  buf[n_valid].i = outer_off + k * axis_vstride;
6327
6321
  n_valid++;
6328
6322
  }
6329
6323
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6330
6324
  if ( ! mi[k * mstride] ) continue;
6331
- buf[n_valid + n_masked].v = *(int8_t *) (pi + k * istride);
6325
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
6332
6326
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
6333
6327
  n_masked++;
6334
6328
  }
@@ -6336,13 +6330,13 @@ partition_addr_ki_native_i8 (VALUE self, CArray *ca, int axis, ca_size_t kth, in
6336
6330
  } else {
6337
6331
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6338
6332
  if ( ! mi[k * mstride] ) continue;
6339
- buf[n_masked].v = *(int8_t *) (pi + k * istride);
6333
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
6340
6334
  buf[n_masked].i = outer_off + k * axis_vstride;
6341
6335
  n_masked++;
6342
6336
  }
6343
6337
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6344
6338
  if ( mi[k * mstride] ) continue;
6345
- buf[n_masked + n_valid].v = *(int8_t *) (pi + k * istride);
6339
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
6346
6340
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
6347
6341
  n_valid++;
6348
6342
  }
@@ -6350,7 +6344,7 @@ partition_addr_ki_native_i8 (VALUE self, CArray *ca, int axis, ca_size_t kth, in
6350
6344
  }
6351
6345
  } else {
6352
6346
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6353
- buf[k].v = *(int8_t *) (pi + k * istride);
6347
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
6354
6348
  buf[k].i = outer_off + k * axis_vstride;
6355
6349
  }
6356
6350
  sort_lo = 0; sort_n = fiber_n;
@@ -6533,13 +6527,13 @@ partition_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, in
6533
6527
  if ( masked_last ) {
6534
6528
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6535
6529
  if ( mi[k * mstride] ) continue;
6536
- buf[n_valid].v = *(uint8_t *) (pi + k * istride);
6530
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
6537
6531
  buf[n_valid].i = outer_off + k * axis_vstride;
6538
6532
  n_valid++;
6539
6533
  }
6540
6534
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6541
6535
  if ( ! mi[k * mstride] ) continue;
6542
- buf[n_valid + n_masked].v = *(uint8_t *) (pi + k * istride);
6536
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
6543
6537
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
6544
6538
  n_masked++;
6545
6539
  }
@@ -6547,13 +6541,13 @@ partition_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, in
6547
6541
  } else {
6548
6542
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6549
6543
  if ( ! mi[k * mstride] ) continue;
6550
- buf[n_masked].v = *(uint8_t *) (pi + k * istride);
6544
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
6551
6545
  buf[n_masked].i = outer_off + k * axis_vstride;
6552
6546
  n_masked++;
6553
6547
  }
6554
6548
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6555
6549
  if ( mi[k * mstride] ) continue;
6556
- buf[n_masked + n_valid].v = *(uint8_t *) (pi + k * istride);
6550
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
6557
6551
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
6558
6552
  n_valid++;
6559
6553
  }
@@ -6561,7 +6555,7 @@ partition_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, in
6561
6555
  }
6562
6556
  } else {
6563
6557
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6564
- buf[k].v = *(uint8_t *) (pi + k * istride);
6558
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
6565
6559
  buf[k].i = outer_off + k * axis_vstride;
6566
6560
  }
6567
6561
  sort_lo = 0; sort_n = fiber_n;
@@ -6597,7 +6591,7 @@ partition_addr_ki_native_u8 (VALUE self, CArray *ca, int axis, ca_size_t kth, in
6597
6591
  }
6598
6592
 
6599
6593
  typedef struct {
6600
- int16_t v;
6594
+ ca_u_int16_t v;
6601
6595
  ca_size_t i;
6602
6596
  } partition_addr_pair_i16;
6603
6597
 
@@ -6744,13 +6738,13 @@ partition_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
6744
6738
  if ( masked_last ) {
6745
6739
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6746
6740
  if ( mi[k * mstride] ) continue;
6747
- buf[n_valid].v = *(int16_t *) (pi + k * istride);
6741
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
6748
6742
  buf[n_valid].i = outer_off + k * axis_vstride;
6749
6743
  n_valid++;
6750
6744
  }
6751
6745
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6752
6746
  if ( ! mi[k * mstride] ) continue;
6753
- buf[n_valid + n_masked].v = *(int16_t *) (pi + k * istride);
6747
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
6754
6748
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
6755
6749
  n_masked++;
6756
6750
  }
@@ -6758,13 +6752,13 @@ partition_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
6758
6752
  } else {
6759
6753
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6760
6754
  if ( ! mi[k * mstride] ) continue;
6761
- buf[n_masked].v = *(int16_t *) (pi + k * istride);
6755
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
6762
6756
  buf[n_masked].i = outer_off + k * axis_vstride;
6763
6757
  n_masked++;
6764
6758
  }
6765
6759
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6766
6760
  if ( mi[k * mstride] ) continue;
6767
- buf[n_masked + n_valid].v = *(int16_t *) (pi + k * istride);
6761
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
6768
6762
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
6769
6763
  n_valid++;
6770
6764
  }
@@ -6772,7 +6766,7 @@ partition_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
6772
6766
  }
6773
6767
  } else {
6774
6768
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6775
- buf[k].v = *(int16_t *) (pi + k * istride);
6769
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
6776
6770
  buf[k].i = outer_off + k * axis_vstride;
6777
6771
  }
6778
6772
  sort_lo = 0; sort_n = fiber_n;
@@ -6808,7 +6802,7 @@ partition_addr_ki_native_i16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
6808
6802
  }
6809
6803
 
6810
6804
  typedef struct {
6811
- uint16_t v;
6805
+ ca_u_uint16_t v;
6812
6806
  ca_size_t i;
6813
6807
  } partition_addr_pair_u16;
6814
6808
 
@@ -6955,13 +6949,13 @@ partition_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
6955
6949
  if ( masked_last ) {
6956
6950
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6957
6951
  if ( mi[k * mstride] ) continue;
6958
- buf[n_valid].v = *(uint16_t *) (pi + k * istride);
6952
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
6959
6953
  buf[n_valid].i = outer_off + k * axis_vstride;
6960
6954
  n_valid++;
6961
6955
  }
6962
6956
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6963
6957
  if ( ! mi[k * mstride] ) continue;
6964
- buf[n_valid + n_masked].v = *(uint16_t *) (pi + k * istride);
6958
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
6965
6959
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
6966
6960
  n_masked++;
6967
6961
  }
@@ -6969,13 +6963,13 @@ partition_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
6969
6963
  } else {
6970
6964
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6971
6965
  if ( ! mi[k * mstride] ) continue;
6972
- buf[n_masked].v = *(uint16_t *) (pi + k * istride);
6966
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
6973
6967
  buf[n_masked].i = outer_off + k * axis_vstride;
6974
6968
  n_masked++;
6975
6969
  }
6976
6970
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6977
6971
  if ( mi[k * mstride] ) continue;
6978
- buf[n_masked + n_valid].v = *(uint16_t *) (pi + k * istride);
6972
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
6979
6973
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
6980
6974
  n_valid++;
6981
6975
  }
@@ -6983,7 +6977,7 @@ partition_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
6983
6977
  }
6984
6978
  } else {
6985
6979
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
6986
- buf[k].v = *(uint16_t *) (pi + k * istride);
6980
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
6987
6981
  buf[k].i = outer_off + k * axis_vstride;
6988
6982
  }
6989
6983
  sort_lo = 0; sort_n = fiber_n;
@@ -7019,7 +7013,7 @@ partition_addr_ki_native_u16 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7019
7013
  }
7020
7014
 
7021
7015
  typedef struct {
7022
- int32_t v;
7016
+ ca_u_int32_t v;
7023
7017
  ca_size_t i;
7024
7018
  } partition_addr_pair_i32;
7025
7019
 
@@ -7166,13 +7160,13 @@ partition_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7166
7160
  if ( masked_last ) {
7167
7161
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7168
7162
  if ( mi[k * mstride] ) continue;
7169
- buf[n_valid].v = *(int32_t *) (pi + k * istride);
7163
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
7170
7164
  buf[n_valid].i = outer_off + k * axis_vstride;
7171
7165
  n_valid++;
7172
7166
  }
7173
7167
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7174
7168
  if ( ! mi[k * mstride] ) continue;
7175
- buf[n_valid + n_masked].v = *(int32_t *) (pi + k * istride);
7169
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
7176
7170
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
7177
7171
  n_masked++;
7178
7172
  }
@@ -7180,13 +7174,13 @@ partition_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7180
7174
  } else {
7181
7175
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7182
7176
  if ( ! mi[k * mstride] ) continue;
7183
- buf[n_masked].v = *(int32_t *) (pi + k * istride);
7177
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
7184
7178
  buf[n_masked].i = outer_off + k * axis_vstride;
7185
7179
  n_masked++;
7186
7180
  }
7187
7181
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7188
7182
  if ( mi[k * mstride] ) continue;
7189
- buf[n_masked + n_valid].v = *(int32_t *) (pi + k * istride);
7183
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
7190
7184
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
7191
7185
  n_valid++;
7192
7186
  }
@@ -7194,7 +7188,7 @@ partition_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7194
7188
  }
7195
7189
  } else {
7196
7190
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7197
- buf[k].v = *(int32_t *) (pi + k * istride);
7191
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
7198
7192
  buf[k].i = outer_off + k * axis_vstride;
7199
7193
  }
7200
7194
  sort_lo = 0; sort_n = fiber_n;
@@ -7230,7 +7224,7 @@ partition_addr_ki_native_i32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7230
7224
  }
7231
7225
 
7232
7226
  typedef struct {
7233
- uint32_t v;
7227
+ ca_u_uint32_t v;
7234
7228
  ca_size_t i;
7235
7229
  } partition_addr_pair_u32;
7236
7230
 
@@ -7377,13 +7371,13 @@ partition_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7377
7371
  if ( masked_last ) {
7378
7372
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7379
7373
  if ( mi[k * mstride] ) continue;
7380
- buf[n_valid].v = *(uint32_t *) (pi + k * istride);
7374
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
7381
7375
  buf[n_valid].i = outer_off + k * axis_vstride;
7382
7376
  n_valid++;
7383
7377
  }
7384
7378
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7385
7379
  if ( ! mi[k * mstride] ) continue;
7386
- buf[n_valid + n_masked].v = *(uint32_t *) (pi + k * istride);
7380
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
7387
7381
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
7388
7382
  n_masked++;
7389
7383
  }
@@ -7391,13 +7385,13 @@ partition_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7391
7385
  } else {
7392
7386
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7393
7387
  if ( ! mi[k * mstride] ) continue;
7394
- buf[n_masked].v = *(uint32_t *) (pi + k * istride);
7388
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
7395
7389
  buf[n_masked].i = outer_off + k * axis_vstride;
7396
7390
  n_masked++;
7397
7391
  }
7398
7392
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7399
7393
  if ( mi[k * mstride] ) continue;
7400
- buf[n_masked + n_valid].v = *(uint32_t *) (pi + k * istride);
7394
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
7401
7395
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
7402
7396
  n_valid++;
7403
7397
  }
@@ -7405,7 +7399,7 @@ partition_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7405
7399
  }
7406
7400
  } else {
7407
7401
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7408
- buf[k].v = *(uint32_t *) (pi + k * istride);
7402
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
7409
7403
  buf[k].i = outer_off + k * axis_vstride;
7410
7404
  }
7411
7405
  sort_lo = 0; sort_n = fiber_n;
@@ -7441,7 +7435,7 @@ partition_addr_ki_native_u32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7441
7435
  }
7442
7436
 
7443
7437
  typedef struct {
7444
- int64_t v;
7438
+ ca_u_int64_t v;
7445
7439
  ca_size_t i;
7446
7440
  } partition_addr_pair_i64;
7447
7441
 
@@ -7588,13 +7582,13 @@ partition_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7588
7582
  if ( masked_last ) {
7589
7583
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7590
7584
  if ( mi[k * mstride] ) continue;
7591
- buf[n_valid].v = *(int64_t *) (pi + k * istride);
7585
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
7592
7586
  buf[n_valid].i = outer_off + k * axis_vstride;
7593
7587
  n_valid++;
7594
7588
  }
7595
7589
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7596
7590
  if ( ! mi[k * mstride] ) continue;
7597
- buf[n_valid + n_masked].v = *(int64_t *) (pi + k * istride);
7591
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
7598
7592
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
7599
7593
  n_masked++;
7600
7594
  }
@@ -7602,13 +7596,13 @@ partition_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7602
7596
  } else {
7603
7597
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7604
7598
  if ( ! mi[k * mstride] ) continue;
7605
- buf[n_masked].v = *(int64_t *) (pi + k * istride);
7599
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
7606
7600
  buf[n_masked].i = outer_off + k * axis_vstride;
7607
7601
  n_masked++;
7608
7602
  }
7609
7603
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7610
7604
  if ( mi[k * mstride] ) continue;
7611
- buf[n_masked + n_valid].v = *(int64_t *) (pi + k * istride);
7605
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
7612
7606
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
7613
7607
  n_valid++;
7614
7608
  }
@@ -7616,7 +7610,7 @@ partition_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7616
7610
  }
7617
7611
  } else {
7618
7612
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7619
- buf[k].v = *(int64_t *) (pi + k * istride);
7613
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
7620
7614
  buf[k].i = outer_off + k * axis_vstride;
7621
7615
  }
7622
7616
  sort_lo = 0; sort_n = fiber_n;
@@ -7652,7 +7646,7 @@ partition_addr_ki_native_i64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7652
7646
  }
7653
7647
 
7654
7648
  typedef struct {
7655
- uint64_t v;
7649
+ ca_u_uint64_t v;
7656
7650
  ca_size_t i;
7657
7651
  } partition_addr_pair_u64;
7658
7652
 
@@ -7799,13 +7793,13 @@ partition_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7799
7793
  if ( masked_last ) {
7800
7794
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7801
7795
  if ( mi[k * mstride] ) continue;
7802
- buf[n_valid].v = *(uint64_t *) (pi + k * istride);
7796
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
7803
7797
  buf[n_valid].i = outer_off + k * axis_vstride;
7804
7798
  n_valid++;
7805
7799
  }
7806
7800
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7807
7801
  if ( ! mi[k * mstride] ) continue;
7808
- buf[n_valid + n_masked].v = *(uint64_t *) (pi + k * istride);
7802
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
7809
7803
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
7810
7804
  n_masked++;
7811
7805
  }
@@ -7813,13 +7807,13 @@ partition_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7813
7807
  } else {
7814
7808
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7815
7809
  if ( ! mi[k * mstride] ) continue;
7816
- buf[n_masked].v = *(uint64_t *) (pi + k * istride);
7810
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
7817
7811
  buf[n_masked].i = outer_off + k * axis_vstride;
7818
7812
  n_masked++;
7819
7813
  }
7820
7814
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7821
7815
  if ( mi[k * mstride] ) continue;
7822
- buf[n_masked + n_valid].v = *(uint64_t *) (pi + k * istride);
7816
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
7823
7817
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
7824
7818
  n_valid++;
7825
7819
  }
@@ -7827,7 +7821,7 @@ partition_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7827
7821
  }
7828
7822
  } else {
7829
7823
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
7830
- buf[k].v = *(uint64_t *) (pi + k * istride);
7824
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
7831
7825
  buf[k].i = outer_off + k * axis_vstride;
7832
7826
  }
7833
7827
  sort_lo = 0; sort_n = fiber_n;
@@ -7863,7 +7857,7 @@ partition_addr_ki_native_u64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
7863
7857
  }
7864
7858
 
7865
7859
  typedef struct {
7866
- float v;
7860
+ ca_u_float32_t v;
7867
7861
  ca_size_t i;
7868
7862
  } partition_addr_pair_f32;
7869
7863
 
@@ -8010,13 +8004,13 @@ partition_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
8010
8004
  if ( masked_last ) {
8011
8005
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8012
8006
  if ( mi[k * mstride] ) continue;
8013
- buf[n_valid].v = *(float *) (pi + k * istride);
8007
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
8014
8008
  buf[n_valid].i = outer_off + k * axis_vstride;
8015
8009
  n_valid++;
8016
8010
  }
8017
8011
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8018
8012
  if ( ! mi[k * mstride] ) continue;
8019
- buf[n_valid + n_masked].v = *(float *) (pi + k * istride);
8013
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
8020
8014
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
8021
8015
  n_masked++;
8022
8016
  }
@@ -8024,13 +8018,13 @@ partition_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
8024
8018
  } else {
8025
8019
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8026
8020
  if ( ! mi[k * mstride] ) continue;
8027
- buf[n_masked].v = *(float *) (pi + k * istride);
8021
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
8028
8022
  buf[n_masked].i = outer_off + k * axis_vstride;
8029
8023
  n_masked++;
8030
8024
  }
8031
8025
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8032
8026
  if ( mi[k * mstride] ) continue;
8033
- buf[n_masked + n_valid].v = *(float *) (pi + k * istride);
8027
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
8034
8028
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
8035
8029
  n_valid++;
8036
8030
  }
@@ -8038,7 +8032,7 @@ partition_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
8038
8032
  }
8039
8033
  } else {
8040
8034
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8041
- buf[k].v = *(float *) (pi + k * istride);
8035
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
8042
8036
  buf[k].i = outer_off + k * axis_vstride;
8043
8037
  }
8044
8038
  sort_lo = 0; sort_n = fiber_n;
@@ -8074,7 +8068,7 @@ partition_addr_ki_native_f32 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
8074
8068
  }
8075
8069
 
8076
8070
  typedef struct {
8077
- double v;
8071
+ ca_u_float64_t v;
8078
8072
  ca_size_t i;
8079
8073
  } partition_addr_pair_f64;
8080
8074
 
@@ -8221,13 +8215,13 @@ partition_addr_ki_native_f64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
8221
8215
  if ( masked_last ) {
8222
8216
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8223
8217
  if ( mi[k * mstride] ) continue;
8224
- buf[n_valid].v = *(double *) (pi + k * istride);
8218
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
8225
8219
  buf[n_valid].i = outer_off + k * axis_vstride;
8226
8220
  n_valid++;
8227
8221
  }
8228
8222
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8229
8223
  if ( ! mi[k * mstride] ) continue;
8230
- buf[n_valid + n_masked].v = *(double *) (pi + k * istride);
8224
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
8231
8225
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
8232
8226
  n_masked++;
8233
8227
  }
@@ -8235,13 +8229,13 @@ partition_addr_ki_native_f64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
8235
8229
  } else {
8236
8230
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8237
8231
  if ( ! mi[k * mstride] ) continue;
8238
- buf[n_masked].v = *(double *) (pi + k * istride);
8232
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
8239
8233
  buf[n_masked].i = outer_off + k * axis_vstride;
8240
8234
  n_masked++;
8241
8235
  }
8242
8236
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8243
8237
  if ( mi[k * mstride] ) continue;
8244
- buf[n_masked + n_valid].v = *(double *) (pi + k * istride);
8238
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
8245
8239
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
8246
8240
  n_valid++;
8247
8241
  }
@@ -8249,7 +8243,7 @@ partition_addr_ki_native_f64 (VALUE self, CArray *ca, int axis, ca_size_t kth, i
8249
8243
  }
8250
8244
  } else {
8251
8245
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8252
- buf[k].v = *(double *) (pi + k * istride);
8246
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
8253
8247
  buf[k].i = outer_off + k * axis_vstride;
8254
8248
  }
8255
8249
  sort_lo = 0; sort_n = fiber_n;
@@ -8432,13 +8426,13 @@ partition_addr_ki_native_bool (VALUE self, CArray *ca, int axis, ca_size_t kth,
8432
8426
  if ( masked_last ) {
8433
8427
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8434
8428
  if ( mi[k * mstride] ) continue;
8435
- buf[n_valid].v = *(boolean8_t *) (pi + k * istride);
8429
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
8436
8430
  buf[n_valid].i = outer_off + k * axis_vstride;
8437
8431
  n_valid++;
8438
8432
  }
8439
8433
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8440
8434
  if ( ! mi[k * mstride] ) continue;
8441
- buf[n_valid + n_masked].v = *(boolean8_t *) (pi + k * istride);
8435
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
8442
8436
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
8443
8437
  n_masked++;
8444
8438
  }
@@ -8446,13 +8440,13 @@ partition_addr_ki_native_bool (VALUE self, CArray *ca, int axis, ca_size_t kth,
8446
8440
  } else {
8447
8441
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8448
8442
  if ( ! mi[k * mstride] ) continue;
8449
- buf[n_masked].v = *(boolean8_t *) (pi + k * istride);
8443
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
8450
8444
  buf[n_masked].i = outer_off + k * axis_vstride;
8451
8445
  n_masked++;
8452
8446
  }
8453
8447
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8454
8448
  if ( mi[k * mstride] ) continue;
8455
- buf[n_masked + n_valid].v = *(boolean8_t *) (pi + k * istride);
8449
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
8456
8450
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
8457
8451
  n_valid++;
8458
8452
  }
@@ -8460,7 +8454,7 @@ partition_addr_ki_native_bool (VALUE self, CArray *ca, int axis, ca_size_t kth,
8460
8454
  }
8461
8455
  } else {
8462
8456
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8463
- buf[k].v = *(boolean8_t *) (pi + k * istride);
8457
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
8464
8458
  buf[k].i = outer_off + k * axis_vstride;
8465
8459
  }
8466
8460
  sort_lo = 0; sort_n = fiber_n;
@@ -8667,13 +8661,13 @@ partition_addr_ki_native_object_body (VALUE arg)
8667
8661
  if ( masked_last ) {
8668
8662
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8669
8663
  if ( mi[k * mstride] ) continue;
8670
- buf[n_valid].v = *(VALUE *) (pi + k * istride);
8664
+ memcpy(&buf[n_valid].v, pi + k * istride, sizeof(buf[n_valid].v));
8671
8665
  buf[n_valid].i = outer_off + k * axis_vstride;
8672
8666
  n_valid++;
8673
8667
  }
8674
8668
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8675
8669
  if ( ! mi[k * mstride] ) continue;
8676
- buf[n_valid + n_masked].v = *(VALUE *) (pi + k * istride);
8670
+ memcpy(&buf[n_valid + n_masked].v, pi + k * istride, sizeof(buf[n_valid + n_masked].v));
8677
8671
  buf[n_valid + n_masked].i = outer_off + k * axis_vstride;
8678
8672
  n_masked++;
8679
8673
  }
@@ -8681,13 +8675,13 @@ partition_addr_ki_native_object_body (VALUE arg)
8681
8675
  } else {
8682
8676
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8683
8677
  if ( ! mi[k * mstride] ) continue;
8684
- buf[n_masked].v = *(VALUE *) (pi + k * istride);
8678
+ memcpy(&buf[n_masked].v, pi + k * istride, sizeof(buf[n_masked].v));
8685
8679
  buf[n_masked].i = outer_off + k * axis_vstride;
8686
8680
  n_masked++;
8687
8681
  }
8688
8682
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8689
8683
  if ( mi[k * mstride] ) continue;
8690
- buf[n_masked + n_valid].v = *(VALUE *) (pi + k * istride);
8684
+ memcpy(&buf[n_masked + n_valid].v, pi + k * istride, sizeof(buf[n_masked + n_valid].v));
8691
8685
  buf[n_masked + n_valid].i = outer_off + k * axis_vstride;
8692
8686
  n_valid++;
8693
8687
  }
@@ -8695,7 +8689,7 @@ partition_addr_ki_native_object_body (VALUE arg)
8695
8689
  }
8696
8690
  } else {
8697
8691
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
8698
- buf[k].v = *(VALUE *) (pi + k * istride);
8692
+ memcpy(&buf[k].v, pi + k * istride, sizeof(buf[k].v));
8699
8693
  buf[k].i = outer_off + k * axis_vstride;
8700
8694
  }
8701
8695
  sort_lo = 0; sort_n = fiber_n;
@@ -9068,7 +9062,7 @@ rank_index_ki_native_i8 (VALUE self, CArray *ca, int axis, int do_stable, int de
9068
9062
  ca_size_t k_unmasked = 0;
9069
9063
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9070
9064
  if ( mi && mi[k * mstride] ) continue;
9071
- buf[k_unmasked].v = *(int8_t *) (pi + k * istride);
9065
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9072
9066
  buf[k_unmasked].i = k;
9073
9067
  k_unmasked++;
9074
9068
  }
@@ -9199,7 +9193,7 @@ rank_index_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int de
9199
9193
  ca_size_t k_unmasked = 0;
9200
9194
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9201
9195
  if ( mi && mi[k * mstride] ) continue;
9202
- buf[k_unmasked].v = *(uint8_t *) (pi + k * istride);
9196
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9203
9197
  buf[k_unmasked].i = k;
9204
9198
  k_unmasked++;
9205
9199
  }
@@ -9274,7 +9268,7 @@ rank_index_ki_native_u8 (VALUE self, CArray *ca, int axis, int do_stable, int de
9274
9268
  }
9275
9269
 
9276
9270
  typedef struct {
9277
- int16_t v;
9271
+ ca_u_int16_t v;
9278
9272
  ca_size_t i;
9279
9273
  } rank_index_pair_i16;
9280
9274
 
@@ -9330,7 +9324,7 @@ rank_index_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int d
9330
9324
  ca_size_t k_unmasked = 0;
9331
9325
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9332
9326
  if ( mi && mi[k * mstride] ) continue;
9333
- buf[k_unmasked].v = *(int16_t *) (pi + k * istride);
9327
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9334
9328
  buf[k_unmasked].i = k;
9335
9329
  k_unmasked++;
9336
9330
  }
@@ -9405,7 +9399,7 @@ rank_index_ki_native_i16 (VALUE self, CArray *ca, int axis, int do_stable, int d
9405
9399
  }
9406
9400
 
9407
9401
  typedef struct {
9408
- uint16_t v;
9402
+ ca_u_uint16_t v;
9409
9403
  ca_size_t i;
9410
9404
  } rank_index_pair_u16;
9411
9405
 
@@ -9461,7 +9455,7 @@ rank_index_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int d
9461
9455
  ca_size_t k_unmasked = 0;
9462
9456
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9463
9457
  if ( mi && mi[k * mstride] ) continue;
9464
- buf[k_unmasked].v = *(uint16_t *) (pi + k * istride);
9458
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9465
9459
  buf[k_unmasked].i = k;
9466
9460
  k_unmasked++;
9467
9461
  }
@@ -9536,7 +9530,7 @@ rank_index_ki_native_u16 (VALUE self, CArray *ca, int axis, int do_stable, int d
9536
9530
  }
9537
9531
 
9538
9532
  typedef struct {
9539
- int32_t v;
9533
+ ca_u_int32_t v;
9540
9534
  ca_size_t i;
9541
9535
  } rank_index_pair_i32;
9542
9536
 
@@ -9592,7 +9586,7 @@ rank_index_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int d
9592
9586
  ca_size_t k_unmasked = 0;
9593
9587
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9594
9588
  if ( mi && mi[k * mstride] ) continue;
9595
- buf[k_unmasked].v = *(int32_t *) (pi + k * istride);
9589
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9596
9590
  buf[k_unmasked].i = k;
9597
9591
  k_unmasked++;
9598
9592
  }
@@ -9667,7 +9661,7 @@ rank_index_ki_native_i32 (VALUE self, CArray *ca, int axis, int do_stable, int d
9667
9661
  }
9668
9662
 
9669
9663
  typedef struct {
9670
- uint32_t v;
9664
+ ca_u_uint32_t v;
9671
9665
  ca_size_t i;
9672
9666
  } rank_index_pair_u32;
9673
9667
 
@@ -9723,7 +9717,7 @@ rank_index_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int d
9723
9717
  ca_size_t k_unmasked = 0;
9724
9718
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9725
9719
  if ( mi && mi[k * mstride] ) continue;
9726
- buf[k_unmasked].v = *(uint32_t *) (pi + k * istride);
9720
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9727
9721
  buf[k_unmasked].i = k;
9728
9722
  k_unmasked++;
9729
9723
  }
@@ -9798,7 +9792,7 @@ rank_index_ki_native_u32 (VALUE self, CArray *ca, int axis, int do_stable, int d
9798
9792
  }
9799
9793
 
9800
9794
  typedef struct {
9801
- int64_t v;
9795
+ ca_u_int64_t v;
9802
9796
  ca_size_t i;
9803
9797
  } rank_index_pair_i64;
9804
9798
 
@@ -9854,7 +9848,7 @@ rank_index_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int d
9854
9848
  ca_size_t k_unmasked = 0;
9855
9849
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9856
9850
  if ( mi && mi[k * mstride] ) continue;
9857
- buf[k_unmasked].v = *(int64_t *) (pi + k * istride);
9851
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9858
9852
  buf[k_unmasked].i = k;
9859
9853
  k_unmasked++;
9860
9854
  }
@@ -9929,7 +9923,7 @@ rank_index_ki_native_i64 (VALUE self, CArray *ca, int axis, int do_stable, int d
9929
9923
  }
9930
9924
 
9931
9925
  typedef struct {
9932
- uint64_t v;
9926
+ ca_u_uint64_t v;
9933
9927
  ca_size_t i;
9934
9928
  } rank_index_pair_u64;
9935
9929
 
@@ -9985,7 +9979,7 @@ rank_index_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int d
9985
9979
  ca_size_t k_unmasked = 0;
9986
9980
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
9987
9981
  if ( mi && mi[k * mstride] ) continue;
9988
- buf[k_unmasked].v = *(uint64_t *) (pi + k * istride);
9982
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
9989
9983
  buf[k_unmasked].i = k;
9990
9984
  k_unmasked++;
9991
9985
  }
@@ -10060,7 +10054,7 @@ rank_index_ki_native_u64 (VALUE self, CArray *ca, int axis, int do_stable, int d
10060
10054
  }
10061
10055
 
10062
10056
  typedef struct {
10063
- float v;
10057
+ ca_u_float32_t v;
10064
10058
  ca_size_t i;
10065
10059
  } rank_index_pair_f32;
10066
10060
 
@@ -10116,7 +10110,7 @@ rank_index_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int d
10116
10110
  ca_size_t k_unmasked = 0;
10117
10111
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
10118
10112
  if ( mi && mi[k * mstride] ) continue;
10119
- buf[k_unmasked].v = *(float *) (pi + k * istride);
10113
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
10120
10114
  buf[k_unmasked].i = k;
10121
10115
  k_unmasked++;
10122
10116
  }
@@ -10197,7 +10191,7 @@ rank_index_ki_native_f32 (VALUE self, CArray *ca, int axis, int do_stable, int d
10197
10191
  }
10198
10192
 
10199
10193
  typedef struct {
10200
- double v;
10194
+ ca_u_float64_t v;
10201
10195
  ca_size_t i;
10202
10196
  } rank_index_pair_f64;
10203
10197
 
@@ -10253,7 +10247,7 @@ rank_index_ki_native_f64 (VALUE self, CArray *ca, int axis, int do_stable, int d
10253
10247
  ca_size_t k_unmasked = 0;
10254
10248
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
10255
10249
  if ( mi && mi[k * mstride] ) continue;
10256
- buf[k_unmasked].v = *(double *) (pi + k * istride);
10250
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
10257
10251
  buf[k_unmasked].i = k;
10258
10252
  k_unmasked++;
10259
10253
  }
@@ -10390,7 +10384,7 @@ rank_index_ki_native_bool (VALUE self, CArray *ca, int axis, int do_stable, int
10390
10384
  ca_size_t k_unmasked = 0;
10391
10385
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
10392
10386
  if ( mi && mi[k * mstride] ) continue;
10393
- buf[k_unmasked].v = *(boolean8_t *) (pi + k * istride);
10387
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
10394
10388
  buf[k_unmasked].i = k;
10395
10389
  k_unmasked++;
10396
10390
  }
@@ -10555,7 +10549,7 @@ rank_index_ki_native_object_body (VALUE arg)
10555
10549
  ca_size_t k_unmasked = 0;
10556
10550
  for ( ca_size_t k = 0; k < fiber_n; k++ ) {
10557
10551
  if ( mi && mi[k * mstride] ) continue;
10558
- buf[k_unmasked].v = *(VALUE *) (pi + k * istride);
10552
+ memcpy(&buf[k_unmasked].v, pi + k * istride, sizeof(buf[k_unmasked].v));
10559
10553
  buf[k_unmasked].i = k;
10560
10554
  k_unmasked++;
10561
10555
  }
@@ -10697,10 +10691,7 @@ rank_index_ki_native_fixlen (VALUE self, CArray *ca, int axis, int do_stable, in
10697
10691
  ca_size_t fiber_n = st_in.slab_elements;
10698
10692
  volatile VALUE hbuf = 0, haux = 0;
10699
10693
  rank_index_pair_fixlen *buf = ALLOCV_N(rank_index_pair_fixlen, hbuf, fiber_n);
10700
- rank_index_pair_fixlen *aux = NULL;
10701
- if ( do_stable ) {
10702
- aux = ALLOCV_N(rank_index_pair_fixlen, haux, fiber_n);
10703
- }
10694
+ (void) haux;
10704
10695
 
10705
10696
  char *pi, *po;
10706
10697
  boolean8_t *mi, *mo;