@@ -633,7 +633,51 @@ quad_generic_comp_strided_loop(PyArrayMethod_Context *context, char *const data[
633
633
result = ld_comp (&in1.longdouble_value , &in2.longdouble_value );
634
634
}
635
635
636
- *((npy_bool *)out_ptr) = result;
636
+ memcpy (out_ptr, &result, sizeof (npy_bool));
637
+
638
+ in1_ptr += in1_stride;
639
+ in2_ptr += in2_stride;
640
+ out_ptr += out_stride;
641
+ }
642
+ return 0 ;
643
+ }
644
+
645
+
646
+ template <cmp_quad_def sleef_comp, cmp_londouble_def ld_comp>
647
+ int
648
+ quad_generic_comp_strided_loop_aligned (PyArrayMethod_Context *context, char *const data[],
649
+ npy_intp const dimensions[], npy_intp const strides[],
650
+ NpyAuxData *auxdata)
651
+ {
652
+ npy_intp N = dimensions[0 ];
653
+ char *in1_ptr = data[0 ], *in2_ptr = data[1 ];
654
+ char *out_ptr = data[2 ];
655
+ npy_intp in1_stride = strides[0 ];
656
+ npy_intp in2_stride = strides[1 ];
657
+ npy_intp out_stride = strides[2 ];
658
+
659
+ QuadPrecDTypeObject *descr = (QuadPrecDTypeObject *)context->descriptors [0 ];
660
+ QuadBackendType backend = descr->backend ;
661
+ size_t elem_size = (backend == BACKEND_SLEEF) ? sizeof (Sleef_quad) : sizeof (long double );
662
+
663
+ quad_value in1, in2;
664
+ while (N--)
665
+ {
666
+ quad_value in1 = *(quad_value *)in1_ptr;
667
+ quad_value in2 = *(quad_value *)in2_ptr;
668
+
669
+ npy_bool result;
670
+
671
+ if (backend == BACKEND_SLEEF)
672
+ {
673
+ result = sleef_comp (&in1.sleef_value , &in2.sleef_value );
674
+ }
675
+ else
676
+ {
677
+ result = ld_comp (&in1.longdouble_value , &in2.longdouble_value );
678
+ }
679
+
680
+ *(npy_bool *)out_ptr = result;
637
681
638
682
in1_ptr += in1_stride;
639
683
in2_ptr += in2_stride;
@@ -670,7 +714,7 @@ create_quad_comparison_ufunc(PyObject *numpy, const char *ufunc_name)
670
714
671
715
PyType_Slot slots[] = {
672
716
{NPY_METH_resolve_descriptors, (void *)&quad_comparison_op_resolve_descriptors},
673
- {NPY_METH_strided_loop, (void *)&quad_generic_comp_strided_loop <sleef_comp, ld_comp>},
717
+ {NPY_METH_strided_loop, (void *)&quad_generic_comp_strided_loop_aligned <sleef_comp, ld_comp>},
674
718
{NPY_METH_unaligned_strided_loop,
675
719
(void *)&quad_generic_comp_strided_loop<sleef_comp, ld_comp>},
676
720
{0 , NULL }};
0 commit comments