@@ -92,19 +92,17 @@ quad_generic_binop_strided_loop_unaligned(PyArrayMethod_Context *context, char *
9292
9393 QuadPrecDTypeObject *descr = (QuadPrecDTypeObject *)context->descriptors [0 ];
9494 QuadBackendType backend = descr->backend ;
95- size_t elem_size = (backend == BACKEND_SLEEF ) ? sizeof (Sleef_quad) : sizeof (long double );
96-
9795 quad_value in1, in2, out;
9896 while (N--) {
99- memcpy (&in1, in1_ptr, elem_size );
100- memcpy (&in2, in2_ptr, elem_size );
97+ quad_value_load (&in1, in1_ptr, backend );
98+ quad_value_load (&in2, in2_ptr, backend );
10199 if (backend == BACKEND_SLEEF ) {
102100 out.sleef_value = sleef_op (&in1.sleef_value , &in2.sleef_value );
103101 }
104102 else {
105103 out.longdouble_value = longdouble_op (&in1.longdouble_value , &in2.longdouble_value );
106104 }
107- memcpy (out_ptr, &out, elem_size );
105+ quad_value_store (out_ptr, &out, backend );
108106
109107 in1_ptr += in1_stride;
110108 in2_ptr += in2_stride;
@@ -134,7 +132,8 @@ quad_generic_binop_strided_loop_aligned(PyArrayMethod_Context *context, char *co
134132 *(Sleef_quad *)out_ptr = sleef_op ((Sleef_quad *)in1_ptr, (Sleef_quad *)in2_ptr);
135133 }
136134 else {
137- *(long double *)out_ptr = longdouble_op ((long double *)in1_ptr, (long double *)in2_ptr);
135+ quad_longdouble_store_aligned (
136+ out_ptr, longdouble_op ((long double *)in1_ptr, (long double *)in2_ptr));
138137 }
139138
140139 in1_ptr += in1_stride;
@@ -222,21 +221,19 @@ quad_generic_binop_2out_strided_loop_unaligned(PyArrayMethod_Context *context, c
222221
223222 QuadPrecDTypeObject *descr = (QuadPrecDTypeObject *)context->descriptors [0 ];
224223 QuadBackendType backend = descr->backend ;
225- size_t elem_size = (backend == BACKEND_SLEEF ) ? sizeof (Sleef_quad) : sizeof (long double );
226-
227224 quad_value in1, in2, out1, out2;
228225 while (N--) {
229- memcpy (&in1, in1_ptr, elem_size );
230- memcpy (&in2, in2_ptr, elem_size );
226+ quad_value_load (&in1, in1_ptr, backend );
227+ quad_value_load (&in2, in2_ptr, backend );
231228 if (backend == BACKEND_SLEEF ) {
232229 sleef_op (&in1.sleef_value , &in2.sleef_value , &out1.sleef_value , &out2.sleef_value );
233230 }
234231 else {
235232 longdouble_op (&in1.longdouble_value , &in2.longdouble_value ,
236233 &out1.longdouble_value , &out2.longdouble_value );
237234 }
238- memcpy (out1_ptr, &out1, elem_size );
239- memcpy (out2_ptr, &out2, elem_size );
235+ quad_value_store (out1_ptr, &out1, backend );
236+ quad_value_store (out2_ptr, &out2, backend );
240237
241238 in1_ptr += in1_stride;
242239 in2_ptr += in2_stride;
@@ -270,8 +267,10 @@ quad_generic_binop_2out_strided_loop_aligned(PyArrayMethod_Context *context, cha
270267 (Sleef_quad *)out1_ptr, (Sleef_quad *)out2_ptr);
271268 }
272269 else {
273- longdouble_op ((long double *)in1_ptr, (long double *)in2_ptr,
274- (long double *)out1_ptr, (long double *)out2_ptr);
270+ long double out1, out2;
271+ longdouble_op ((long double *)in1_ptr, (long double *)in2_ptr, &out1, &out2);
272+ quad_longdouble_store_aligned (out1_ptr, out1);
273+ quad_longdouble_store_aligned (out2_ptr, out2);
275274 }
276275
277276 in1_ptr += in1_stride;
@@ -338,12 +337,10 @@ quad_ldexp_strided_loop_unaligned(PyArrayMethod_Context *context, char *const da
338337
339338 QuadPrecDTypeObject *descr = (QuadPrecDTypeObject *)context->descriptors [0 ];
340339 QuadBackendType backend = descr->backend ;
341- size_t elem_size = (backend == BACKEND_SLEEF ) ? sizeof (Sleef_quad) : sizeof (long double );
342-
343340 quad_value in1, out;
344341 npy_intp in2_intp; // Platform-native integer (int64 on 64-bit, int32 on 32-bit)
345342 while (N--) {
346- memcpy (&in1, in1_ptr, elem_size );
343+ quad_value_load (&in1, in1_ptr, backend );
347344 memcpy (&in2_intp, in2_ptr, sizeof (npy_intp));
348345
349346 int exp_value = (int )in2_intp;
@@ -353,7 +350,7 @@ quad_ldexp_strided_loop_unaligned(PyArrayMethod_Context *context, char *const da
353350 } else {
354351 out.longdouble_value = longdouble_op (&in1.longdouble_value , &exp_value);
355352 }
356- memcpy (out_ptr, &out, elem_size );
353+ quad_value_store (out_ptr, &out, backend );
357354
358355 in1_ptr += in1_stride;
359356 in2_ptr += in2_stride;
@@ -387,7 +384,8 @@ quad_ldexp_strided_loop_aligned(PyArrayMethod_Context *context, char *const data
387384 if (backend == BACKEND_SLEEF ) {
388385 *(Sleef_quad *)out_ptr = sleef_op ((Sleef_quad *)in1_ptr, &exp_value);
389386 } else {
390- *(long double *)out_ptr = longdouble_op ((long double *)in1_ptr, &exp_value);
387+ quad_longdouble_store_aligned (
388+ out_ptr, longdouble_op ((long double *)in1_ptr, &exp_value));
391389 }
392390
393391 in1_ptr += in1_stride;
0 commit comments