diff options
| author | ganesh-k13 <ganesh3597@gmail.com> | 2022-06-18 10:12:39 +0530 |
|---|---|---|
| committer | ganesh-k13 <ganesh3597@gmail.com> | 2022-07-01 09:50:24 +0530 |
| commit | 960f015f3ed9f251897291b2e6423d1d4eae9efc (patch) | |
| tree | 1b63b5aaa93e9469e715f2a2e3caea882dab3fc8 /numpy | |
| parent | 251695ec57d98b9bf5bf1a2e76b686e9f10ddf29 (diff) | |
| download | numpy-960f015f3ed9f251897291b2e6423d1d4eae9efc.tar.gz | |
SIMD: Removed cvtozero
Co-authored-by: Rafael Cardoso Fernandes Sousa <rafaelcfsousa@ibm.com>
Diffstat (limited to 'numpy')
| -rw-r--r-- | numpy/core/src/umath/loops_modulo.dispatch.c.src | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/numpy/core/src/umath/loops_modulo.dispatch.c.src b/numpy/core/src/umath/loops_modulo.dispatch.c.src index 49a0ca9b5..ab436af6c 100644 --- a/numpy/core/src/umath/loops_modulo.dispatch.c.src +++ b/numpy/core/src/umath/loops_modulo.dispatch.c.src @@ -181,7 +181,6 @@ vsx4_simd_@func@_contig_@sfx@(char **args, npy_intp len) const int vstep = npyv_nlanes_@sfx@; #if @id@ == 2 /* divmod */ npyv_lanetype_@sfx@ *dst2 = (npyv_lanetype_@sfx@ *) args[3]; - const npyv_@sfx@ vneg_one = npyv_setall_@sfx@(-1); npyv_b@len@ warn = npyv_cvt_b@len@_@sfx@(npyv_zero_@sfx@()); for (; len >= vstep; len -= vstep, src1 += vstep, src2 += vstep, @@ -191,11 +190,11 @@ vsx4_simd_@func@_contig_@sfx@(char **args, npy_intp len) npyv_@sfx@ quo = vsx4_div_@sfx@(a, b); npyv_@sfx@ rem = npyv_sub_@sfx@(a, vec_mul(b, quo)); npyv_b@len@ bzero = npyv_cmpeq_@sfx@(b, vzero); - // when b is 0, 'cvtozero' forces the modulo to be 0 too - npyv_@sfx@ cvtozero = npyv_select_@sfx@(bzero, vzero, vneg_one); + // when b is 0, forces the remainder to be 0 too + rem = npyv_select_@sfx@(bzero, vzero, rem); warn = npyv_or_@sfx@(bzero, warn); npyv_store_@sfx@(dst1, quo); - npyv_store_@sfx@(dst2, npyv_and_@sfx@(cvtozero, rem)); + npyv_store_@sfx@(dst2, rem); } if (!vec_all_eq(warn, vzero)) { @@ -345,10 +344,12 @@ vsx4_simd_@func@_contig_@sfx@(char **args, npy_intp len) quo = npyv_add_@sfx@(quo, to_sub); // Divide by zero quo = npyv_select_@sfx@(bzero, vzero, quo); + rem = npyv_select_@sfx@(bzero, vzero, rem); // Overflow quo = npyv_select_@sfx@(overflow, vmin, quo); + rem = npyv_select_@sfx@(overflow, vzero, rem); npyv_store_@sfx@(dst1, quo); - npyv_store_@sfx@(dst2, npyv_and_@sfx@(cvtozero, rem)); + npyv_store_@sfx@(dst2, rem); #else /* fmod and remainder */ npyv_store_@sfx@(dst1, rem); if (NPY_UNLIKELY(vec_any_eq(b, vzero))) { @@ -460,7 +461,7 @@ vsx4_simd_@func@_by_scalar_contig_@sfx@(char **args, npy_intp len) quo = npyv_add_@sfx@(quo, to_sub); // Overflow: set quo to minimum and rem to 0 quo = npyv_select_@sfx@(overflow, vmin, quo); - rem = npyv_select_@sfx@(overflow, vzero, quo); + rem = npyv_select_@sfx@(overflow, vzero, rem); npyv_store_@sfx@(dst1, quo); npyv_store_@sfx@(dst2, rem); #else /* fmod and remainder */ |
