@@ -216,6 +216,10 @@ NPY_FINLINE npyv_u8x3 npyv_divisor_u8(npy_uint8 d)
216216 divisor .val [0 ] = npyv_setall_u8 (m );
217217 divisor .val [1 ] = npyv_reinterpret_u8_s8 (npyv_setall_s8 (- sh1 ));
218218 divisor .val [2 ] = npyv_reinterpret_u8_s8 (npyv_setall_s8 (- sh2 ));
219+ #elif defined(NPY_HAVE_LSX )
220+ divisor .val [0 ] = npyv_setall_u16 (m );
221+ divisor .val [1 ] = npyv_setall_u8 (sh1 );
222+ divisor .val [2 ] = npyv_setall_u8 (sh2 );
219223#else
220224 #error "please initialize the shifting operand for the new architecture"
221225#endif
@@ -225,7 +229,7 @@ NPY_FINLINE npyv_u8x3 npyv_divisor_u8(npy_uint8 d)
225229NPY_FINLINE npyv_s16x3 npyv_divisor_s16 (npy_int16 d );
226230NPY_FINLINE npyv_s8x3 npyv_divisor_s8 (npy_int8 d )
227231{
228- #ifdef NPY_HAVE_SSE2 // SSE/AVX2/AVX512
232+ #if defined( NPY_HAVE_SSE2 ) || defined( NPY_HAVE_LSX ) // SSE/AVX2/AVX512
229233 npyv_s16x3 p = npyv_divisor_s16 (d );
230234 npyv_s8x3 r ;
231235 r .val [0 ] = npyv_reinterpret_s8_s16 (p .val [0 ]);
@@ -291,6 +295,9 @@ NPY_FINLINE npyv_u16x3 npyv_divisor_u16(npy_uint16 d)
291295#elif defined(NPY_HAVE_NEON )
292296 divisor .val [1 ] = npyv_reinterpret_u16_s16 (npyv_setall_s16 (- sh1 ));
293297 divisor .val [2 ] = npyv_reinterpret_u16_s16 (npyv_setall_s16 (- sh2 ));
298+ #elif defined(NPY_HAVE_LSX )
299+ divisor .val [1 ] = npyv_setall_u16 (sh1 );
300+ divisor .val [2 ] = npyv_setall_u16 (sh2 );
294301#else
295302 #error "please initialize the shifting operand for the new architecture"
296303#endif
@@ -321,6 +328,8 @@ NPY_FINLINE npyv_s16x3 npyv_divisor_s16(npy_int16 d)
321328 divisor .val [1 ] = npyv_setall_s16 (sh );
322329#elif defined(NPY_HAVE_NEON )
323330 divisor .val [1 ] = npyv_setall_s16 (- sh );
331+ #elif defined(NPY_HAVE_LSX )
332+ divisor .val [1 ] = npyv_setall_s16 (sh );
324333#else
325334 #error "please initialize the shifting operand for the new architecture"
326335#endif
@@ -358,6 +367,9 @@ NPY_FINLINE npyv_u32x3 npyv_divisor_u32(npy_uint32 d)
358367#elif defined(NPY_HAVE_NEON )
359368 divisor .val [1 ] = npyv_reinterpret_u32_s32 (npyv_setall_s32 (- sh1 ));
360369 divisor .val [2 ] = npyv_reinterpret_u32_s32 (npyv_setall_s32 (- sh2 ));
370+ #elif defined(NPY_HAVE_LSX )
371+ divisor .val [1 ] = npyv_setall_u32 (sh1 );
372+ divisor .val [2 ] = npyv_setall_u32 (sh2 );
361373#else
362374 #error "please initialize the shifting operand for the new architecture"
363375#endif
@@ -393,6 +405,8 @@ NPY_FINLINE npyv_s32x3 npyv_divisor_s32(npy_int32 d)
393405 divisor .val [1 ] = npyv_setall_s32 (sh );
394406#elif defined(NPY_HAVE_NEON )
395407 divisor .val [1 ] = npyv_setall_s32 (- sh );
408+ #elif defined(NPY_HAVE_LSX )
409+ divisor .val [1 ] = npyv_setall_s32 (sh );
396410#else
397411 #error "please initialize the shifting operand for the new architecture"
398412#endif
@@ -427,6 +441,9 @@ NPY_FINLINE npyv_u64x3 npyv_divisor_u64(npy_uint64 d)
427441 #ifdef NPY_HAVE_SSE2 // SSE/AVX2/AVX512
428442 divisor .val [1 ] = npyv_set_u64 (sh1 );
429443 divisor .val [2 ] = npyv_set_u64 (sh2 );
444+ #elif defined(NPY_HAVE_LSX )
445+ divisor .val [1 ] = npyv_setall_u64 (sh1 );
446+ divisor .val [2 ] = npyv_setall_u64 (sh2 );
430447 #else
431448 #error "please initialize the shifting operand for the new architecture"
432449 #endif
@@ -465,6 +482,8 @@ NPY_FINLINE npyv_s64x3 npyv_divisor_s64(npy_int64 d)
465482 divisor .val [2 ] = npyv_setall_s64 (d < 0 ? -1 : 0 ); // sign of divisor
466483 #ifdef NPY_HAVE_SSE2 // SSE/AVX2/AVX512
467484 divisor .val [1 ] = npyv_set_s64 (sh );
485+ #elif defined(NPY_HAVE_LSX )
486+ divisor .val [1 ] = npyv_setall_s64 (sh );
468487 #else
469488 #error "please initialize the shifting operand for the new architecture"
470489 #endif
0 commit comments