re PR fortran/54613 ([F08] Add FINDLOC plus support MAXLOC/MINLOC with KIND=/BACK=)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 8 May 2018 07:47:19 +0000 (07:47 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 8 May 2018 07:47:19 +0000 (07:47 +0000)
2018-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/54613
* check.c (gfc_check_minmaxloc): Remove error for BACK not being
implemented.  Use gfc_logical_4_kind for BACK.
* simplify.c (min_max_choose): Add optional argument back_val.
Handle it.
(simplify_minmaxloc_to_scalar): Add argument back_val. Pass
back_val to min_max_choose.
(simplify_minmaxloc_to_nodim): Likewise.
(simplify_minmaxloc_to_array): Likewise.
(gfc_simplify_minmaxloc): Add argument back, handle it.
Pass back_val to specific simplification functions.
(gfc_simplify_minloc): Remove ATTRIBUTE_UNUSED from argument back,
pass it on to gfc_simplify_minmaxloc.
(gfc_simplify_maxloc): Likewise.
* trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Adjust
comment. If BACK is true, use greater or equal (or lesser or
equal) insteal of greater (or lesser). Mark the condition of
having found a value which exceeds the limit as unlikely.

2018-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/54613
* m4/iforeach-s.m4: Remove assertion that back is zero.
* m4/iforeach.m4: Likewise.  Remove leading 'do'
before implementation start.
* m4/ifunction-s.m4: Remove assertion that back is zero.
* m4/ifunction.m4: Likewise.  Remove for loop if HAVE_BACK_ARG
is defined.
* m4/maxloc0.m4: Reorganize loops. Split loops between >= and =,
depending if back is true.  Mark the condition of having
found a value which exceeds the limit as unlikely.
* m4/minloc0.m4: Likewise.
* m4/maxloc1.m4: Likewise.
* m4/minloc1.m4: Likewise.
* m4/maxloc1s.m4: Handle back argument.
* m4/minloc1s.m4: Likewise.
* m4/maxloc2s.m4: Remove assertion that back is zero.
Remove special handling of loop start. Handle back argument.
* m4/minloc2s.m4: Likewise.
* generated/iall_i1.c: Regenerated.
* generated/iall_i16.c: Regenerated.
* generated/iall_i2.c: Regenerated.
* generated/iall_i4.c: Regenerated.
* generated/iall_i8.c: Regenerated.
* generated/iany_i1.c: Regenerated.
* generated/iany_i16.c: Regenerated.
* generated/iany_i2.c: Regenerated.
* generated/iany_i4.c: Regenerated.
* generated/iany_i8.c: Regenerated.
* generated/iparity_i1.c: Regenerated.
* generated/iparity_i16.c: Regenerated.
* generated/iparity_i2.c: Regenerated.
* generated/iparity_i4.c: Regenerated.
* generated/iparity_i8.c: Regenerated.
* generated/maxloc0_16_i1.c: Regenerated.
* generated/maxloc0_16_i16.c: Regenerated.
* generated/maxloc0_16_i2.c: Regenerated.
* generated/maxloc0_16_i4.c: Regenerated.
* generated/maxloc0_16_i8.c: Regenerated.
* generated/maxloc0_16_r10.c: Regenerated.
* generated/maxloc0_16_r16.c: Regenerated.
* generated/maxloc0_16_r4.c: Regenerated.
* generated/maxloc0_16_r8.c: Regenerated.
* generated/maxloc0_16_s1.c: Regenerated.
* generated/maxloc0_16_s4.c: Regenerated.
* generated/maxloc0_4_i1.c: Regenerated.
* generated/maxloc0_4_i16.c: Regenerated.
* generated/maxloc0_4_i2.c: Regenerated.
* generated/maxloc0_4_i4.c: Regenerated.
* generated/maxloc0_4_i8.c: Regenerated.
* generated/maxloc0_4_r10.c: Regenerated.
* generated/maxloc0_4_r16.c: Regenerated.
* generated/maxloc0_4_r4.c: Regenerated.
* generated/maxloc0_4_r8.c: Regenerated.
* generated/maxloc0_4_s1.c: Regenerated.
* generated/maxloc0_4_s4.c: Regenerated.
* generated/maxloc0_8_i1.c: Regenerated.
* generated/maxloc0_8_i16.c: Regenerated.
* generated/maxloc0_8_i2.c: Regenerated.
* generated/maxloc0_8_i4.c: Regenerated.
* generated/maxloc0_8_i8.c: Regenerated.
* generated/maxloc0_8_r10.c: Regenerated.
* generated/maxloc0_8_r16.c: Regenerated.
* generated/maxloc0_8_r4.c: Regenerated.
* generated/maxloc0_8_r8.c: Regenerated.
* generated/maxloc0_8_s1.c: Regenerated.
* generated/maxloc0_8_s4.c: Regenerated.
* generated/maxloc1_16_i1.c: Regenerated.
* generated/maxloc1_16_i16.c: Regenerated.
* generated/maxloc1_16_i2.c: Regenerated.
* generated/maxloc1_16_i4.c: Regenerated.
* generated/maxloc1_16_i8.c: Regenerated.
* generated/maxloc1_16_r10.c: Regenerated.
* generated/maxloc1_16_r16.c: Regenerated.
* generated/maxloc1_16_r4.c: Regenerated.
* generated/maxloc1_16_r8.c: Regenerated.
* generated/maxloc1_16_s1.c: Regenerated.
* generated/maxloc1_16_s4.c: Regenerated.
* generated/maxloc1_4_i1.c: Regenerated.
* generated/maxloc1_4_i16.c: Regenerated.
* generated/maxloc1_4_i2.c: Regenerated.
* generated/maxloc1_4_i4.c: Regenerated.
* generated/maxloc1_4_i8.c: Regenerated.
* generated/maxloc1_4_r10.c: Regenerated.
* generated/maxloc1_4_r16.c: Regenerated.
* generated/maxloc1_4_r4.c: Regenerated.
* generated/maxloc1_4_r8.c: Regenerated.
* generated/maxloc1_4_s1.c: Regenerated.
* generated/maxloc1_4_s4.c: Regenerated.
* generated/maxloc1_8_i1.c: Regenerated.
* generated/maxloc1_8_i16.c: Regenerated.
* generated/maxloc1_8_i2.c: Regenerated.
* generated/maxloc1_8_i4.c: Regenerated.
* generated/maxloc1_8_i8.c: Regenerated.
* generated/maxloc1_8_r10.c: Regenerated.
* generated/maxloc1_8_r16.c: Regenerated.
* generated/maxloc1_8_r4.c: Regenerated.
* generated/maxloc1_8_r8.c: Regenerated.
* generated/maxloc1_8_s1.c: Regenerated.
* generated/maxloc1_8_s4.c: Regenerated.
* generated/maxloc2_16_s1.c: Regenerated.
* generated/maxloc2_16_s4.c: Regenerated.
* generated/maxloc2_4_s1.c: Regenerated.
* generated/maxloc2_4_s4.c: Regenerated.
* generated/maxloc2_8_s1.c: Regenerated.
* generated/maxloc2_8_s4.c: Regenerated.
* generated/maxval_i1.c: Regenerated.
* generated/maxval_i16.c: Regenerated.
* generated/maxval_i2.c: Regenerated.
* generated/maxval_i4.c: Regenerated.
* generated/maxval_i8.c: Regenerated.
* generated/maxval_r10.c: Regenerated.
* generated/maxval_r16.c: Regenerated.
* generated/maxval_r4.c: Regenerated.
* generated/maxval_r8.c: Regenerated.
* generated/minloc0_16_i1.c: Regenerated.
* generated/minloc0_16_i16.c: Regenerated.
* generated/minloc0_16_i2.c: Regenerated.
* generated/minloc0_16_i4.c: Regenerated.
* generated/minloc0_16_i8.c: Regenerated.
* generated/minloc0_16_r10.c: Regenerated.
* generated/minloc0_16_r16.c: Regenerated.
* generated/minloc0_16_r4.c: Regenerated.
* generated/minloc0_16_r8.c: Regenerated.
* generated/minloc0_16_s1.c: Regenerated.
* generated/minloc0_16_s4.c: Regenerated.
* generated/minloc0_4_i1.c: Regenerated.
* generated/minloc0_4_i16.c: Regenerated.
* generated/minloc0_4_i2.c: Regenerated.
* generated/minloc0_4_i4.c: Regenerated.
* generated/minloc0_4_i8.c: Regenerated.
* generated/minloc0_4_r10.c: Regenerated.
* generated/minloc0_4_r16.c: Regenerated.
* generated/minloc0_4_r4.c: Regenerated.
* generated/minloc0_4_r8.c: Regenerated.
* generated/minloc0_4_s1.c: Regenerated.
* generated/minloc0_4_s4.c: Regenerated.
* generated/minloc0_8_i1.c: Regenerated.
* generated/minloc0_8_i16.c: Regenerated.
* generated/minloc0_8_i2.c: Regenerated.
* generated/minloc0_8_i4.c: Regenerated.
* generated/minloc0_8_i8.c: Regenerated.
* generated/minloc0_8_r10.c: Regenerated.
* generated/minloc0_8_r16.c: Regenerated.
* generated/minloc0_8_r4.c: Regenerated.
* generated/minloc0_8_r8.c: Regenerated.
* generated/minloc0_8_s1.c: Regenerated.
* generated/minloc0_8_s4.c: Regenerated.
* generated/minloc1_16_i1.c: Regenerated.
* generated/minloc1_16_i16.c: Regenerated.
* generated/minloc1_16_i2.c: Regenerated.
* generated/minloc1_16_i4.c: Regenerated.
* generated/minloc1_16_i8.c: Regenerated.
* generated/minloc1_16_r10.c: Regenerated.
* generated/minloc1_16_r16.c: Regenerated.
* generated/minloc1_16_r4.c: Regenerated.
* generated/minloc1_16_r8.c: Regenerated.
* generated/minloc1_16_s1.c: Regenerated.
* generated/minloc1_16_s4.c: Regenerated.
* generated/minloc1_4_i1.c: Regenerated.
* generated/minloc1_4_i16.c: Regenerated.
* generated/minloc1_4_i2.c: Regenerated.
* generated/minloc1_4_i4.c: Regenerated.
* generated/minloc1_4_i8.c: Regenerated.
* generated/minloc1_4_r10.c: Regenerated.
* generated/minloc1_4_r16.c: Regenerated.
* generated/minloc1_4_r4.c: Regenerated.
* generated/minloc1_4_r8.c: Regenerated.
* generated/minloc1_4_s1.c: Regenerated.
* generated/minloc1_4_s4.c: Regenerated.
* generated/minloc1_8_i1.c: Regenerated.
* generated/minloc1_8_i16.c: Regenerated.
* generated/minloc1_8_i2.c: Regenerated.
* generated/minloc1_8_i4.c: Regenerated.
* generated/minloc1_8_i8.c: Regenerated.
* generated/minloc1_8_r10.c: Regenerated.
* generated/minloc1_8_r16.c: Regenerated.
* generated/minloc1_8_r4.c: Regenerated.
* generated/minloc1_8_r8.c: Regenerated.
* generated/minloc1_8_s1.c: Regenerated.
* generated/minloc1_8_s4.c: Regenerated.
* generated/minloc2_16_s1.c: Regenerated.
* generated/minloc2_16_s4.c: Regenerated.
* generated/minloc2_4_s1.c: Regenerated.
* generated/minloc2_4_s4.c: Regenerated.
* generated/minloc2_8_s1.c: Regenerated.
* generated/minloc2_8_s4.c: Regenerated.
* generated/minval_i1.c: Regenerated.
* generated/minval_i16.c: Regenerated.
* generated/minval_i2.c: Regenerated.
* generated/minval_i4.c: Regenerated.
* generated/minval_i8.c: Regenerated.
* generated/minval_r10.c: Regenerated.
* generated/minval_r16.c: Regenerated.
* generated/minval_r4.c: Regenerated.
* generated/minval_r8.c: Regenerated.
* generated/norm2_r10.c: Regenerated.
* generated/norm2_r16.c: Regenerated.
* generated/norm2_r4.c: Regenerated.
* generated/norm2_r8.c: Regenerated.
* generated/parity_l1.c: Regenerated.
* generated/parity_l16.c: Regenerated.
* generated/parity_l2.c: Regenerated.
* generated/parity_l4.c: Regenerated.
* generated/parity_l8.c: Regenerated.
* generated/product_c10.c: Regenerated.
* generated/product_c16.c: Regenerated.
* generated/product_c4.c: Regenerated.
* generated/product_c8.c: Regenerated.
* generated/product_i1.c: Regenerated.
* generated/product_i16.c: Regenerated.
* generated/product_i2.c: Regenerated.
* generated/product_i4.c: Regenerated.
* generated/product_i8.c: Regenerated.
* generated/product_r10.c: Regenerated.
* generated/product_r16.c: Regenerated.
* generated/product_r4.c: Regenerated.
* generated/product_r8.c: Regenerated.
* generated/sum_c10.c: Regenerated.
* generated/sum_c16.c: Regenerated.
* generated/sum_c4.c: Regenerated.
* generated/sum_c8.c: Regenerated.
* generated/sum_i1.c: Regenerated.
* generated/sum_i16.c: Regenerated.
* generated/sum_i2.c: Regenerated.
* generated/sum_i4.c: Regenerated.
* generated/sum_i8.c: Regenerated.
* generated/sum_r10.c: Regenerated.
* generated/sum_r16.c: Regenerated.
* generated/sum_r4.c: Regenerated.
* generated/sum_r8.c: Regenerated.

2018-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/54613
* gfortran.dg/minmaxloc_12.f90: New test case.
* gfortran.dg/minmaxloc_13.f90: New test case.

From-SVN: r260023

234 files changed:
gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/fortran/simplify.c
gcc/fortran/trans-intrinsic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/minmaxloc_12.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/minmaxloc_13.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/iall_i1.c
libgfortran/generated/iall_i16.c
libgfortran/generated/iall_i2.c
libgfortran/generated/iall_i4.c
libgfortran/generated/iall_i8.c
libgfortran/generated/iany_i1.c
libgfortran/generated/iany_i16.c
libgfortran/generated/iany_i2.c
libgfortran/generated/iany_i4.c
libgfortran/generated/iany_i8.c
libgfortran/generated/iparity_i1.c
libgfortran/generated/iparity_i16.c
libgfortran/generated/iparity_i2.c
libgfortran/generated/iparity_i4.c
libgfortran/generated/iparity_i8.c
libgfortran/generated/maxloc0_16_i1.c
libgfortran/generated/maxloc0_16_i16.c
libgfortran/generated/maxloc0_16_i2.c
libgfortran/generated/maxloc0_16_i4.c
libgfortran/generated/maxloc0_16_i8.c
libgfortran/generated/maxloc0_16_r10.c
libgfortran/generated/maxloc0_16_r16.c
libgfortran/generated/maxloc0_16_r4.c
libgfortran/generated/maxloc0_16_r8.c
libgfortran/generated/maxloc0_16_s1.c
libgfortran/generated/maxloc0_16_s4.c
libgfortran/generated/maxloc0_4_i1.c
libgfortran/generated/maxloc0_4_i16.c
libgfortran/generated/maxloc0_4_i2.c
libgfortran/generated/maxloc0_4_i4.c
libgfortran/generated/maxloc0_4_i8.c
libgfortran/generated/maxloc0_4_r10.c
libgfortran/generated/maxloc0_4_r16.c
libgfortran/generated/maxloc0_4_r4.c
libgfortran/generated/maxloc0_4_r8.c
libgfortran/generated/maxloc0_4_s1.c
libgfortran/generated/maxloc0_4_s4.c
libgfortran/generated/maxloc0_8_i1.c
libgfortran/generated/maxloc0_8_i16.c
libgfortran/generated/maxloc0_8_i2.c
libgfortran/generated/maxloc0_8_i4.c
libgfortran/generated/maxloc0_8_i8.c
libgfortran/generated/maxloc0_8_r10.c
libgfortran/generated/maxloc0_8_r16.c
libgfortran/generated/maxloc0_8_r4.c
libgfortran/generated/maxloc0_8_r8.c
libgfortran/generated/maxloc0_8_s1.c
libgfortran/generated/maxloc0_8_s4.c
libgfortran/generated/maxloc1_16_i1.c
libgfortran/generated/maxloc1_16_i16.c
libgfortran/generated/maxloc1_16_i2.c
libgfortran/generated/maxloc1_16_i4.c
libgfortran/generated/maxloc1_16_i8.c
libgfortran/generated/maxloc1_16_r10.c
libgfortran/generated/maxloc1_16_r16.c
libgfortran/generated/maxloc1_16_r4.c
libgfortran/generated/maxloc1_16_r8.c
libgfortran/generated/maxloc1_16_s1.c
libgfortran/generated/maxloc1_16_s4.c
libgfortran/generated/maxloc1_4_i1.c
libgfortran/generated/maxloc1_4_i16.c
libgfortran/generated/maxloc1_4_i2.c
libgfortran/generated/maxloc1_4_i4.c
libgfortran/generated/maxloc1_4_i8.c
libgfortran/generated/maxloc1_4_r10.c
libgfortran/generated/maxloc1_4_r16.c
libgfortran/generated/maxloc1_4_r4.c
libgfortran/generated/maxloc1_4_r8.c
libgfortran/generated/maxloc1_4_s1.c
libgfortran/generated/maxloc1_4_s4.c
libgfortran/generated/maxloc1_8_i1.c
libgfortran/generated/maxloc1_8_i16.c
libgfortran/generated/maxloc1_8_i2.c
libgfortran/generated/maxloc1_8_i4.c
libgfortran/generated/maxloc1_8_i8.c
libgfortran/generated/maxloc1_8_r10.c
libgfortran/generated/maxloc1_8_r16.c
libgfortran/generated/maxloc1_8_r4.c
libgfortran/generated/maxloc1_8_r8.c
libgfortran/generated/maxloc1_8_s1.c
libgfortran/generated/maxloc1_8_s4.c
libgfortran/generated/maxloc2_16_s1.c
libgfortran/generated/maxloc2_16_s4.c
libgfortran/generated/maxloc2_4_s1.c
libgfortran/generated/maxloc2_4_s4.c
libgfortran/generated/maxloc2_8_s1.c
libgfortran/generated/maxloc2_8_s4.c
libgfortran/generated/maxval_i1.c
libgfortran/generated/maxval_i16.c
libgfortran/generated/maxval_i2.c
libgfortran/generated/maxval_i4.c
libgfortran/generated/maxval_i8.c
libgfortran/generated/maxval_r10.c
libgfortran/generated/maxval_r16.c
libgfortran/generated/maxval_r4.c
libgfortran/generated/maxval_r8.c
libgfortran/generated/minloc0_16_i1.c
libgfortran/generated/minloc0_16_i16.c
libgfortran/generated/minloc0_16_i2.c
libgfortran/generated/minloc0_16_i4.c
libgfortran/generated/minloc0_16_i8.c
libgfortran/generated/minloc0_16_r10.c
libgfortran/generated/minloc0_16_r16.c
libgfortran/generated/minloc0_16_r4.c
libgfortran/generated/minloc0_16_r8.c
libgfortran/generated/minloc0_16_s1.c
libgfortran/generated/minloc0_16_s4.c
libgfortran/generated/minloc0_4_i1.c
libgfortran/generated/minloc0_4_i16.c
libgfortran/generated/minloc0_4_i2.c
libgfortran/generated/minloc0_4_i4.c
libgfortran/generated/minloc0_4_i8.c
libgfortran/generated/minloc0_4_r10.c
libgfortran/generated/minloc0_4_r16.c
libgfortran/generated/minloc0_4_r4.c
libgfortran/generated/minloc0_4_r8.c
libgfortran/generated/minloc0_4_s1.c
libgfortran/generated/minloc0_4_s4.c
libgfortran/generated/minloc0_8_i1.c
libgfortran/generated/minloc0_8_i16.c
libgfortran/generated/minloc0_8_i2.c
libgfortran/generated/minloc0_8_i4.c
libgfortran/generated/minloc0_8_i8.c
libgfortran/generated/minloc0_8_r10.c
libgfortran/generated/minloc0_8_r16.c
libgfortran/generated/minloc0_8_r4.c
libgfortran/generated/minloc0_8_r8.c
libgfortran/generated/minloc0_8_s1.c
libgfortran/generated/minloc0_8_s4.c
libgfortran/generated/minloc1_16_i1.c
libgfortran/generated/minloc1_16_i16.c
libgfortran/generated/minloc1_16_i2.c
libgfortran/generated/minloc1_16_i4.c
libgfortran/generated/minloc1_16_i8.c
libgfortran/generated/minloc1_16_r10.c
libgfortran/generated/minloc1_16_r16.c
libgfortran/generated/minloc1_16_r4.c
libgfortran/generated/minloc1_16_r8.c
libgfortran/generated/minloc1_16_s1.c
libgfortran/generated/minloc1_16_s4.c
libgfortran/generated/minloc1_4_i1.c
libgfortran/generated/minloc1_4_i16.c
libgfortran/generated/minloc1_4_i2.c
libgfortran/generated/minloc1_4_i4.c
libgfortran/generated/minloc1_4_i8.c
libgfortran/generated/minloc1_4_r10.c
libgfortran/generated/minloc1_4_r16.c
libgfortran/generated/minloc1_4_r4.c
libgfortran/generated/minloc1_4_r8.c
libgfortran/generated/minloc1_4_s1.c
libgfortran/generated/minloc1_4_s4.c
libgfortran/generated/minloc1_8_i1.c
libgfortran/generated/minloc1_8_i16.c
libgfortran/generated/minloc1_8_i2.c
libgfortran/generated/minloc1_8_i4.c
libgfortran/generated/minloc1_8_i8.c
libgfortran/generated/minloc1_8_r10.c
libgfortran/generated/minloc1_8_r16.c
libgfortran/generated/minloc1_8_r4.c
libgfortran/generated/minloc1_8_r8.c
libgfortran/generated/minloc1_8_s1.c
libgfortran/generated/minloc1_8_s4.c
libgfortran/generated/minloc2_16_s1.c
libgfortran/generated/minloc2_16_s4.c
libgfortran/generated/minloc2_4_s1.c
libgfortran/generated/minloc2_4_s4.c
libgfortran/generated/minloc2_8_s1.c
libgfortran/generated/minloc2_8_s4.c
libgfortran/generated/minval_i1.c
libgfortran/generated/minval_i16.c
libgfortran/generated/minval_i2.c
libgfortran/generated/minval_i4.c
libgfortran/generated/minval_i8.c
libgfortran/generated/minval_r10.c
libgfortran/generated/minval_r16.c
libgfortran/generated/minval_r4.c
libgfortran/generated/minval_r8.c
libgfortran/generated/norm2_r10.c
libgfortran/generated/norm2_r16.c
libgfortran/generated/norm2_r4.c
libgfortran/generated/norm2_r8.c
libgfortran/generated/parity_l1.c
libgfortran/generated/parity_l16.c
libgfortran/generated/parity_l2.c
libgfortran/generated/parity_l4.c
libgfortran/generated/parity_l8.c
libgfortran/generated/product_c10.c
libgfortran/generated/product_c16.c
libgfortran/generated/product_c4.c
libgfortran/generated/product_c8.c
libgfortran/generated/product_i1.c
libgfortran/generated/product_i16.c
libgfortran/generated/product_i2.c
libgfortran/generated/product_i4.c
libgfortran/generated/product_i8.c
libgfortran/generated/product_r10.c
libgfortran/generated/product_r16.c
libgfortran/generated/product_r4.c
libgfortran/generated/product_r8.c
libgfortran/generated/sum_c10.c
libgfortran/generated/sum_c16.c
libgfortran/generated/sum_c4.c
libgfortran/generated/sum_c8.c
libgfortran/generated/sum_i1.c
libgfortran/generated/sum_i16.c
libgfortran/generated/sum_i2.c
libgfortran/generated/sum_i4.c
libgfortran/generated/sum_i8.c
libgfortran/generated/sum_r10.c
libgfortran/generated/sum_r16.c
libgfortran/generated/sum_r4.c
libgfortran/generated/sum_r8.c
libgfortran/m4/iforeach-s.m4
libgfortran/m4/iforeach.m4
libgfortran/m4/ifunction-s.m4
libgfortran/m4/ifunction.m4
libgfortran/m4/maxloc0.m4
libgfortran/m4/maxloc0s.m4
libgfortran/m4/maxloc1.m4
libgfortran/m4/maxloc1s.m4
libgfortran/m4/maxloc2s.m4
libgfortran/m4/minloc0.m4
libgfortran/m4/minloc0s.m4
libgfortran/m4/minloc1.m4
libgfortran/m4/minloc1s.m4
libgfortran/m4/minloc2s.m4

index 3735dc6a961633fbb041c2dd79bc019acfef9fba..91a84feb656561aebcd56a7854e4d84ae5d64a21 100644 (file)
@@ -1,3 +1,24 @@
+2018-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/54613
+       * check.c (gfc_check_minmaxloc): Remove error for BACK not being
+       implemented.  Use gfc_logical_4_kind for BACK.
+       * simplify.c (min_max_choose): Add optional argument back_val.
+       Handle it.
+       (simplify_minmaxloc_to_scalar): Add argument back_val. Pass
+       back_val to min_max_choose.
+       (simplify_minmaxloc_to_nodim): Likewise.
+       (simplify_minmaxloc_to_array): Likewise.
+       (gfc_simplify_minmaxloc): Add argument back, handle it.
+       Pass back_val to specific simplification functions.
+       (gfc_simplify_minloc): Remove ATTRIBUTE_UNUSED from argument back,
+       pass it on to gfc_simplify_minmaxloc.
+       (gfc_simplify_maxloc): Likewise.
+       * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Adjust
+       comment. If BACK is true, use greater or equal (or lesser or
+       equal) insteal of greater (or lesser). Mark the condition of
+       having found a value which exceeds the limit as unlikely.
+
 2018-05-07  Jeff Law  <law@redhat.comg>
 
        * scanner.c (preprocessor_line): Call linemap_add after a line
index 83bd004eaac2b6bcbb929600cac45d501b607cc0..61b72c12bbe99eb179ae474d0636f2ff277d59eb 100644 (file)
@@ -3306,18 +3306,10 @@ gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
     {
       if (!type_check (b, 4, BT_LOGICAL) || !scalar_check (b,4))
        return false;
-
-      /* TODO: Remove this once BACK is actually implemented.  */
-      if (b->expr_type != EXPR_CONSTANT || b->value.logical != 0)
-       {
-         gfc_error ("BACK argument to %qs intrinsic not yet "
-                    "implemented", gfc_current_intrinsic);
-         return false;
-       }
     }
   else
     {
-      b = gfc_get_logical_expr (gfc_default_logical_kind, NULL, 0);
+      b = gfc_get_logical_expr (gfc_logical_4_kind, NULL, 0);
       ap->next->next->next->next->expr = b;
     }
 
index a970e017c903acb458741206be8cb6c6a8528bb7..fdd85edf62c66dc77ef105748b3bd2816406fb61 100644 (file)
@@ -32,7 +32,7 @@ along with GCC; see the file COPYING3.  If not see
 
 /* Prototypes.  */
 
-static int min_max_choose (gfc_expr *, gfc_expr *, int);
+static int min_max_choose (gfc_expr *, gfc_expr *, int, bool back_val = false);
 
 gfc_expr gfc_bad_expr;
 
@@ -4877,7 +4877,7 @@ gfc_simplify_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask_expr)
 /* Selects between current value and extremum for simplify_min_max
    and simplify_minval_maxval.  */
 static int
-min_max_choose (gfc_expr *arg, gfc_expr *extremum, int sign)
+min_max_choose (gfc_expr *arg, gfc_expr *extremum, int sign, bool back_val)
 {
   int ret;
 
@@ -4940,6 +4940,9 @@ min_max_choose (gfc_expr *arg, gfc_expr *extremum, int sign)
       default:
        gfc_internal_error ("simplify_min_max(): Bad type in arglist");
     }
+  if (back_val && ret == 0)
+    ret = 1;
+
   return ret;
 }
 
@@ -5059,7 +5062,7 @@ gfc_simplify_maxval (gfc_expr *array, gfc_expr* dim, gfc_expr *mask)
 
 static gfc_expr *
 simplify_minmaxloc_to_scalar (gfc_expr *result, gfc_expr *array, gfc_expr *mask,
-                             gfc_expr *extremum, int sign)
+                             gfc_expr *extremum, int sign, bool back_val)
 {
   gfc_expr *a, *m;
   gfc_constructor *array_ctor, *mask_ctor;
@@ -5094,7 +5097,7 @@ simplify_minmaxloc_to_scalar (gfc_expr *result, gfc_expr *array, gfc_expr *mask,
          if (!m->value.logical)
            continue;
        }
-      if (min_max_choose (a, extremum, sign) > 0)
+      if (min_max_choose (a, extremum, sign, back_val) > 0)
        mpz_set (result->value.integer, count);
     }
   mpz_clear (count);
@@ -5106,7 +5109,8 @@ simplify_minmaxloc_to_scalar (gfc_expr *result, gfc_expr *array, gfc_expr *mask,
 
 static gfc_expr *
 simplify_minmaxloc_nodim (gfc_expr *result, gfc_expr *extremum,
-                         gfc_expr *array, gfc_expr *mask, int sign)
+                         gfc_expr *array, gfc_expr *mask, int sign,
+                         bool back_val)
 {
   ssize_t res[GFC_MAX_DIMENSIONS];
   int i, n;
@@ -5158,7 +5162,7 @@ simplify_minmaxloc_nodim (gfc_expr *result, gfc_expr *extremum,
          else
            ma = true;
 
-         if (ma && min_max_choose (a, extremum, sign) > 0)
+         if (ma && min_max_choose (a, extremum, sign, back_val) > 0)
            {
              for (i = 0; i<array->rank; i++)
                res[i] = count[i];
@@ -5225,7 +5229,7 @@ new_array (bt type, int kind, int n, locus *where)
 static gfc_expr *
 simplify_minmaxloc_to_array (gfc_expr *result, gfc_expr *array,
                             gfc_expr *dim, gfc_expr *mask,
-                            gfc_expr *extremum, int sign)
+                            gfc_expr *extremum, int sign, bool back_val)
 {
   mpz_t size;
   int done, i, n, arraysize, resultsize, dim_index, dim_extent, dim_stride;
@@ -5313,7 +5317,7 @@ simplify_minmaxloc_to_array (gfc_expr *result, gfc_expr *array,
       ex = gfc_copy_expr (extremum);
       for (src = base, n = 0; n < dim_extent; src += dim_stride, ++n)
        {
-         if (*src && min_max_choose (*src, ex, sign) > 0)
+         if (*src && min_max_choose (*src, ex, sign, back_val) > 0)
            mpz_set_si ((*dest)->value.integer, n + 1);
        }
 
@@ -5367,12 +5371,13 @@ simplify_minmaxloc_to_array (gfc_expr *result, gfc_expr *array,
 
 gfc_expr *
 gfc_simplify_minmaxloc (gfc_expr *array, gfc_expr *dim, gfc_expr *mask,
-                       gfc_expr *kind, int sign)
+                       gfc_expr *kind, gfc_expr *back, int sign)
 {
   gfc_expr *result;
   gfc_expr *extremum;
   int ikind;
   int init_val;
+  bool back_val = false;
 
   if (!is_constant_array_expr (array)
       || !gfc_is_constant_expr (dim))
@@ -5391,6 +5396,14 @@ gfc_simplify_minmaxloc (gfc_expr *array, gfc_expr *dim, gfc_expr *mask,
   else
     ikind = gfc_default_integer_kind;
 
+  if (back)
+    {
+      if (back->expr_type != EXPR_CONSTANT)
+       return NULL;
+
+      back_val = back->value.logical;
+    }
+  
   if (sign < 0)
     init_val = INT_MAX;
   else if (sign > 0)
@@ -5408,29 +5421,32 @@ gfc_simplify_minmaxloc (gfc_expr *array, gfc_expr *dim, gfc_expr *mask,
       init_result_expr (result, 0, array);
 
       if (array->rank == 1)
-       return simplify_minmaxloc_to_scalar (result, array, mask, extremum, sign);
+       return simplify_minmaxloc_to_scalar (result, array, mask, extremum,
+                                            sign, back_val);
       else
-       return simplify_minmaxloc_to_array (result, array, dim, mask, extremum, sign);
+       return simplify_minmaxloc_to_array (result, array, dim, mask, extremum,
+                                           sign, back_val);
     }
   else
     {
       result = new_array (BT_INTEGER, ikind, array->rank, &array->where);
-      return simplify_minmaxloc_nodim (result, extremum, array, mask, sign);
+      return simplify_minmaxloc_nodim (result, extremum, array, mask,
+                                      sign, back_val);
     }
 }
 
 gfc_expr *
 gfc_simplify_minloc (gfc_expr *array, gfc_expr *dim, gfc_expr *mask, gfc_expr *kind,
-                    gfc_expr *back ATTRIBUTE_UNUSED)
+                    gfc_expr *back)
 {
-  return gfc_simplify_minmaxloc (array, dim, mask, kind, -1);
+  return gfc_simplify_minmaxloc (array, dim, mask, kind, back, -1);
 }
 
 gfc_expr *
 gfc_simplify_maxloc (gfc_expr *array, gfc_expr *dim, gfc_expr *mask, gfc_expr *kind,
-                    gfc_expr *back ATTRIBUTE_UNUSED)
+                    gfc_expr *back)
 {
-  return gfc_simplify_minmaxloc (array, dim, mask, kind, 1);
+  return gfc_simplify_minmaxloc (array, dim, mask, kind, back, 1);
 }
 
 gfc_expr *
index 87b3ca72c05a5498650c44c2eba590035b36ce6b..651a97f1d3f73d9fa34ca83aba8de544836eaf74 100644 (file)
@@ -4684,7 +4684,20 @@ gfc_conv_intrinsic_dot_product (gfc_se * se, gfc_expr * expr)
        S++;
       }
    For 3) and 5), if mask is scalar, this all goes into a conditional,
-   setting pos = 0; in the else branch.  */
+   setting pos = 0; in the else branch.
+
+   Since we now also support the BACK argument, instead of using
+   if (a[S] < limit), we now use
+
+   if (back)
+     cond = a[S] <= limit;
+   else
+     cond = a[S] < limit;
+   if (cond) {
+     ....
+
+     The optimizer is smart enough to move the condition out of the loop.
+     The are now marked as unlikely to for further speedup.  */
 
 static void
 gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
@@ -4702,6 +4715,7 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
   tree offset;
   tree nonempty;
   tree lab1, lab2;
+  tree b_if, b_else;
   gfc_loopinfo loop;
   gfc_actual_arglist *actual;
   gfc_ss *arrayss;
@@ -4710,6 +4724,8 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
   gfc_se maskse;
   gfc_expr *arrayexpr;
   gfc_expr *maskexpr;
+  gfc_expr *backexpr;
+  gfc_se backse;
   tree pos;
   int n;
 
@@ -4766,6 +4782,7 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
   actual = actual->next->next;
   gcc_assert (actual);
   maskexpr = actual->expr;
+  backexpr = actual->next->next->expr;
   nonempty = NULL;
   if (maskexpr && maskexpr->rank != 0)
     {
@@ -4904,6 +4921,10 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
   gfc_conv_expr_val (&arrayse, arrayexpr);
   gfc_add_block_to_block (&block, &arrayse.pre);
 
+  gfc_init_se (&backse, NULL);
+  gfc_conv_expr_val (&backse, backexpr);
+  gfc_add_block_to_block (&block, &backse.pre);
+
   /* We do the following if this is a more extreme value.  */
   gfc_start_block (&ifblock);
 
@@ -4943,9 +4964,33 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
                                op == GT_EXPR ? GE_EXPR : LE_EXPR,
                                logical_type_node, arrayse.expr, limit);
       else
-       cond = fold_build2_loc (input_location, op, logical_type_node,
-                               arrayse.expr, limit);
+       {
+         tree ifbody2, elsebody2;
+         
+         /* We switch to > or >= depending on the value of the BACK argument. */
+         cond = gfc_create_var (logical_type_node, "cond");
+
+         gfc_start_block (&ifblock);
+         b_if = fold_build2_loc (input_location, op == GT_EXPR ? GE_EXPR : LE_EXPR,
+                                 logical_type_node, arrayse.expr, limit);
+
+         gfc_add_modify (&ifblock, cond, b_if);
+         ifbody2 = gfc_finish_block (&ifblock);
+
+         gfc_start_block (&elseblock);
+         b_else = fold_build2_loc (input_location, op, logical_type_node,
+                                   arrayse.expr, limit);
+
+         gfc_add_modify (&elseblock, cond, b_else);
+         elsebody2 = gfc_finish_block (&elseblock);
+
+         tmp = fold_build3_loc (input_location, COND_EXPR, logical_type_node,
+                                backse.expr, ifbody2, elsebody2);
+
+         gfc_add_expr_to_block (&block, tmp);
+       }
 
+      cond = gfc_unlikely (cond, PRED_BUILTIN_EXPECT);
       ifbody = build3_v (COND_EXPR, cond, ifbody,
                         build_empty_stmt (input_location));
     }
@@ -5014,11 +5059,35 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
 
       ifbody = gfc_finish_block (&ifblock);
 
-      cond = fold_build2_loc (input_location, op, logical_type_node,
-                             arrayse.expr, limit);
+      /* We switch to > or >= depending on the value of the BACK argument. */
+      {
+       tree ifbody2, elsebody2;
+
+       cond = gfc_create_var (logical_type_node, "cond");
+
+       gfc_start_block (&ifblock);
+       b_if = fold_build2_loc (input_location, op == GT_EXPR ? GE_EXPR : LE_EXPR,
+                               logical_type_node, arrayse.expr, limit);
+
+       gfc_add_modify (&ifblock, cond, b_if);
+       ifbody2 = gfc_finish_block (&ifblock);
 
+       gfc_start_block (&elseblock);
+       b_else = fold_build2_loc (input_location, op, logical_type_node,
+                                 arrayse.expr, limit);
+
+       gfc_add_modify (&elseblock, cond, b_else);
+       elsebody2 = gfc_finish_block (&elseblock);
+
+       tmp = fold_build3_loc (input_location, COND_EXPR, logical_type_node,
+                              backse.expr, ifbody2, elsebody2);
+      }
+
+      gfc_add_expr_to_block (&block, tmp);
+      cond = gfc_unlikely (cond, PRED_BUILTIN_EXPECT);
       tmp = build3_v (COND_EXPR, cond, ifbody,
                      build_empty_stmt (input_location));
+
       gfc_add_expr_to_block (&block, tmp);
 
       if (maskss)
index df4bacbdb870163109a87711f26c48635881215c..6a94c0695323e85eb05bd101ea76083a9f20b11c 100644 (file)
@@ -1,3 +1,9 @@
+2018-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/54613
+       * gfortran.dg/minmaxloc_12.f90: New test case.
+       * gfortran.dg/minmaxloc_13.f90: New test case.
+
 2018-05-07  Nathan Sidwell  <nathan@acm.org>
 
        * g++.dg/cpp0x/range-for10.C: Delete.
diff --git a/gcc/testsuite/gfortran.dg/minmaxloc_12.f90 b/gcc/testsuite/gfortran.dg/minmaxloc_12.f90
new file mode 100644 (file)
index 0000000..54bebba
--- /dev/null
@@ -0,0 +1,67 @@
+! { dg-do  run }
+! Test compile-time simplification of minloc and maxloc with BACK argument
+program main
+  integer, parameter :: i1(*) = [ 1,2,3,1,2,3];
+  integer, parameter :: d1 = minloc(i1,dim=1,back=.true.)
+  integer, parameter :: d2 = minloc(i1,dim=1,back=.false.)
+  integer, parameter :: d3 = maxloc(i1,dim=1,back=.true.)
+  integer, parameter :: d4 = maxloc(i1,dim=1,back=.false.)
+  integer, parameter :: i2(4,4) = reshape([1,2,1,2,2,3,3,2,3,4,4,3,4,5,5,4], &
+       [4,4]);
+  integer, parameter :: d5(2) = minloc(i2,back=.true.)
+  integer, parameter :: d6(2) = maxloc(i2,back=.true.)
+  integer, parameter :: d7(4) = minloc(i2,dim=1,back=.true.)
+  integer, parameter :: d25(4) = minloc(i2,dim=2,mask=i2<2,back=.true.)
+  integer, parameter :: d26(4) = maxloc(i2,dim=1,mask=i2<3,back=.true.)
+
+  integer, parameter :: i3(4,4) = transpose(i2)
+  integer, parameter :: d8(4) = minloc(i3,dim=2,back=.true.)
+  integer, parameter :: i4(4,4) = reshape([1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1],&
+       ([4,4]))
+  integer, parameter :: d9(4) = minloc(i4,dim=1,mask=i4>1,back=.true.)
+
+  integer, parameter :: d10(4) = maxloc(i4,dim=1,mask=i4>1,back=.true.)
+  character(len=2), parameter :: c0(9) = ["aa", "bb", "aa", &
+       "cc", "bb", "cc", "aa", "bb", "aa"]
+  character(len=2), parameter :: c1 (3,3) = reshape(c0, [3,3]);
+  integer, parameter :: d11(2) = minloc(c1,back=.true.)
+  integer, parameter :: d12(2) = maxloc(c1,back=.true.)
+  integer, parameter :: d13(2) = minloc(c1,mask=c1>"aa",back=.true.)
+  integer, parameter :: d14(2) = maxloc(c1,mask=c1<"cc",back=.true.)
+  integer, parameter :: d15(3) = minloc(c1,dim=1,back=.true.)
+  integer, parameter :: d16(3) = maxloc(c1,dim=1,back=.true.)
+  integer, parameter :: d17(3) = minloc(c1,dim=2,back=.true.)
+  integer, parameter :: d18(3) = maxloc(c1,dim=2,back=.true.)
+  integer, parameter :: d19    = minloc(c0,dim=1,back=.true.)
+  integer, parameter :: d20    = maxloc(c0,dim=1,back=.true.)
+  integer, parameter :: d21    = minloc(c0,dim=1,mask=c0>"aa",back=.true.)
+  integer, parameter :: d22    = maxloc(c0,dim=1,mask=c0<"cc",back=.true.)
+  integer, parameter :: d23(3) = minloc(c1,dim=2,mask=c1>"aa",back=.true.)
+  integer, parameter :: d24(3) = maxloc(c1,dim=2,mask=c1<"cc",back=.true.)
+
+  if (d1 /= 4) STOP 2078
+  if (d2 /= 1) STOP 2079
+  if (d3 /= 6) STOP 2080
+  if (d4 /= 3) STOP 2081
+  if (any (d5 /= [3,1])) STOP 2082
+  if (any (d6 /= [3,4])) STOP 2083
+  if (any (d7 /= [3,4,4,4])) STOP 2084
+  if (any (d8 /= d7)) STOP 2085
+  if (any (d9 /= [4,3,4,3])) STOP 2086
+  if (any (d10 /= d9)) STOP 2087
+  if (any(d11 /= [3,3])) STOP 2088
+  if (any(d12 /= [3,2])) STOP 2089
+  if (any(d13 /= [2,3])) STOP 2090
+  if (any(d14 /= [2,3])) STOP 2091
+  if (any(d15 /= [3,2,3])) STOP 2092
+  if (any(d16 /= [2,3,2])) STOP 2093
+  if (any(d17 /= [3,3,3])) STOP 2094
+  if (any(d18 /= [2,3,2])) STOP 2095
+  if (d19 /= 9) STOP 2096
+  if (d20 /= 6) STOP 2097
+  if (d21 /= 8 .or. d22 /= 8) STOP 2098
+  if (any(d23 /= [2,3,2])) STOP 2099
+  if (any(d24 /= 3)) STOP 2100
+  if (any(d25 /= [1,0,1,0])) STOP 2101
+  if (any(d26 /= [4,4,0,0])) STOP 2102
+end program main
diff --git a/gcc/testsuite/gfortran.dg/minmaxloc_13.f90 b/gcc/testsuite/gfortran.dg/minmaxloc_13.f90
new file mode 100644 (file)
index 0000000..3ebfdc9
--- /dev/null
@@ -0,0 +1,103 @@
+! { dg-do  run }
+! Test run-time of MINLOC and MAXLOC with BACK
+program main
+  implicit none
+  integer:: i1(6) 
+  integer:: d1 
+  integer:: d2 
+  integer:: d3 
+  integer:: d4 
+  integer:: i2(4,4) 
+  integer:: d5(2) 
+  integer:: d6(2) 
+  integer:: d7(4) 
+  integer:: d25(4) 
+  integer:: d26(4) 
+
+  integer:: i3(4,4) 
+  integer:: d8(4) 
+  integer:: i4(4,4) 
+  integer:: d9(4) 
+
+  integer:: d10(4) 
+  character(len=2) :: c0(9)
+  character(len=2) :: c1(3,3)
+  integer:: d11(2) 
+  integer:: d12(2) 
+  integer:: d13(2) 
+  integer:: d14(2) 
+  integer:: d15(3) 
+  integer:: d16(3) 
+  integer:: d17(3) 
+  integer:: d18(3) 
+  integer:: d19    
+  integer:: d20    
+  integer:: d21    
+  integer:: d22    
+  integer:: d23(3) 
+  integer:: d24(3)
+
+  i1 = [ 1,2,3,1,2,3];
+  d1 = minloc(i1,dim=1,back=.true.)
+  d2 = minloc(i1,dim=1,back=.false.)
+  d3 = maxloc(i1,dim=1,back=.true.)
+  d4 = maxloc(i1,dim=1,back=.false.)
+  i2 = reshape([1,2,1,2,2,3,3,2,3,4,4,3,4,5,5,4], &
+       [4,4]);
+  d5 = minloc(i2,back=.true.)
+  d6 = maxloc(i2,back=.true.)
+  d7= minloc(i2,dim=1,back=.true.)
+  d25 = minloc(i2,dim=2,mask=i2<2,back=.true.)
+  d26 = maxloc(i2,dim=1,mask=i2<3,back=.true.)
+
+  i3 = transpose(i2)
+  d8 = minloc(i3,dim=2,back=.true.)
+  i4 = reshape([1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1],&
+       ([4,4]))
+  d9 = minloc(i4,dim=1,mask=i4>1,back=.true.)
+
+  d10 = maxloc(i4,dim=1,mask=i4>1,back=.true.)
+  c0 = ["aa", "bb", "aa", &
+       "cc", "bb", "cc", "aa", "bb", "aa"]
+  c1 = reshape(c0, [3,3]);
+  d11 = minloc(c1,back=.true.)
+  d12 = maxloc(c1,back=.true.)
+  d13 = minloc(c1,mask=c1>"aa",back=.true.)
+  d14 = maxloc(c1,mask=c1<"cc",back=.true.)
+  d15 = minloc(c1,dim=1,back=.true.)
+  d16 = maxloc(c1,dim=1,back=.true.)
+  d17 = minloc(c1,dim=2,back=.true.)
+  d18 = maxloc(c1,dim=2,back=.true.)
+  d19    = minloc(c0,dim=1,back=.true.)
+  d20    = maxloc(c0,dim=1,back=.true.)
+  d21    = minloc(c0,dim=1,mask=c0>"aa",back=.true.)
+  d22    = maxloc(c0,dim=1,mask=c0<"cc",back=.true.)
+  d23 = minloc(c1,dim=2,mask=c1>"aa",back=.true.)
+  d24 = maxloc(c1,dim=2,mask=c1<"cc",back=.true.)
+
+  if (d1 /= 4) STOP 2626
+  if (d2 /= 1) STOP 2627
+  if (d3 /= 6) STOP 2628
+  if (d4 /= 3) STOP 2629
+  if (any (d5 /= [3,1])) STOP 2630
+  if (any (d6 /= [3,4])) STOP 2631
+  if (any (d7 /= [3,4,4,4])) STOP 2632
+  if (any (d8 /= d7)) STOP 2633
+  if (any (d9 /= [4,3,4,3])) STOP 2634
+  if (any (d10 /= d9)) STOP 2635
+  if (any(d11 /= [3,3])) STOP 2636
+  if (any(d12 /= [3,2])) STOP 2637
+  if (any(d13 /= [2,3])) STOP 2638
+  if (any(d14 /= [2,3])) STOP 2639
+  if (any(d15 /= [3,2,3])) STOP 2640
+  if (any(d16 /= [2,3,2])) STOP 2641
+  if (any(d17 /= [3,3,3])) STOP 2642
+  if (any(d18 /= [2,3,2])) STOP 2643
+  if (d19 /= 9) STOP 2644
+  if (d20 /= 6) STOP 2645
+  if (d21 /= 8 .or. d22 /= 8) STOP 2646
+  if (any(d23 /= [2,3,2])) STOP 2647
+  if (any(d24 /= 3)) STOP 2648
+  if (any(d25 /= [1,0,1,0])) STOP 2649
+  if (any(d26 /= [4,4,0,0])) STOP 2650
+end program
index 355f568a06251f0304d7acf5769c466d8facb684..7a232acafaba9085b4ad193dec296ec1be27e38a 100644 (file)
@@ -1,3 +1,236 @@
+2018-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/54613
+       * m4/iforeach-s.m4: Remove assertion that back is zero.
+       * m4/iforeach.m4: Likewise.  Remove leading 'do'
+       before implementation start.
+       * m4/ifunction-s.m4: Remove assertion that back is zero.
+       * m4/ifunction.m4: Likewise.  Remove for loop if HAVE_BACK_ARG
+       is defined.
+       * m4/maxloc0.m4: Reorganize loops. Split loops between >= and =,
+       depending if back is true.  Mark the condition of having
+       found a value which exceeds the limit as unlikely.
+       * m4/minloc0.m4: Likewise.
+       * m4/maxloc1.m4: Likewise.
+       * m4/minloc1.m4: Likewise.
+       * m4/maxloc1s.m4: Handle back argument.
+       * m4/minloc1s.m4: Likewise.
+       * m4/maxloc2s.m4: Remove assertion that back is zero.
+       Remove special handling of loop start. Handle back argument.
+       * m4/minloc2s.m4: Likewise.
+       * generated/iall_i1.c: Regenerated.
+       * generated/iall_i16.c: Regenerated.
+       * generated/iall_i2.c: Regenerated.
+       * generated/iall_i4.c: Regenerated.
+       * generated/iall_i8.c: Regenerated.
+       * generated/iany_i1.c: Regenerated.
+       * generated/iany_i16.c: Regenerated.
+       * generated/iany_i2.c: Regenerated.
+       * generated/iany_i4.c: Regenerated.
+       * generated/iany_i8.c: Regenerated.
+       * generated/iparity_i1.c: Regenerated.
+       * generated/iparity_i16.c: Regenerated.
+       * generated/iparity_i2.c: Regenerated.
+       * generated/iparity_i4.c: Regenerated.
+       * generated/iparity_i8.c: Regenerated.
+       * generated/maxloc0_16_i1.c: Regenerated.
+       * generated/maxloc0_16_i16.c: Regenerated.
+       * generated/maxloc0_16_i2.c: Regenerated.
+       * generated/maxloc0_16_i4.c: Regenerated.
+       * generated/maxloc0_16_i8.c: Regenerated.
+       * generated/maxloc0_16_r10.c: Regenerated.
+       * generated/maxloc0_16_r16.c: Regenerated.
+       * generated/maxloc0_16_r4.c: Regenerated.
+       * generated/maxloc0_16_r8.c: Regenerated.
+       * generated/maxloc0_16_s1.c: Regenerated.
+       * generated/maxloc0_16_s4.c: Regenerated.
+       * generated/maxloc0_4_i1.c: Regenerated.
+       * generated/maxloc0_4_i16.c: Regenerated.
+       * generated/maxloc0_4_i2.c: Regenerated.
+       * generated/maxloc0_4_i4.c: Regenerated.
+       * generated/maxloc0_4_i8.c: Regenerated.
+       * generated/maxloc0_4_r10.c: Regenerated.
+       * generated/maxloc0_4_r16.c: Regenerated.
+       * generated/maxloc0_4_r4.c: Regenerated.
+       * generated/maxloc0_4_r8.c: Regenerated.
+       * generated/maxloc0_4_s1.c: Regenerated.
+       * generated/maxloc0_4_s4.c: Regenerated.
+       * generated/maxloc0_8_i1.c: Regenerated.
+       * generated/maxloc0_8_i16.c: Regenerated.
+       * generated/maxloc0_8_i2.c: Regenerated.
+       * generated/maxloc0_8_i4.c: Regenerated.
+       * generated/maxloc0_8_i8.c: Regenerated.
+       * generated/maxloc0_8_r10.c: Regenerated.
+       * generated/maxloc0_8_r16.c: Regenerated.
+       * generated/maxloc0_8_r4.c: Regenerated.
+       * generated/maxloc0_8_r8.c: Regenerated.
+       * generated/maxloc0_8_s1.c: Regenerated.
+       * generated/maxloc0_8_s4.c: Regenerated.
+       * generated/maxloc1_16_i1.c: Regenerated.
+       * generated/maxloc1_16_i16.c: Regenerated.
+       * generated/maxloc1_16_i2.c: Regenerated.
+       * generated/maxloc1_16_i4.c: Regenerated.
+       * generated/maxloc1_16_i8.c: Regenerated.
+       * generated/maxloc1_16_r10.c: Regenerated.
+       * generated/maxloc1_16_r16.c: Regenerated.
+       * generated/maxloc1_16_r4.c: Regenerated.
+       * generated/maxloc1_16_r8.c: Regenerated.
+       * generated/maxloc1_16_s1.c: Regenerated.
+       * generated/maxloc1_16_s4.c: Regenerated.
+       * generated/maxloc1_4_i1.c: Regenerated.
+       * generated/maxloc1_4_i16.c: Regenerated.
+       * generated/maxloc1_4_i2.c: Regenerated.
+       * generated/maxloc1_4_i4.c: Regenerated.
+       * generated/maxloc1_4_i8.c: Regenerated.
+       * generated/maxloc1_4_r10.c: Regenerated.
+       * generated/maxloc1_4_r16.c: Regenerated.
+       * generated/maxloc1_4_r4.c: Regenerated.
+       * generated/maxloc1_4_r8.c: Regenerated.
+       * generated/maxloc1_4_s1.c: Regenerated.
+       * generated/maxloc1_4_s4.c: Regenerated.
+       * generated/maxloc1_8_i1.c: Regenerated.
+       * generated/maxloc1_8_i16.c: Regenerated.
+       * generated/maxloc1_8_i2.c: Regenerated.
+       * generated/maxloc1_8_i4.c: Regenerated.
+       * generated/maxloc1_8_i8.c: Regenerated.
+       * generated/maxloc1_8_r10.c: Regenerated.
+       * generated/maxloc1_8_r16.c: Regenerated.
+       * generated/maxloc1_8_r4.c: Regenerated.
+       * generated/maxloc1_8_r8.c: Regenerated.
+       * generated/maxloc1_8_s1.c: Regenerated.
+       * generated/maxloc1_8_s4.c: Regenerated.
+       * generated/maxloc2_16_s1.c: Regenerated.
+       * generated/maxloc2_16_s4.c: Regenerated.
+       * generated/maxloc2_4_s1.c: Regenerated.
+       * generated/maxloc2_4_s4.c: Regenerated.
+       * generated/maxloc2_8_s1.c: Regenerated.
+       * generated/maxloc2_8_s4.c: Regenerated.
+       * generated/maxval_i1.c: Regenerated.
+       * generated/maxval_i16.c: Regenerated.
+       * generated/maxval_i2.c: Regenerated.
+       * generated/maxval_i4.c: Regenerated.
+       * generated/maxval_i8.c: Regenerated.
+       * generated/maxval_r10.c: Regenerated.
+       * generated/maxval_r16.c: Regenerated.
+       * generated/maxval_r4.c: Regenerated.
+       * generated/maxval_r8.c: Regenerated.
+       * generated/minloc0_16_i1.c: Regenerated.
+       * generated/minloc0_16_i16.c: Regenerated.
+       * generated/minloc0_16_i2.c: Regenerated.
+       * generated/minloc0_16_i4.c: Regenerated.
+       * generated/minloc0_16_i8.c: Regenerated.
+       * generated/minloc0_16_r10.c: Regenerated.
+       * generated/minloc0_16_r16.c: Regenerated.
+       * generated/minloc0_16_r4.c: Regenerated.
+       * generated/minloc0_16_r8.c: Regenerated.
+       * generated/minloc0_16_s1.c: Regenerated.
+       * generated/minloc0_16_s4.c: Regenerated.
+       * generated/minloc0_4_i1.c: Regenerated.
+       * generated/minloc0_4_i16.c: Regenerated.
+       * generated/minloc0_4_i2.c: Regenerated.
+       * generated/minloc0_4_i4.c: Regenerated.
+       * generated/minloc0_4_i8.c: Regenerated.
+       * generated/minloc0_4_r10.c: Regenerated.
+       * generated/minloc0_4_r16.c: Regenerated.
+       * generated/minloc0_4_r4.c: Regenerated.
+       * generated/minloc0_4_r8.c: Regenerated.
+       * generated/minloc0_4_s1.c: Regenerated.
+       * generated/minloc0_4_s4.c: Regenerated.
+       * generated/minloc0_8_i1.c: Regenerated.
+       * generated/minloc0_8_i16.c: Regenerated.
+       * generated/minloc0_8_i2.c: Regenerated.
+       * generated/minloc0_8_i4.c: Regenerated.
+       * generated/minloc0_8_i8.c: Regenerated.
+       * generated/minloc0_8_r10.c: Regenerated.
+       * generated/minloc0_8_r16.c: Regenerated.
+       * generated/minloc0_8_r4.c: Regenerated.
+       * generated/minloc0_8_r8.c: Regenerated.
+       * generated/minloc0_8_s1.c: Regenerated.
+       * generated/minloc0_8_s4.c: Regenerated.
+       * generated/minloc1_16_i1.c: Regenerated.
+       * generated/minloc1_16_i16.c: Regenerated.
+       * generated/minloc1_16_i2.c: Regenerated.
+       * generated/minloc1_16_i4.c: Regenerated.
+       * generated/minloc1_16_i8.c: Regenerated.
+       * generated/minloc1_16_r10.c: Regenerated.
+       * generated/minloc1_16_r16.c: Regenerated.
+       * generated/minloc1_16_r4.c: Regenerated.
+       * generated/minloc1_16_r8.c: Regenerated.
+       * generated/minloc1_16_s1.c: Regenerated.
+       * generated/minloc1_16_s4.c: Regenerated.
+       * generated/minloc1_4_i1.c: Regenerated.
+       * generated/minloc1_4_i16.c: Regenerated.
+       * generated/minloc1_4_i2.c: Regenerated.
+       * generated/minloc1_4_i4.c: Regenerated.
+       * generated/minloc1_4_i8.c: Regenerated.
+       * generated/minloc1_4_r10.c: Regenerated.
+       * generated/minloc1_4_r16.c: Regenerated.
+       * generated/minloc1_4_r4.c: Regenerated.
+       * generated/minloc1_4_r8.c: Regenerated.
+       * generated/minloc1_4_s1.c: Regenerated.
+       * generated/minloc1_4_s4.c: Regenerated.
+       * generated/minloc1_8_i1.c: Regenerated.
+       * generated/minloc1_8_i16.c: Regenerated.
+       * generated/minloc1_8_i2.c: Regenerated.
+       * generated/minloc1_8_i4.c: Regenerated.
+       * generated/minloc1_8_i8.c: Regenerated.
+       * generated/minloc1_8_r10.c: Regenerated.
+       * generated/minloc1_8_r16.c: Regenerated.
+       * generated/minloc1_8_r4.c: Regenerated.
+       * generated/minloc1_8_r8.c: Regenerated.
+       * generated/minloc1_8_s1.c: Regenerated.
+       * generated/minloc1_8_s4.c: Regenerated.
+       * generated/minloc2_16_s1.c: Regenerated.
+       * generated/minloc2_16_s4.c: Regenerated.
+       * generated/minloc2_4_s1.c: Regenerated.
+       * generated/minloc2_4_s4.c: Regenerated.
+       * generated/minloc2_8_s1.c: Regenerated.
+       * generated/minloc2_8_s4.c: Regenerated.
+       * generated/minval_i1.c: Regenerated.
+       * generated/minval_i16.c: Regenerated.
+       * generated/minval_i2.c: Regenerated.
+       * generated/minval_i4.c: Regenerated.
+       * generated/minval_i8.c: Regenerated.
+       * generated/minval_r10.c: Regenerated.
+       * generated/minval_r16.c: Regenerated.
+       * generated/minval_r4.c: Regenerated.
+       * generated/minval_r8.c: Regenerated.
+       * generated/norm2_r10.c: Regenerated.
+       * generated/norm2_r16.c: Regenerated.
+       * generated/norm2_r4.c: Regenerated.
+       * generated/norm2_r8.c: Regenerated.
+       * generated/parity_l1.c: Regenerated.
+       * generated/parity_l16.c: Regenerated.
+       * generated/parity_l2.c: Regenerated.
+       * generated/parity_l4.c: Regenerated.
+       * generated/parity_l8.c: Regenerated.
+       * generated/product_c10.c: Regenerated.
+       * generated/product_c16.c: Regenerated.
+       * generated/product_c4.c: Regenerated.
+       * generated/product_c8.c: Regenerated.
+       * generated/product_i1.c: Regenerated.
+       * generated/product_i16.c: Regenerated.
+       * generated/product_i2.c: Regenerated.
+       * generated/product_i4.c: Regenerated.
+       * generated/product_i8.c: Regenerated.
+       * generated/product_r10.c: Regenerated.
+       * generated/product_r16.c: Regenerated.
+       * generated/product_r4.c: Regenerated.
+       * generated/product_r8.c: Regenerated.
+       * generated/sum_c10.c: Regenerated.
+       * generated/sum_c16.c: Regenerated.
+       * generated/sum_c4.c: Regenerated.
+       * generated/sum_c8.c: Regenerated.
+       * generated/sum_i1.c: Regenerated.
+       * generated/sum_i16.c: Regenerated.
+       * generated/sum_i2.c: Regenerated.
+       * generated/sum_i4.c: Regenerated.
+       * generated/sum_i8.c: Regenerated.
+       * generated/sum_r10.c: Regenerated.
+       * generated/sum_r16.c: Regenerated.
+       * generated/sum_r4.c: Regenerated.
+       * generated/sum_r8.c: Regenerated.
+
 2018-04-24  H.J. Lu  <hongjiu.lu@intel.com>
 
        * configure: Regenerated.
index a171ed210530f92a27fcce0b55edf938022d4564..f02f7afa4b080e3831ec5f0559292855c8ee160c 100644 (file)
@@ -51,10 +51,6 @@ iall_i1 (gfc_array_i1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iall_i1 (gfc_array_i1 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result &= *src;
              }
@@ -222,9 +220,6 @@ miall_i1 (gfc_array_i1 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 80c89e828dd835658ae64caed13c1442fd2c8bc4..e739fad7abd3e02d62099f16057db26f66625c36 100644 (file)
@@ -51,10 +51,6 @@ iall_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iall_i16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result &= *src;
              }
@@ -222,9 +220,6 @@ miall_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 618b02479b27110e7a412ade4cba30929591c9ba..ff958a9cd33252b5edba69aa92ba8c8998753603 100644 (file)
@@ -51,10 +51,6 @@ iall_i2 (gfc_array_i2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iall_i2 (gfc_array_i2 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result &= *src;
              }
@@ -222,9 +220,6 @@ miall_i2 (gfc_array_i2 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 808e073003d17335d35f9321beb65da0245cf73e..ece32e481d9222f7b8a98ae37c55260a410f7e4e 100644 (file)
@@ -51,10 +51,6 @@ iall_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iall_i4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result &= *src;
              }
@@ -222,9 +220,6 @@ miall_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index c487b6cacfb21142cc0d782c2842aba13467f8f5..f181f153c7415d7c098abaf76ec67e648c63c23f 100644 (file)
@@ -51,10 +51,6 @@ iall_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iall_i8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result &= *src;
              }
@@ -222,9 +220,6 @@ miall_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 0890eed633ab58099f233ffb7a7cf615bec598f1..20088edee3a7e7964d3830bb64bf9630a1ba0869 100644 (file)
@@ -51,10 +51,6 @@ iany_i1 (gfc_array_i1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iany_i1 (gfc_array_i1 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result |= *src;
              }
@@ -222,9 +220,6 @@ miany_i1 (gfc_array_i1 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 126db338d3374bf231f99e8b9184353d1d55d2a7..90844e884f42024a8925d4f06bc2de1e57fb1fec 100644 (file)
@@ -51,10 +51,6 @@ iany_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iany_i16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result |= *src;
              }
@@ -222,9 +220,6 @@ miany_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 3a26b2ced8422945a8dd4ecb36067aba5bba8d1d..e73438953013e3a3645abf5496f53e7a6ee5df70 100644 (file)
@@ -51,10 +51,6 @@ iany_i2 (gfc_array_i2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iany_i2 (gfc_array_i2 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result |= *src;
              }
@@ -222,9 +220,6 @@ miany_i2 (gfc_array_i2 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 8b81d001be104679f9019f587ea219cb6477fba5..48043eefd2ab3bb5853c7d3bc408ef2a175029f3 100644 (file)
@@ -51,10 +51,6 @@ iany_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iany_i4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result |= *src;
              }
@@ -222,9 +220,6 @@ miany_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 9ffc9b6c89ae1d75072264d12f1477f4ea3363bd..078160b24b73b3997371d1922268522c6f34dd35 100644 (file)
@@ -51,10 +51,6 @@ iany_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iany_i8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result |= *src;
              }
@@ -222,9 +220,6 @@ miany_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index b4d4240291c7287c002c07902556a1dc8e577fc0..911f9f5a6e549c26288aeb795bc3af199d2aca75 100644 (file)
@@ -51,10 +51,6 @@ iparity_i1 (gfc_array_i1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iparity_i1 (gfc_array_i1 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result ^= *src;
              }
@@ -222,9 +220,6 @@ miparity_i1 (gfc_array_i1 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 96cb108b0eed4a7d6885f027f92cd880d7797bfb..b434f01b4f149849d87cdcf95e51e714c17be91e 100644 (file)
@@ -51,10 +51,6 @@ iparity_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iparity_i16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result ^= *src;
              }
@@ -222,9 +220,6 @@ miparity_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index b077f29c3811f93430a50d1f1ae41293d5bfbfc3..998df01fd8d3cfb8671e81c4b7c5365c34ffa82a 100644 (file)
@@ -51,10 +51,6 @@ iparity_i2 (gfc_array_i2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iparity_i2 (gfc_array_i2 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result ^= *src;
              }
@@ -222,9 +220,6 @@ miparity_i2 (gfc_array_i2 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 1b5dfe0397aeaa61ea9926f31079cd5065915fcf..a0c515c77173d79b0c14d5269061d3d4ae2c10c3 100644 (file)
@@ -51,10 +51,6 @@ iparity_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iparity_i4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result ^= *src;
              }
@@ -222,9 +220,6 @@ miparity_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 056a59bfaeaec633423a3e65b3d619812a8533ae..3225513273e6fc2ec29bd10432399ca6d51df9b4 100644 (file)
@@ -51,10 +51,6 @@ iparity_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ iparity_i8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result ^= *src;
              }
@@ -222,9 +220,6 @@ miparity_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 25398cc79892aacd7aba71a139ca8124e5ab3459..3bb69059e5543d82a7bad23d510cbd8f1ae8f3eb 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_1_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_i1 (gfc_array_i16 * const restrict, 
        gfc_array_i1 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_i1 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 3a4a7446274c8975c4f5a9d722cdff6148775958..7c2967fedde57387ea70ab0d492474b24d41a0f2 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_i16 (gfc_array_i16 * const restrict, 
        gfc_array_i16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 0ff8ca0b183ba81cf391b96357ac374891cf308c..87edb85cdc635cecc68d76fc1e178065959c4922 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_2_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_i2 (gfc_array_i16 * const restrict, 
        gfc_array_i2 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_i2 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 84cff67ea087252d595be140232f645a48bc5759..38daf6d77a7d7f41201d8ab66c74211c41697900 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_i4 (gfc_array_i16 * const restrict, 
        gfc_array_i4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index e276295027b1713305894eb36d5d5a06dcdd04a3..f48e943d9fce0649fa9f118af5e7189cb5eba35c 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_i8 (gfc_array_i16 * const restrict, 
        gfc_array_i8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 384487fadeb13f588ea3c9bda59d556fd639ba3e..f1dc89be33e7fcb35cc004488d308cf634c5f474 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_10_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_r10 (gfc_array_i16 * const restrict, 
        gfc_array_r10 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_r10 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 10c7673f73c10f1b52ceff58489823b973073fa6..7003a60ac6887daef5b625b4f8dbbae101ee1950 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_r16 (gfc_array_i16 * const restrict, 
        gfc_array_r16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_r16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index b7aaa3d5cefd77ad43ea8c54a55e6286a856d137..0ada2d1b2088379d062aa431715067648ef02c04 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_r4 (gfc_array_i16 * const restrict, 
        gfc_array_r4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_r4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 2ca3479d3f9ffe8e6e193e540c464055228fbaf0..75b59841aaae47847004f485251eccda9c41c43f 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_16_r8 (gfc_array_i16 * const restrict, 
        gfc_array_r8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_16_r8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index a05d17893e3f03cca001272b1c83067bc1058333..33f73e7d62caacb44cd4a3f6276d1a51563278be 100644 (file)
@@ -61,10 +61,6 @@ maxloc0_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ maxloc0_16_s1 (gfc_array_i16 * const restrict retarray,
   {
 
   const GFC_INTEGER_1 *maxval;
-   maxval = base;
+   maxval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ maxloc0_16_s1 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, maxval, len) > 0)
+    if (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0 :
+                                  compare_fcn (base, maxval, len) > 0))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mmaxloc0_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mmaxloc0_16_s1 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (maxval == NULL || compare_fcn (base, maxval, len) > 0))
+  if (*mbase &&
+        (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0:
+                                  compare_fcn (base, maxval, len) > 0)))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
index f6adf95c356e1f8fd2af8c990eeaf04974694bb9..8eec34160cb0fc9b38b331c0d94bb5ead56c2583 100644 (file)
@@ -61,10 +61,6 @@ maxloc0_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ maxloc0_16_s4 (gfc_array_i16 * const restrict retarray,
   {
 
   const GFC_INTEGER_4 *maxval;
-   maxval = base;
+   maxval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ maxloc0_16_s4 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, maxval, len) > 0)
+    if (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0 :
+                                  compare_fcn (base, maxval, len) > 0))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mmaxloc0_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mmaxloc0_16_s4 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (maxval == NULL || compare_fcn (base, maxval, len) > 0))
+  if (*mbase &&
+        (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0:
+                                  compare_fcn (base, maxval, len) > 0)))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
index dc31e1d4b6584a7b5712a69fbdff06e90f3ac75f..63a5d544c72fe6eb0c16baef463f2d860747ee3b 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_1_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_i1 (gfc_array_i4 * const restrict, 
        gfc_array_i1 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index f7226001282c9346f791ae5a0a8866cc6597b721..b515ee0c097e5065571cd02102825fafcaaff925 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_i16 (gfc_array_i4 * const restrict, 
        gfc_array_i16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index f78e20ec405a0e6f38035484279c71a17bc2c742..563aebe28b7f27313d940be998a7a24375a72877 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_2_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_i2 (gfc_array_i4 * const restrict, 
        gfc_array_i2 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 58c3cf1d4b48cad048822ac4ebe1d25d1cc1e08f..7760807bac28f99bbbc83a09bcec720628f0b999 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_i4 (gfc_array_i4 * const restrict, 
        gfc_array_i4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index ded9b5bcadea6b6e5d17e1b1ed2ae0698457e24b..e9113183aab9c47ea0b5146dc8b98a6f3464f904 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_i8 (gfc_array_i4 * const restrict, 
        gfc_array_i8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index c64bd532380a61b0a77d1e49ac080801eae2869e..b335b2ed5eb08297c8c23e47882b918b74e4679b 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_10_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_r10 (gfc_array_i4 * const restrict, 
        gfc_array_r10 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 4fd46a3371bcd9eca7d2f31ad59eb839dbd2762d..6a27d69f077629b7733b8774f05fdb87ba4f2f96 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_r16 (gfc_array_i4 * const restrict, 
        gfc_array_r16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index c168aee4d57e7c3a68f91682a27372d4174e0721..76732d7f6bb95fecdca7937fff47fdc444102af4 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_r4 (gfc_array_i4 * const restrict, 
        gfc_array_r4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 655a6527304f56f62a7706ff596c1fe9e9075be5..13e371030b79e679be3f212fd14dd9010a0abe57 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_4_r8 (gfc_array_i4 * const restrict, 
        gfc_array_r8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index b13a9b94146d709ca0e89b7197ba8a7a34aaf20c..ba8e63401187ce9592b188c63bcf423184c3e99f 100644 (file)
@@ -61,10 +61,6 @@ maxloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ maxloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   {
 
   const GFC_INTEGER_1 *maxval;
-   maxval = base;
+   maxval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ maxloc0_4_s1 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, maxval, len) > 0)
+    if (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0 :
+                                  compare_fcn (base, maxval, len) > 0))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mmaxloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mmaxloc0_4_s1 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (maxval == NULL || compare_fcn (base, maxval, len) > 0))
+  if (*mbase &&
+        (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0:
+                                  compare_fcn (base, maxval, len) > 0)))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
index 971e8680804af5d5d377364cd1808db0a12b3f5a..90a54b6aed8ac9acc5e2d5281e8eede29a75aaa6 100644 (file)
@@ -61,10 +61,6 @@ maxloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ maxloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   {
 
   const GFC_INTEGER_4 *maxval;
-   maxval = base;
+   maxval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ maxloc0_4_s4 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, maxval, len) > 0)
+    if (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0 :
+                                  compare_fcn (base, maxval, len) > 0))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mmaxloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mmaxloc0_4_s4 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (maxval == NULL || compare_fcn (base, maxval, len) > 0))
+  if (*mbase &&
+        (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0:
+                                  compare_fcn (base, maxval, len) > 0)))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
index b86f0cb294670734c847d2eecd6927ce5c60c85c..c7852b5c8e781abb3e236ace9e46b56ffcee982c 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_1_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_i1 (gfc_array_i8 * const restrict, 
        gfc_array_i1 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 710d26097b6e6c100a441ecb5ba2bc7422e81d44..88d50d9751893141979032e1dbc792d75f268afc 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_i16 (gfc_array_i8 * const restrict, 
        gfc_array_i16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index e85fb07ab4bb4cec636172faa8223f56f93fb4bb..b763e3b462e429635454f89876af4762b681f968 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_2_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_i2 (gfc_array_i8 * const restrict, 
        gfc_array_i2 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index bb6d51ee69aa48dcae018c4ead74059d5266bceb..e338364f9511a8f34cd7fb6bdd6734f0d0bf77d2 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_i4 (gfc_array_i8 * const restrict, 
        gfc_array_i4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index d6c6e850ed497d71b6c2dba50949b13bac702cb6..11fd73de774ff75d442b328a9d833a95757ad5ca 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_i8 (gfc_array_i8 * const restrict, 
        gfc_array_i8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 333e57095fdc7f551b26bd25483c27938a2b5152..315c8d7e613d481c3fa6a920836b6d8e3092a7e5 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_10_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_r10 (gfc_array_i8 * const restrict, 
        gfc_array_r10 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index ebb3118864d29155931378d78cfc29e7edfa8b52..6fcc69ec39420507dc9ca57c78646c0600ab58ee 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_r16 (gfc_array_i8 * const restrict, 
        gfc_array_r16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index afc46960059c26b5a843aff6539098f3db5b3b1e..3ecd60ed7ad438d7d6e32e6c9fd7c42dca48f37b 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_r4 (gfc_array_i8 * const restrict, 
        gfc_array_r4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index e6a2feffa97d692aacf38b1641e703df8feb4104..299be1a5c0d378c565c2ac5b9618ed6044a82468 100644 (file)
@@ -47,7 +47,6 @@ maxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ maxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ maxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ maxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mmaxloc0_8_r8 (gfc_array_i8 * const restrict, 
        gfc_array_r8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mmaxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mmaxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mmaxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
            }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
index 2e95fa35d1c56e0f095ff143a0359b743a460020..405162338c7e420f23bcde63f4a4ce88b2d53f8d 100644 (file)
@@ -61,10 +61,6 @@ maxloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ maxloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   {
 
   const GFC_INTEGER_1 *maxval;
-   maxval = base;
+   maxval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ maxloc0_8_s1 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, maxval, len) > 0)
+    if (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0 :
+                                  compare_fcn (base, maxval, len) > 0))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mmaxloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mmaxloc0_8_s1 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (maxval == NULL || compare_fcn (base, maxval, len) > 0))
+  if (*mbase &&
+        (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0:
+                                  compare_fcn (base, maxval, len) > 0)))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
index 5cc1f11fb852fd86172447a7d4c6a7fab8ac7e3a..40ea75d257ffe00e2c92f917245f6c1480de4806 100644 (file)
@@ -61,10 +61,6 @@ maxloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ maxloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   {
 
   const GFC_INTEGER_4 *maxval;
-   maxval = base;
+   maxval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ maxloc0_8_s4 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, maxval, len) > 0)
+    if (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0 :
+                                  compare_fcn (base, maxval, len) > 0))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mmaxloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mmaxloc0_8_s4 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (maxval == NULL || compare_fcn (base, maxval, len) > 0))
+  if (*mbase &&
+        (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0:
+                                  compare_fcn (base, maxval, len) > 0)))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
index ff2124d280322edafa1769dd270a12c7ffef970f..cb04e9417eea8d06dff6c40d1c7dfa1d384bbd0a 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_i1 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index 2b0bd54ba8ac3e91186f8495e0f3454aec5e3af0..871bf028341d4274ac0578ff407470f47d7af605 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index 26c3f142b9f6837b1074574011b8b4aa097fc26f..3bba4bc92979c8ed24c3f8868b5aafb0c25e284f 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_i2 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index aedc22a1cfd9a02dd7d70f63a777dead45a15ef7..043a9874d720429367d569610c6ab28f7809ca03 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index d08561d4aff1acdadf619510d63b5d97a0476150..fe9704fa68beef272a9e99e1058b4bf241f6f76a 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index a5929ee47e4851af246f44745d0e506d02c50c1e..25b0449d5860add94c2c03f01a4f59fbb9fa2273 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_r10 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index 09da74031d153f0fd8d9bc6208927e9e2e4c7468..4b0bddc4104d7c6505dab143a00b8544b3c012e2 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_r16 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index 927830008e2e05415cc03a2da667c019c2e7e68e..9a021a05cfe5e2ef89a47b752061ed272d1fb9c7 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_r4 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index 84c0c650641ac234bdfcfa92efae48721323372b..2cb8db38fb58b27cacaa1f2bd061de6610f9c210 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_16_r8 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
          }
        *dest = result;
       }
index 84b12f3e26ce63a1010771a3eb3f62314f2e3427..ae17ccd788ed912d29daf947e06656bee477c970 100644 (file)
@@ -66,10 +66,6 @@ maxloc1_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ maxloc1_16_s1 (gfc_array_i16 * const restrict retarray,
       {
 
        const GFC_INTEGER_1 *maxval;
-       maxval = base;
-       result = 1;
+       maxval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ maxloc1_16_s1 (gfc_array_i16 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, maxval, string_len) > 0)
+               if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                             compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -244,9 +241,6 @@ mmaxloc1_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mmaxloc1_16_s1 (gfc_array_i16 * const restrict retarray,
            }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, maxval, string_len) > 0)
+               if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                    compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_16)n + 1;
index 70696f2ac3f5765ab99639f5ebb83545f034255c..6b436d64a69859ea1ecce082fb5b8233cc1e9c5e 100644 (file)
@@ -66,10 +66,6 @@ maxloc1_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ maxloc1_16_s4 (gfc_array_i16 * const restrict retarray,
       {
 
        const GFC_INTEGER_4 *maxval;
-       maxval = base;
-       result = 1;
+       maxval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ maxloc1_16_s4 (gfc_array_i16 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, maxval, string_len) > 0)
+               if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                             compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -244,9 +241,6 @@ mmaxloc1_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mmaxloc1_16_s4 (gfc_array_i16 * const restrict retarray,
            }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, maxval, string_len) > 0)
+               if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                    compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_16)n + 1;
index 7fc1f88c2d9da1c40fd2ae7bd7d46cb2cba7dc48..43d541e01f2d7e84a101eac175e951e224580d9a 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index 14b5e5578b8b11e7bcba910079f44237a25e97e2..7d006abbd1426e6dd1ddda97b61dffb6441b08f4 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index 9d5a98ed341228f53fe6d8185e1dbf9d6615f76e..6f3751be02105283b1b1ca0621e31792acd73dc6 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index 23d702850f435208879e830f7af2b315ff7edba2..47c5d825fe85996c248f55046eaf10ec67e3e84f 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index 178a20aa2ff576d4ffc7fddeb59c6a58efd24ea7..e8380aa720691dc70f6b9d92c7a712983d20d6e0 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index f35961338bfcd38621ca6b14c364b6ae9539018c..fe922ba3f2f44dfb7b6764423c25e8522b5fef05 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index a0f283e7cecf11310270e55ced18ef87daaa6840..eeab770df1c50bcc90f938760417d0101a06a0b5 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index aeb4b8f106862bd19af89ba5b06f51b0dcfe3f3d..c0b80b0817dfad7dd69b6847b613b017e3ba8124 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index 43852049c9cd9a44b6fa8e11e9d110fb8008b55c..3560c3b74342381c7042c298416ed94fe99e4e9c 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
          }
        *dest = result;
       }
index b7b7d8cfe935e2b0a449ebad39d827d1010580fe..cdcd7fb265230c6877f5be1be2c99bfae1d8865c 100644 (file)
@@ -66,10 +66,6 @@ maxloc1_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ maxloc1_4_s1 (gfc_array_i4 * const restrict retarray,
       {
 
        const GFC_INTEGER_1 *maxval;
-       maxval = base;
-       result = 1;
+       maxval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ maxloc1_4_s1 (gfc_array_i4 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, maxval, string_len) > 0)
+               if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                             compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -244,9 +241,6 @@ mmaxloc1_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mmaxloc1_4_s1 (gfc_array_i4 * const restrict retarray,
            }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, maxval, string_len) > 0)
+               if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                    compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_4)n + 1;
index da7594993d19f4fd80611f0de0c7605b8152b4a9..f1e79cf90020dd8b338ead275c0733d7a58077fd 100644 (file)
@@ -66,10 +66,6 @@ maxloc1_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ maxloc1_4_s4 (gfc_array_i4 * const restrict retarray,
       {
 
        const GFC_INTEGER_4 *maxval;
-       maxval = base;
-       result = 1;
+       maxval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ maxloc1_4_s4 (gfc_array_i4 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, maxval, string_len) > 0)
+               if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                             compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -244,9 +241,6 @@ mmaxloc1_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mmaxloc1_4_s4 (gfc_array_i4 * const restrict retarray,
            }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, maxval, string_len) > 0)
+               if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                    compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_4)n + 1;
index fa5bc4aadfd347cb3afb3b76676898a2dc9350da..1ff5cd3c90c8c579e6ac71f36ea26d54c14487b8 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index 2cf75312ece95e53d93b9047f518e48daa39d3d2..9341c2744df4ed74ab994cc79ae2f2a052ad21f7 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index e32eafe2f057f1062323aa656528c0be003eef0e..4d443ae595ea28039c3c853b4f15a8a446c8b94f 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index e348550787e8f7c221f634a1a9cca121db6d25d8..2058ab2ad69478485d8ade152f7b4ee8b4ef77a1 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index 802b74d94612866eb44b58c5ecb550a768f040d1..9dc002f6c7244e50368043255911efefa3dd0491 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index bc5f1b1af2c0496fe8656d5d83db00ee68199bb1..1a963d18c56cf629afa43a453e028f635efd0254 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index 54d12030c11345d6d50d3e54df6576be51043065..e04c70e50659c09c08308bf417f05d07b03c1433 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index 5895585c403691b6ca5cec5c9d2c7c54a4c57849..b06820bce61c3199f7280c386336d4763a4904b5 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index 8c79dd46ab072cc3bff640e927ec0c0f998474fd..1963746d42244059e76a18ca9d1ede2a0a89af68 100644 (file)
@@ -54,10 +54,6 @@ maxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ maxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -174,10 +174,12 @@ maxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -246,9 +248,6 @@ mmaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +395,23 @@ mmaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
          }
        *dest = result;
       }
index aab24491ba9ddc7768943553aff8a9a3f80d7c26..2b16e0652456ff83977f10916fdb987b22d4c5c0 100644 (file)
@@ -66,10 +66,6 @@ maxloc1_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ maxloc1_8_s1 (gfc_array_i8 * const restrict retarray,
       {
 
        const GFC_INTEGER_1 *maxval;
-       maxval = base;
-       result = 1;
+       maxval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ maxloc1_8_s1 (gfc_array_i8 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, maxval, string_len) > 0)
+               if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                             compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -244,9 +241,6 @@ mmaxloc1_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mmaxloc1_8_s1 (gfc_array_i8 * const restrict retarray,
            }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, maxval, string_len) > 0)
+               if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                    compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_8)n + 1;
index f02e2a545260f6496ee4e766a4c86e95ab1303ba..c4557e0e001981c3f5a1c121408fd4a1d60b381c 100644 (file)
@@ -66,10 +66,6 @@ maxloc1_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ maxloc1_8_s4 (gfc_array_i8 * const restrict retarray,
       {
 
        const GFC_INTEGER_4 *maxval;
-       maxval = base;
-       result = 1;
+       maxval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ maxloc1_8_s4 (gfc_array_i8 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, maxval, string_len) > 0)
+               if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                             compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -244,9 +241,6 @@ mmaxloc1_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mmaxloc1_8_s4 (gfc_array_i8 * const restrict retarray,
            }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, maxval, string_len) > 0)
+               if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                    compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (GFC_INTEGER_8)n + 1;
index bfba7074bccb08d2c5851c4e0d6d746187d258c0..9efa7cb777843d4989a5e449b70e40ac39f0458f 100644 (file)
@@ -53,7 +53,6 @@ maxloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back, gfc_char
   const GFC_INTEGER_1 *maxval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -62,15 +61,16 @@ maxloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back, gfc_char
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  maxval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) > 0)
+      if (maxval == NULL || (back ? compare_fcn (src, maxval, len) >= 0 :
+                                   compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -95,7 +95,6 @@ mmaxloc2_16_s1 (gfc_array_s1 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -133,7 +132,8 @@ mmaxloc2_16_s1 (gfc_array_s1 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) > 0)
+      if (*mbase && (back ? compare_fcn (src, maxval, len) >= 0 :
+                          compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
index cf1235e92c9bce349cd952080a9abdbdef7b3beb..65573f8da4cfe6ab53e67f9513879c626fe5f3ae 100644 (file)
@@ -53,7 +53,6 @@ maxloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back, gfc_char
   const GFC_INTEGER_4 *maxval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -62,15 +61,16 @@ maxloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back, gfc_char
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  maxval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) > 0)
+      if (maxval == NULL || (back ? compare_fcn (src, maxval, len) >= 0 :
+                                   compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -95,7 +95,6 @@ mmaxloc2_16_s4 (gfc_array_s4 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -133,7 +132,8 @@ mmaxloc2_16_s4 (gfc_array_s4 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) > 0)
+      if (*mbase && (back ? compare_fcn (src, maxval, len) >= 0 :
+                          compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
index e88ecca6eb43a9ec18522032b4aecf59a82f5575..68e02f55134abc1cf20b340474f04b3096ffa76a 100644 (file)
@@ -53,7 +53,6 @@ maxloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
   const GFC_INTEGER_1 *maxval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -62,15 +61,16 @@ maxloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  maxval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) > 0)
+      if (maxval == NULL || (back ? compare_fcn (src, maxval, len) >= 0 :
+                                   compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -95,7 +95,6 @@ mmaxloc2_4_s1 (gfc_array_s1 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -133,7 +132,8 @@ mmaxloc2_4_s1 (gfc_array_s1 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) > 0)
+      if (*mbase && (back ? compare_fcn (src, maxval, len) >= 0 :
+                          compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
index adeba9321ec26bd411603f7443b3ab405322f4ec..aa5a47aed4c61eb74bc23edfe6199f2a63852ed7 100644 (file)
@@ -53,7 +53,6 @@ maxloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
   const GFC_INTEGER_4 *maxval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -62,15 +61,16 @@ maxloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  maxval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) > 0)
+      if (maxval == NULL || (back ? compare_fcn (src, maxval, len) >= 0 :
+                                   compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -95,7 +95,6 @@ mmaxloc2_4_s4 (gfc_array_s4 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -133,7 +132,8 @@ mmaxloc2_4_s4 (gfc_array_s4 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) > 0)
+      if (*mbase && (back ? compare_fcn (src, maxval, len) >= 0 :
+                          compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
index 1a32e13949aa3864c8a9f5339d52f72b5f78e2fc..c9c316017b564ad24f1394de6ba99c3b1e1be262 100644 (file)
@@ -53,7 +53,6 @@ maxloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
   const GFC_INTEGER_1 *maxval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -62,15 +61,16 @@ maxloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  maxval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) > 0)
+      if (maxval == NULL || (back ? compare_fcn (src, maxval, len) >= 0 :
+                                   compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -95,7 +95,6 @@ mmaxloc2_8_s1 (gfc_array_s1 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -133,7 +132,8 @@ mmaxloc2_8_s1 (gfc_array_s1 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) > 0)
+      if (*mbase && (back ? compare_fcn (src, maxval, len) >= 0 :
+                          compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
index ae22a51c52748b8d4ff245dc6b299a7d6fe88566..f707b140c47368ff8f86635aadeb7684a745e19b 100644 (file)
@@ -53,7 +53,6 @@ maxloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
   const GFC_INTEGER_4 *maxval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -62,15 +61,16 @@ maxloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back, gfc_charl
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  maxval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) > 0)
+      if (maxval == NULL || (back ? compare_fcn (src, maxval, len) >= 0 :
+                                   compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -95,7 +95,6 @@ mmaxloc2_8_s4 (gfc_array_s4 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -133,7 +132,8 @@ mmaxloc2_8_s4 (gfc_array_s4 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) > 0)
+      if (*mbase && (back ? compare_fcn (src, maxval, len) >= 0 :
+                          compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
index 2c6b865d60a266a6bc293854c7bd093f89313a1c..86c9fb9018962768b907307391085295de7e3956 100644 (file)
@@ -51,10 +51,6 @@ maxval_i1 (gfc_array_i1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_i1 (gfc_array_i1 * const restrict retarray,
          *dest = (-GFC_INTEGER_1_HUGE-1);
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_i1 (gfc_array_i1 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 060463601a75865d7064d5d2a615ea667f5c4274..30a440e042a7cfcd212e1677f8f12ae65b497681 100644 (file)
@@ -51,10 +51,6 @@ maxval_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_i16 (gfc_array_i16 * const restrict retarray,
          *dest = (-GFC_INTEGER_16_HUGE-1);
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index bcd4343ae0847254281fe26ce30608a898242673..2a329060c39f9ba6eda2cf9e28949eb865f8de32 100644 (file)
@@ -51,10 +51,6 @@ maxval_i2 (gfc_array_i2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_i2 (gfc_array_i2 * const restrict retarray,
          *dest = (-GFC_INTEGER_2_HUGE-1);
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_i2 (gfc_array_i2 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index bef1c291c3544cbc8b48349b040c489ab5fa3d89..2954e8ada4a23f3693de3f48ad7ce148dafefebe 100644 (file)
@@ -51,10 +51,6 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
          *dest = (-GFC_INTEGER_4_HUGE-1);
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 14deb70de4709cadeed9065935c5be0c0fe2f5b4..fde234cfcbfb92092dc05b808685777035529ed8 100644 (file)
@@ -51,10 +51,6 @@ maxval_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_i8 (gfc_array_i8 * const restrict retarray,
          *dest = (-GFC_INTEGER_8_HUGE-1);
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 85d6d83b24ab89ea7e66cd9daac87b7e03fbbb9d..9671fdfc98fe923447d9e3d7bd18f862cb263747 100644 (file)
@@ -51,10 +51,6 @@ maxval_r10 (gfc_array_r10 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_r10 (gfc_array_r10 * const restrict retarray,
          *dest = -GFC_REAL_10_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_r10 (gfc_array_r10 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 18ef36725a8d78fa09c0fe9acb78268076bc7071..14e6ce0d09112d1435b83065ba9db9db03f9a4f5 100644 (file)
@@ -51,10 +51,6 @@ maxval_r16 (gfc_array_r16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_r16 (gfc_array_r16 * const restrict retarray,
          *dest = -GFC_REAL_16_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_r16 (gfc_array_r16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 862fe633c0c67690cbdb8960cce76a008a09f448..9b5dba0981866f4d5447121b34bac691b57e94e5 100644 (file)
@@ -51,10 +51,6 @@ maxval_r4 (gfc_array_r4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_r4 (gfc_array_r4 * const restrict retarray,
          *dest = -GFC_REAL_4_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_r4 (gfc_array_r4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 9315483d39e19be8e820d72db1308cd6ea8cf206..13f491114ab6201a76a8f91b623cb786af164bc0 100644 (file)
@@ -51,10 +51,6 @@ maxval_r8 (gfc_array_r8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ maxval_r8 (gfc_array_r8 * const restrict retarray,
          *dest = -GFC_REAL_8_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
                if (*src >= result)
@@ -236,9 +234,6 @@ mmaxval_r8 (gfc_array_r8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 88720df56f7f9e80fb34015a1c343b5985095b07..1e1cd6180a3830fa54a4ad5d28e4c20ec37a147e 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_i1 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_1_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_i1 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_i1 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_i1 (gfc_array_i16 * const restrict, 
        gfc_array_i1 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_i1 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_i1 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_i1 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_i1 (gfc_array_i16 * const restrict, 
        gfc_array_i1 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_i1);
index 4e2b6d0ca54b9ebfef2132ab7c796c6d4465b000..b3663d6199d4e643c927122993f74a0287961262 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_i16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_i16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_i16 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_i16 (gfc_array_i16 * const restrict, 
        gfc_array_i16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_i16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_i16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_i16 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_i16 (gfc_array_i16 * const restrict, 
        gfc_array_i16 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_i16);
index c9032c7a97031f8741d988d762f95f1a40f253f6..3a173ea6f37f24f3bd58c04edabffb78c9c88967 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_i2 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_2_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_i2 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_i2 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_i2 (gfc_array_i16 * const restrict, 
        gfc_array_i2 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_i2 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_i2 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_i2 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_i2 (gfc_array_i16 * const restrict, 
        gfc_array_i2 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_i2);
index a27405a3ff6016fd59c16cdad9a02a68e43134ec..4141fa1f22f16796cdce8f2b1749291bd476c3db 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_i4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_i4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_i4 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_i4 (gfc_array_i16 * const restrict, 
        gfc_array_i4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_i4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_i4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_i4 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_i4 (gfc_array_i16 * const restrict, 
        gfc_array_i4 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_i4);
index 6874f66ae56b266af1269da1c092defd5a19774b..0d2f3504408461fcf43030bdce56d07d63d28839 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_i8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_i8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_i8 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_i8 (gfc_array_i16 * const restrict, 
        gfc_array_i8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_i8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_i8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_i8 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_i8 (gfc_array_i16 * const restrict, 
        gfc_array_i8 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_i8);
index ad97459d4437d3e392bbb6fcffdb1cb6047627e9..3fd940997986d0ee39423aaa3b1b3178afe176f7 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_r10 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_10_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_r10 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_r10 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_r10 (gfc_array_i16 * const restrict, 
        gfc_array_r10 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_r10 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_r10 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_r10 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_r10 (gfc_array_i16 * const restrict, 
        gfc_array_r10 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_r10);
index f8245ed30597083c9b0b0403c37e6ce286e65843..d04fdda43c96ea74a4ba01497e52114c88c9fcd7 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_r16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_r16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_r16 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_r16 (gfc_array_i16 * const restrict, 
        gfc_array_r16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_r16 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_r16 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_r16 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_r16 (gfc_array_i16 * const restrict, 
        gfc_array_r16 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_r16);
index ed41783dd5e6508b79be3dce948476ce265d2299..8b029151031ebd9b33cd4f3c8502fa08baeeae45 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_r4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_r4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_r4 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_r4 (gfc_array_i16 * const restrict, 
        gfc_array_r4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_r4 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_r4 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_r4 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_r4 (gfc_array_i16 * const restrict, 
        gfc_array_r4 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_r4);
index 0799d4dfca8cfe8d7c389e2d442912726f235f78..45ab7874177d62a8bf61044b367bb83cd28094ee 100644 (file)
@@ -47,7 +47,6 @@ minloc0_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_16_r8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_16_r8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_16_r8 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_16_r8 (gfc_array_i16 * const restrict, 
        gfc_array_r8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_16_r8 (gfc_array_i16 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_16_r8 (gfc_array_i16 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_16_r8 (gfc_array_i16 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_16_r8 (gfc_array_i16 * const restrict, 
        gfc_array_r8 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_16_r8);
index e566d749fb7cfeab8b29f7269712cf7c13eb140b..95a38a6b5d938c257776dd3a1c22e5990ce64795 100644 (file)
@@ -61,10 +61,6 @@ minloc0_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ minloc0_16_s1 (gfc_array_i16 * const restrict retarray,
   {
 
   const GFC_INTEGER_1 *minval;
-   minval = base;
+   minval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ minloc0_16_s1 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, minval, len) < 0)
+    if (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                          compare_fcn (base, minval, len) < 0))
     {
       minval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mminloc0_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mminloc0_16_s1 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (minval == NULL || compare_fcn (base, minval, len) < 0))
+  if (*mbase &&
+      (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                        compare_fcn (base, minval, len) < 0)))
     {
       minval = base;
       for (n = 0; n < rank; n++)
index 2a0b13c240f92a14ddcde5a0ee83f8f067fb8a0d..091afb7a6e9a84d0df9b1d5d548400ece6128a4a 100644 (file)
@@ -61,10 +61,6 @@ minloc0_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ minloc0_16_s4 (gfc_array_i16 * const restrict retarray,
   {
 
   const GFC_INTEGER_4 *minval;
-   minval = base;
+   minval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ minloc0_16_s4 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, minval, len) < 0)
+    if (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                          compare_fcn (base, minval, len) < 0))
     {
       minval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mminloc0_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mminloc0_16_s4 (gfc_array_i16 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (minval == NULL || compare_fcn (base, minval, len) < 0))
+  if (*mbase &&
+      (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                        compare_fcn (base, minval, len) < 0)))
     {
       minval = base;
       for (n = 0; n < rank; n++)
index 577c9ddf6553ba44de1bd17e12af60de9876de19..7120f000d89b3f68f2fac2b013980341329a2925 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_i1 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_1_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_i1 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_i1 (gfc_array_i4 * const restrict, 
        gfc_array_i1 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_i1 (gfc_array_i4 * const restrict, 
        gfc_array_i1 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_i1);
index 48da69e39822231f39a026064bb2049903cb9cde..c9debdbd457e0bff636dde8851de343e18e51e0f 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_i16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_i16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_i16 (gfc_array_i4 * const restrict, 
        gfc_array_i16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_i16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_i16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_i16 (gfc_array_i4 * const restrict, 
        gfc_array_i16 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_i16);
index 815ea85c22197fb739cb0f4eb9e310a95bbb8dc3..55fb58d4021370da63a22f86978fee08d93e4f65 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_i2 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_2_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_i2 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_i2 (gfc_array_i4 * const restrict, 
        gfc_array_i2 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_i2 (gfc_array_i4 * const restrict, 
        gfc_array_i2 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_i2);
index 36b0a58f250af6f7f97ea642c65de91dad4ed5f3..351b4a1cc5c4ad84fa0cf7e0c6897517f5e40991 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_i4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_i4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_i4 (gfc_array_i4 * const restrict, 
        gfc_array_i4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_i4 (gfc_array_i4 * const restrict, 
        gfc_array_i4 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_i4);
index a66280cd0742355e55eeb81616e144b4b3795745..a736c59a105600c317588454c92ce8c6244cd73a 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_i8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_i8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_i8 (gfc_array_i4 * const restrict, 
        gfc_array_i8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_i8 (gfc_array_i4 * const restrict, 
        gfc_array_i8 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_i8);
index 461ad0d477ba0b1cd3c9a00f753c494f176836a7..f714417518b9c9acdec1ade640365ca755b64cc3 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_r10 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_10_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_r10 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_r10 (gfc_array_i4 * const restrict, 
        gfc_array_r10 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_r10 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_r10 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_r10 (gfc_array_i4 * const restrict, 
        gfc_array_r10 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_r10);
index 27e6d1d6a423276e0e602635cb221377a485910f..7d7ece40a957a0121a8cfa3663143f535465ddf6 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_r16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_r16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_r16 (gfc_array_i4 * const restrict, 
        gfc_array_r16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_r16 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_r16 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_r16 (gfc_array_i4 * const restrict, 
        gfc_array_r16 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_r16);
index 1b85544a292f07530dc63134f42a4650f07c1c0a..74757394d3331c3f9fe4d89ae5b54fe883f5ade5 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_r4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_r4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_r4 (gfc_array_i4 * const restrict, 
        gfc_array_r4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_r4 (gfc_array_i4 * const restrict, 
        gfc_array_r4 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_r4);
index 7c6d6bfbec2b091810fd3f8aac05fe4ab3a8a167..0ac6e6b3264cf4a386f9956e7e77833298469682 100644 (file)
@@ -47,7 +47,6 @@ minloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_4_r8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_4_r8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_4_r8 (gfc_array_i4 * const restrict, 
        gfc_array_r8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_4_r8 (gfc_array_i4 * const restrict, 
        gfc_array_r8 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_4_r8);
index 4d58df41b4f97ec08c26f797683a3b1f4f09cfcf..aeb0ae9f425f98116a8c03b6efe814b85bb48b0a 100644 (file)
@@ -61,10 +61,6 @@ minloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ minloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   {
 
   const GFC_INTEGER_1 *minval;
-   minval = base;
+   minval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ minloc0_4_s1 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, minval, len) < 0)
+    if (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                          compare_fcn (base, minval, len) < 0))
     {
       minval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mminloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mminloc0_4_s1 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (minval == NULL || compare_fcn (base, minval, len) < 0))
+  if (*mbase &&
+      (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                        compare_fcn (base, minval, len) < 0)))
     {
       minval = base;
       for (n = 0; n < rank; n++)
index bea56c06b3d3662d3c94f8513167ee393bd140d4..f5b5906586355bb2ae445cd2354a6845e1e6f9a6 100644 (file)
@@ -61,10 +61,6 @@ minloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ minloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   {
 
   const GFC_INTEGER_4 *minval;
-   minval = base;
+   minval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ minloc0_4_s4 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, minval, len) < 0)
+    if (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                          compare_fcn (base, minval, len) < 0))
     {
       minval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mminloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mminloc0_4_s4 (gfc_array_i4 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (minval == NULL || compare_fcn (base, minval, len) < 0))
+  if (*mbase &&
+      (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                        compare_fcn (base, minval, len) < 0)))
     {
       minval = base;
       for (n = 0; n < rank; n++)
index b0bccc89b991466558621aec513ae21877065289..46dfa7807fda33b67b1c245a6a5da87eb0a871cc 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_i1 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_1_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_i1 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_i1 (gfc_array_i8 * const restrict, 
        gfc_array_i1 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_i1 (gfc_array_i8 * const restrict, 
        gfc_array_i1 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_i1);
index b4fb041b4a63bf462428aa86a7c1aa069c305e14..c3da87d0e76c3a52cc3f9a0990cc3696a9d2ce8b 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_i16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_i16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_i16 (gfc_array_i8 * const restrict, 
        gfc_array_i16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_i16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_i16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_i16 (gfc_array_i8 * const restrict, 
        gfc_array_i16 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_i16);
index 13b39040f053f488edbb3952b92900018686ef48..8455b7d406dcedc4c0d6285161a558be839f3f34 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_i2 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_2_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_i2 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_i2 (gfc_array_i8 * const restrict, 
        gfc_array_i2 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_i2 (gfc_array_i8 * const restrict, 
        gfc_array_i2 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_i2);
index 5d4dc06353e35eb792205aac35566dd5ee728686..2b02216748275d4ec4df0a97b794ad0c01c1b243 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_i4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_i4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_i4 (gfc_array_i8 * const restrict, 
        gfc_array_i4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_i4 (gfc_array_i8 * const restrict, 
        gfc_array_i4 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_i4);
index d4cf9a4a977367a8ed60d2618cff7ddb7b44c3d4..55aafa4c634030fa34e356b7f8125f6c68b846a3 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_i8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_INTEGER_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_i8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_i8 (gfc_array_i8 * const restrict, 
        gfc_array_i8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_i8 (gfc_array_i8 * const restrict, 
        gfc_array_i8 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_i8);
index c74fe0f6e8bd812f36ab5edb0e62451e761925e2..14b8a62f5109e3acd0b16361a4666542e127823d 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_r10 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_10_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_r10 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_r10 (gfc_array_i8 * const restrict, 
        gfc_array_r10 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_r10 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_r10 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_r10 (gfc_array_i8 * const restrict, 
        gfc_array_r10 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_r10);
index 0ce3fd7b803d639bfe53ac6eff27fc862dbdfed9..e5c48fa77d62c0f0b090c77205fab15b86c2e9cf 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_r16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_16_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_r16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_r16 (gfc_array_i8 * const restrict, 
        gfc_array_r16 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_r16 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_r16 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_r16 (gfc_array_i8 * const restrict, 
        gfc_array_r16 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_r16);
index 66c5b74e40ada80b1e0d8454162eb766b0896e81..caba6a7d49b025dd9a2dcae5861fc522e9979354 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_r4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_4_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_r4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_r4 (gfc_array_i8 * const restrict, 
        gfc_array_r4 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_r4 (gfc_array_i8 * const restrict, 
        gfc_array_r4 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_r4);
index bd6b217f7f99817d70d3efc0238884ef465a2846..876e9cbae29e1f42f55190dab0c7763ad883d5be 100644 (file)
@@ -47,7 +47,6 @@ minloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -101,13 +100,9 @@ minloc0_8_r8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
 #if defined(GFC_REAL_8_QUIET_NAN)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -126,15 +121,29 @@ minloc0_8_r8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
            }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
+           }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -167,7 +176,6 @@ minloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void mminloc0_8_r8 (gfc_array_i8 * const restrict, 
        gfc_array_r8 * const restrict, gfc_array_l1 * const restrict,
        GFC_LOGICAL_4);
@@ -190,7 +198,6 @@ mminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -261,12 +268,8 @@ mminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
 #endif
   while (base)
     {
-      do
-       {
          /* Implementation start.  */
 
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -294,14 +297,28 @@ mminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
            }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
          /* Implementation end.  */
          /* Advance to the next element.  */
          base += sstride[0];
@@ -337,7 +354,6 @@ mminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   }
 }
 
-
 extern void sminloc0_8_r8 (gfc_array_i8 * const restrict, 
        gfc_array_r8 * const restrict, GFC_LOGICAL_4 *, GFC_LOGICAL_4);
 export_proto(sminloc0_8_r8);
index dd9be96f3dc7403e99787fb7938143f231ab88a9..68b1800b4a9bd4cdd344b1fc3c9026a7a7a7e1b6 100644 (file)
@@ -61,10 +61,6 @@ minloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ minloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   {
 
   const GFC_INTEGER_1 *minval;
-   minval = base;
+   minval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ minloc0_8_s1 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, minval, len) < 0)
+    if (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                          compare_fcn (base, minval, len) < 0))
     {
       minval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mminloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mminloc0_8_s1 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (minval == NULL || compare_fcn (base, minval, len) < 0))
+  if (*mbase &&
+      (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                        compare_fcn (base, minval, len) < 0)))
     {
       minval = base;
       for (n = 0; n < rank; n++)
index 46d29ec0b88c505b151955e2cafd39a801075f67..715e074312a7053ed0508675c5c0d6003394c8c4 100644 (file)
@@ -61,10 +61,6 @@ minloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -107,7 +103,7 @@ minloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   {
 
   const GFC_INTEGER_4 *minval;
-   minval = base;
+   minval = NULL;
 
   while (base)
     {
@@ -115,7 +111,8 @@ minloc0_8_s4 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (compare_fcn (base, minval, len) < 0)
+    if (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                          compare_fcn (base, minval, len) < 0))
     {
       minval = base;
       for (n = 0; n < rank; n++)
@@ -177,9 +174,6 @@ mminloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -250,7 +244,9 @@ mminloc0_8_s4 (gfc_array_i8 * const restrict retarray,
        {
          /* Implementation start.  */
 
-  if (*mbase && (minval == NULL || compare_fcn (base, minval, len) < 0))
+  if (*mbase &&
+      (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                        compare_fcn (base, minval, len) < 0)))
     {
       minval = base;
       for (n = 0; n < rank; n++)
index 20197c4ae0d24b2653817dd8d6099590103f15dc..132b2f1abae3018516db07b23937f7e50cc2cb9c 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_i1 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_i1 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_i1 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_i1 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index fc718a894c6d43ecd037764e9ad0c46860320ee7..83a8d5928c54b62ea837f4b0860c06eb2fa89c83 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_i16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_i16 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_i16 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index e9352b1d7304ff6342b14c433bb1d908e439ef21..a22e2c71770ef3f54cb2d7b5881d5ee64d996f65 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_i2 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_i2 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_i2 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_i2 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index 9faa5b3947c39f05333ea45216ecae0eab08b0a7..f384ff10f0ab242159b809c988f6e02bad94b505 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_i4 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_i4 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_i4 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_i4 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index 6ad4abedf04fd332fe4084ce0670747676bc489b..72b75b0329d92829b8ebc7201d532be929a98de1 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_i8 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_i8 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_i8 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_i8 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index 930d077cdf9f144f13b4237e4b2d1f86ce1cb6f7..53cf97dbd24bab21f1b1f2b0808e401e742f3718 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_r10 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_r10 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_r10 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_r10 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index 2003d8ff9ac3ad2f036e73ccbe49f39f443c8910..93193cf92d6e31584f55dfca404a35a260b8cf18 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_r16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_r16 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_r16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_r16 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index 7b9698342cbb258fabcca2ab61675ad77e6ec7fa..14369b697dcee7de2a4021ea8835b81549235be9 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_r4 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_r4 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_r4 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_r4 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index d6839157cb1441b7ce0d686bcda8f781e35d4ffd..8dfe8ec3effab8728514622f26b04a84c399642f 100644 (file)
@@ -54,10 +54,6 @@ minloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_16_r8 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_16_r8 (gfc_array_i16 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_16_r8 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_16_r8 (gfc_array_i16 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_16)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_16)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_16) n + 1;
+                     }
          }
        *dest = result;
       }
index 898d124fdd35c7865bab69f1d8353c1c8475bb48..5fea33ae1f71a81870b5adf47ab2769a19459398 100644 (file)
@@ -66,10 +66,6 @@ minloc1_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ minloc1_16_s1 (gfc_array_i16 * const restrict retarray,
       {
 
        const GFC_INTEGER_1 *minval;
-       minval = base;
-       result = 1;
+       minval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ minloc1_16_s1 (gfc_array_i16 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, minval, string_len) < 0)
+               if (minval == NULL || (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                             compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -244,9 +241,6 @@ mminloc1_16_s1 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mminloc1_16_s1 (gfc_array_i16 * const restrict retarray,
             }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, minval, string_len) < 0)
+               if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                    compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_16)n + 1;
index 82eb258e00907c5ce44e2b4115ed711c41abe2ba..46411b113bb355c7cc6f1d125dccddb7d82fd3fa 100644 (file)
@@ -66,10 +66,6 @@ minloc1_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ minloc1_16_s4 (gfc_array_i16 * const restrict retarray,
       {
 
        const GFC_INTEGER_4 *minval;
-       minval = base;
-       result = 1;
+       minval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ minloc1_16_s4 (gfc_array_i16 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, minval, string_len) < 0)
+               if (minval == NULL || (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                             compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_16)n + 1;
@@ -244,9 +241,6 @@ mminloc1_16_s4 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mminloc1_16_s4 (gfc_array_i16 * const restrict retarray,
             }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, minval, string_len) < 0)
+               if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                    compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_16)n + 1;
index b36f2681fe4bf69db54bcdbe7512a44c9774f1c9..ce9b926f22d0f681a54dfac6af39cdf771b2fdcc 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_i1 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_i1 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index b4454e1aca746ff0f1b3bcd207285a650847a988..871aa374a1a222769964df9dec44ea8b51f46649 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_i16 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_i16 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_i16 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_i16 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index f8ab77ccded5e53684890aadb715e38d6a9430ba..16f7e5ef7b7dac89b89c080363608c3b68996502 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_i2 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_i2 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index 6523d01fc9e0f4c070399754798166c16f25cc4e..08d919aabd09b750d86eeeddf4eb9bcf87df6e2d 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_i4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_i4 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index ab1b6bae8b34342c2881471aaf5b20abaddcd138..807f6fa016bf45920e1169b725102968cc40e9e0 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_i8 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_i8 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index a481ec459d3be66620f9b168207d7b0f4724e40c..b2430c4ea6e57092d3fed4f3db6ca9a18b332153 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_r10 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_r10 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_r10 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_r10 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index f5fcb666c599a1c8688d275d01427603c919ac01..e81a0a77e90ad47c32a7169c3809195c268087eb 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_r16 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_r16 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_r16 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_r16 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index 212aa2541cb40f0a3df611a3ed6b6e5b2149585b..b82aeeaf730732c6e91664c13f756fd48c7fef7a 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_r4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_r4 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index 1fa41f2e084f95a22678abe01c3e9b4eb7b89456..3476a5e5adb6a47aae2f94281de3e59932d4fe21 100644 (file)
@@ -54,10 +54,6 @@ minloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_4_r8 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_4_r8 (gfc_array_i4 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_4)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_4)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_4) n + 1;
+                     }
          }
        *dest = result;
       }
index 1b7e5514cc87fc1c3891e9e7a793b6f89515a27b..f0c583ffa52abf09f4d903b6a6ba8acf17b6101e 100644 (file)
@@ -66,10 +66,6 @@ minloc1_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ minloc1_4_s1 (gfc_array_i4 * const restrict retarray,
       {
 
        const GFC_INTEGER_1 *minval;
-       minval = base;
-       result = 1;
+       minval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ minloc1_4_s1 (gfc_array_i4 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, minval, string_len) < 0)
+               if (minval == NULL || (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                             compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -244,9 +241,6 @@ mminloc1_4_s1 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mminloc1_4_s1 (gfc_array_i4 * const restrict retarray,
             }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, minval, string_len) < 0)
+               if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                    compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_4)n + 1;
index b3c6010efdae4b154639ead0be6d7cefce07c8ce..eaafec1018bdf737838bfd96f995c303d0323897 100644 (file)
@@ -66,10 +66,6 @@ minloc1_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ minloc1_4_s4 (gfc_array_i4 * const restrict retarray,
       {
 
        const GFC_INTEGER_4 *minval;
-       minval = base;
-       result = 1;
+       minval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ minloc1_4_s4 (gfc_array_i4 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, minval, string_len) < 0)
+               if (minval == NULL || (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                             compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_4)n + 1;
@@ -244,9 +241,6 @@ mminloc1_4_s4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mminloc1_4_s4 (gfc_array_i4 * const restrict retarray,
             }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, minval, string_len) < 0)
+               if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                    compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_4)n + 1;
index 66771b345231bbf366c9ad1d837176dfad60315a..f04fd8d72d82b0843578ffebf4150c0770cbff70 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_i1 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_i1 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index 8c7bc1908e2318b9e9e608daed151ab41914bae5..d42c5feea2ea8c7a4ffa740eaf3644e6531d490e 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_i16 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_i16 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_i16 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_i16 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index e31acb53b72826cc550e7d07e34b7b90a7cd7bdd..134617d49f37895b34d71ffb7b7d3dc13efa253f 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_i2 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_i2 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index 4402bdd8ffe75b8f27743a8fc468018a22da40a3..20f0595ae1d1f5a52b92a0f0fc6f17f1c9e0fce5 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_i4 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_i4 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index 172cbb5d138a781d0355e04018117fecec0c45dc..653393c532eb838d1da28e67db5d423a49ea9722 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_i8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_i8 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index 557e87616b61643f219cf0377863324fccaac342..a51a290db1ff95569183aa8f4062eeda4aaeb6c1 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_r10 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_r10 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_r10 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_r10 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index 184dd1e098f3883156a915d3e5ffd9948fbc1a62..e8e1b7452ad597e8ddfcde511f926c2f7ceea8be 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_r16 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_r16 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_r16 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_r16 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index fd81020925812a5a739c48a52d7012f3f7d74bbb..f4a27e1c50d6e5cb7afe15317978529f39f1a0e2 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_r4 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_r4 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index fc0ff7c907691315a388299b2816bccdbe099315..4cd0df1209f0eeada13459d42432c39430eb9ce9 100644 (file)
@@ -54,10 +54,6 @@ minloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,10 +159,14 @@ minloc1_8_r8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -174,14 +174,26 @@ minloc1_8_r8 (gfc_array_i8 * const restrict retarray,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8) n + 1;
+                   }
              }
            
            *dest = result;
@@ -246,9 +258,6 @@ mminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -396,13 +405,23 @@ mminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (GFC_INTEGER_8)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (GFC_INTEGER_8)n + 1;
-                 }
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (GFC_INTEGER_8) n + 1;
+                     }
          }
        *dest = result;
       }
index b5b4fd506746a04afa2b9ac2691f706319079db1..ee2547bc406cb4237fe3de2562d17aa2a5f35dec 100644 (file)
@@ -66,10 +66,6 @@ minloc1_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ minloc1_8_s1 (gfc_array_i8 * const restrict retarray,
       {
 
        const GFC_INTEGER_1 *minval;
-       minval = base;
-       result = 1;
+       minval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ minloc1_8_s1 (gfc_array_i8 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, minval, string_len) < 0)
+               if (minval == NULL || (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                             compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -244,9 +241,6 @@ mminloc1_8_s1 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mminloc1_8_s1 (gfc_array_i8 * const restrict retarray,
             }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, minval, string_len) < 0)
+               if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                    compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_8)n + 1;
index 4181630eca276e3383d3a6da4f8410a234c1445b..605c5de3aefbdb9848ae2c2a593b34116f05488b 100644 (file)
@@ -66,10 +66,6 @@ minloc1_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -165,8 +161,8 @@ minloc1_8_s4 (gfc_array_i8 * const restrict retarray,
       {
 
        const GFC_INTEGER_4 *minval;
-       minval = base;
-       result = 1;
+       minval = NULL;
+       result = 0;
        if (len <= 0)
          *dest = 0;
        else
@@ -174,7 +170,8 @@ minloc1_8_s4 (gfc_array_i8 * const restrict retarray,
            for (n = 0; n < len; n++, src += delta)
              {
 
-               if (compare_fcn (src, minval, string_len) < 0)
+               if (minval == NULL || (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                             compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_8)n + 1;
@@ -244,9 +241,6 @@ mminloc1_8_s4 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
@@ -377,7 +371,8 @@ mminloc1_8_s4 (gfc_array_i8 * const restrict retarray,
             }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, minval, string_len) < 0)
+               if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                    compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (GFC_INTEGER_8)n + 1;
index 3685603ecc27304f18ef126fe1b3e463df932a85..30fdd82d17809fef58b8e3bb23c5cf1e25503ef4 100644 (file)
@@ -51,10 +51,9 @@ minloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back,
   index_type sstride;
   index_type extent;
   const GFC_INTEGER_1 *src;
-  const GFC_INTEGER_1 *maxval;
+  const GFC_INTEGER_1 *minval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -63,15 +62,16 @@ minloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back,
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  minval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) < 0)
+      if (minval == NULL || (back ? compare_fcn (src, minval, len) <= 0 :
+                                   compare_fcn (src, minval, len) < 0))
       {
         ret = i;
-        maxval = src;
+        minval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -96,7 +96,6 @@ mminloc2_16_s1 (gfc_array_s1 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert (back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -134,7 +133,9 @@ mminloc2_16_s1 (gfc_array_s1 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) < 0)
+
+      if (*mbase && (back ? compare_fcn (src, maxval, len) <= 0 :
+                           compare_fcn (src, maxval, len) < 0))
       {
         ret = i;
         maxval = src;
index 256784fd8cef68aa7d009de257db55e754aeabe5..4b0b873bd18356f047f08b067b51b54088d50255 100644 (file)
@@ -51,10 +51,9 @@ minloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back,
   index_type sstride;
   index_type extent;
   const GFC_INTEGER_4 *src;
-  const GFC_INTEGER_4 *maxval;
+  const GFC_INTEGER_4 *minval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -63,15 +62,16 @@ minloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back,
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  minval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) < 0)
+      if (minval == NULL || (back ? compare_fcn (src, minval, len) <= 0 :
+                                   compare_fcn (src, minval, len) < 0))
       {
         ret = i;
-        maxval = src;
+        minval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -96,7 +96,6 @@ mminloc2_16_s4 (gfc_array_s4 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert (back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -134,7 +133,9 @@ mminloc2_16_s4 (gfc_array_s4 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) < 0)
+
+      if (*mbase && (back ? compare_fcn (src, maxval, len) <= 0 :
+                           compare_fcn (src, maxval, len) < 0))
       {
         ret = i;
         maxval = src;
index 1ba34d1712e2aab6908dfc9146eea8cde46adad0..f4c8bb31e61ac0f32f7c65386a0bb4c7664f18bb 100644 (file)
@@ -51,10 +51,9 @@ minloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back,
   index_type sstride;
   index_type extent;
   const GFC_INTEGER_1 *src;
-  const GFC_INTEGER_1 *maxval;
+  const GFC_INTEGER_1 *minval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -63,15 +62,16 @@ minloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back,
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  minval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) < 0)
+      if (minval == NULL || (back ? compare_fcn (src, minval, len) <= 0 :
+                                   compare_fcn (src, minval, len) < 0))
       {
         ret = i;
-        maxval = src;
+        minval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -96,7 +96,6 @@ mminloc2_4_s1 (gfc_array_s1 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert (back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -134,7 +133,9 @@ mminloc2_4_s1 (gfc_array_s1 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) < 0)
+
+      if (*mbase && (back ? compare_fcn (src, maxval, len) <= 0 :
+                           compare_fcn (src, maxval, len) < 0))
       {
         ret = i;
         maxval = src;
index cd5053d71ff43a9486745669ec4db3641e408a7d..8e973f0b1d003633de0115b275aa76f56c2f3eeb 100644 (file)
@@ -51,10 +51,9 @@ minloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back,
   index_type sstride;
   index_type extent;
   const GFC_INTEGER_4 *src;
-  const GFC_INTEGER_4 *maxval;
+  const GFC_INTEGER_4 *minval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -63,15 +62,16 @@ minloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back,
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  minval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) < 0)
+      if (minval == NULL || (back ? compare_fcn (src, minval, len) <= 0 :
+                                   compare_fcn (src, minval, len) < 0))
       {
         ret = i;
-        maxval = src;
+        minval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -96,7 +96,6 @@ mminloc2_4_s4 (gfc_array_s4 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert (back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -134,7 +133,9 @@ mminloc2_4_s4 (gfc_array_s4 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) < 0)
+
+      if (*mbase && (back ? compare_fcn (src, maxval, len) <= 0 :
+                           compare_fcn (src, maxval, len) < 0))
       {
         ret = i;
         maxval = src;
index 5c73d89f8e750873f284d4d784ba9d15937a15de..44b65bf24af8304bed223b72ec626af55cf6514a 100644 (file)
@@ -51,10 +51,9 @@ minloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back,
   index_type sstride;
   index_type extent;
   const GFC_INTEGER_1 *src;
-  const GFC_INTEGER_1 *maxval;
+  const GFC_INTEGER_1 *minval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -63,15 +62,16 @@ minloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 back,
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  minval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) < 0)
+      if (minval == NULL || (back ? compare_fcn (src, minval, len) <= 0 :
+                                   compare_fcn (src, minval, len) < 0))
       {
         ret = i;
-        maxval = src;
+        minval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -96,7 +96,6 @@ mminloc2_8_s1 (gfc_array_s1 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert (back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -134,7 +133,9 @@ mminloc2_8_s1 (gfc_array_s1 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) < 0)
+
+      if (*mbase && (back ? compare_fcn (src, maxval, len) <= 0 :
+                           compare_fcn (src, maxval, len) < 0))
       {
         ret = i;
         maxval = src;
index 9b40c9140cb563471966a26750917d4381ce1312..f6f9341bcbb5ab2ab04833d7f9db38bb931303ed 100644 (file)
@@ -51,10 +51,9 @@ minloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back,
   index_type sstride;
   index_type extent;
   const GFC_INTEGER_4 *src;
-  const GFC_INTEGER_4 *maxval;
+  const GFC_INTEGER_4 *minval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -63,15 +62,16 @@ minloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 back,
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  minval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) < 0)
+      if (minval == NULL || (back ? compare_fcn (src, minval, len) <= 0 :
+                                   compare_fcn (src, minval, len) < 0))
       {
         ret = i;
-        maxval = src;
+        minval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -96,7 +96,6 @@ mminloc2_8_s4 (gfc_array_s4 * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert (back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -134,7 +133,9 @@ mminloc2_8_s4 (gfc_array_s4 * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) < 0)
+
+      if (*mbase && (back ? compare_fcn (src, maxval, len) <= 0 :
+                           compare_fcn (src, maxval, len) < 0))
       {
         ret = i;
         maxval = src;
index 7bb6f81b0e7241e8f927d435ead484821b2efc31..d78c04603d03d9c56677a1d77d500091ac71f14f 100644 (file)
@@ -51,10 +51,6 @@ minval_i1 (gfc_array_i1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_i1 (gfc_array_i1 * const restrict retarray,
          *dest = GFC_INTEGER_1_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_1_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_i1 (gfc_array_i1 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index b2608bc102dfde845a19e14c2c1026f37f5e917b..1dc3cf57281c2d40f9b51d1e1ee95110140b6488 100644 (file)
@@ -51,10 +51,6 @@ minval_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_i16 (gfc_array_i16 * const restrict retarray,
          *dest = GFC_INTEGER_16_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_16_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 6539ae10b6013563fe68fe23d22b938aa0bb11e2..ca8f11028e124c783e314a7e67bb746aa2d82281 100644 (file)
@@ -51,10 +51,6 @@ minval_i2 (gfc_array_i2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_i2 (gfc_array_i2 * const restrict retarray,
          *dest = GFC_INTEGER_2_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_2_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_i2 (gfc_array_i2 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index e2c16d2e8dab6475aef634077ab270e952dc549d..59fc3b6a5be2dc7d15dafa0e3c15319fbfc217e8 100644 (file)
@@ -51,10 +51,6 @@ minval_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_i4 (gfc_array_i4 * const restrict retarray,
          *dest = GFC_INTEGER_4_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_4_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 9caafd97e04ceb2bf8fc55e784bb897528626bd9..7f6e5de483d660a280e0c018d7010e482ada9c47 100644 (file)
@@ -51,10 +51,6 @@ minval_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_i8 (gfc_array_i8 * const restrict retarray,
          *dest = GFC_INTEGER_8_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_INTEGER_8_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 308f64b25b30f241881c1dc65b3ced5bd81c04a3..5a91dd23f4e14f894f5213d2d356eae74b2277f8 100644 (file)
@@ -51,10 +51,6 @@ minval_r10 (gfc_array_r10 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_r10 (gfc_array_r10 * const restrict retarray,
          *dest = GFC_REAL_10_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_10_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_r10 (gfc_array_r10 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 948aee092cf42c6ae6e9902221fefdcd960e1a29..3580e3098353994bf6a55968049848c08271c224 100644 (file)
@@ -51,10 +51,6 @@ minval_r16 (gfc_array_r16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_r16 (gfc_array_r16 * const restrict retarray,
          *dest = GFC_REAL_16_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_16_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_r16 (gfc_array_r16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index b52a3e80f4dc59df0903f41d21dab6a5fc20cbb2..d5c191e1b8cff452751ebb21742cf7a84be3ab41 100644 (file)
@@ -51,10 +51,6 @@ minval_r4 (gfc_array_r4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_r4 (gfc_array_r4 * const restrict retarray,
          *dest = GFC_REAL_4_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_4_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_r4 (gfc_array_r4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 34caf05fc0c68ef695cf7bc71f50df0222019240..b53093c53ec7ba4846c2a14856230a7788487f0b 100644 (file)
@@ -51,10 +51,6 @@ minval_r8 (gfc_array_r8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -158,8 +154,10 @@ minval_r8 (gfc_array_r8 * const restrict retarray,
          *dest = GFC_REAL_8_HUGE;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
 #if defined (GFC_REAL_8_QUIET_NAN)
                if (*src <= result)
@@ -236,9 +234,6 @@ mminval_r8 (gfc_array_r8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index b6e5a4a51d300b64e3aaebe9b6bd5c9f018400fc..7e24f36acb9ed0e9d563dcb6d13542df724e0ced 100644 (file)
@@ -54,10 +54,6 @@ norm2_r10 (gfc_array_r10 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -159,8 +155,10 @@ norm2_r10 (gfc_array_r10 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
          if (*src != 0)
            {
index 32237dbd6d8c994dfeb59dad812fb70b81c0d152..e796d642d97d154a71945b4caf8a2e6f4490a02d 100644 (file)
@@ -58,10 +58,6 @@ norm2_r16 (gfc_array_r16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -163,8 +159,10 @@ norm2_r16 (gfc_array_r16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
          if (*src != 0)
            {
index 504d31306e9ba886e69bb39319d457031a554171..313bda300fab7d89397b2922c81cbe8b54f976e5 100644 (file)
@@ -54,10 +54,6 @@ norm2_r4 (gfc_array_r4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -159,8 +155,10 @@ norm2_r4 (gfc_array_r4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
          if (*src != 0)
            {
index 60e707f920685dd8ee8b917183d5a337200e608f..140e93a52707ecb0aa7b76c4b5f21f6a4596a5ab 100644 (file)
@@ -54,10 +54,6 @@ norm2_r8 (gfc_array_r8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -159,8 +155,10 @@ norm2_r8 (gfc_array_r8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
          if (*src != 0)
            {
index 292079942503b1bf83c847edbd42a2fb277bed5e..7f62a936181f646408a0f909a46ceadf9edb0cf5 100644 (file)
@@ -51,10 +51,6 @@ parity_l1 (gfc_array_l1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ parity_l1 (gfc_array_l1 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result = result != *src;
              }
index c1ac0b26f051974ff03651acfe84f961b49a3854..5b2cb386d31d0e326e5291bec4a3029edb3ab889 100644 (file)
@@ -51,10 +51,6 @@ parity_l16 (gfc_array_l16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ parity_l16 (gfc_array_l16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result = result != *src;
              }
index c588e721a6eadeb62ad9a83db6bbfb2358993e3b..daf56b14aa1eff6ca127782403400718860873fb 100644 (file)
@@ -51,10 +51,6 @@ parity_l2 (gfc_array_l2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ parity_l2 (gfc_array_l2 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result = result != *src;
              }
index 0acb039c1af84c07922f681b3995cacca5723a44..3ddb70e622f21a6173c94a02439e82d8df535989 100644 (file)
@@ -51,10 +51,6 @@ parity_l4 (gfc_array_l4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ parity_l4 (gfc_array_l4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result = result != *src;
              }
index 84623dffe1b178df9fcdffdc852edebc4c0d196b..ac1ae43c8ae720a8b7a45adfaa3c3d397d056660 100644 (file)
@@ -51,10 +51,6 @@ parity_l8 (gfc_array_l8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ parity_l8 (gfc_array_l8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result = result != *src;
              }
index 38e8251861e4ad6a114e54e4871d7aaae4793bc8..bd41da8beed20ff2bf0587a93caf99f29bab4e5a 100644 (file)
@@ -51,10 +51,6 @@ product_c10 (gfc_array_c10 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_c10 (gfc_array_c10 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_c10 (gfc_array_c10 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index d1c04ec9793ed6eafbffee38bc0c1072bba22264..47f6dc016f202a7b5bf7e0d31c5be992301c68bd 100644 (file)
@@ -51,10 +51,6 @@ product_c16 (gfc_array_c16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_c16 (gfc_array_c16 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_c16 (gfc_array_c16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index d19cfaf6d895676c70a0500b1021a088aea49edc..d3d705b36b9e18ac255cbc9d57bf52c8512e89b8 100644 (file)
@@ -51,10 +51,6 @@ product_c4 (gfc_array_c4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_c4 (gfc_array_c4 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_c4 (gfc_array_c4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index ed1e12afba755d2b078c2838cf785a76d4776d1d..2ff0e8ca9e9d228de05c72dbee2f5117b83b5c29 100644 (file)
@@ -51,10 +51,6 @@ product_c8 (gfc_array_c8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_c8 (gfc_array_c8 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_c8 (gfc_array_c8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 2e86e99e569d3b042e0530e19fb8183f856bfe57..73cbbeb13064fd40bec6666f5b04d5e604006394 100644 (file)
@@ -51,10 +51,6 @@ product_i1 (gfc_array_i1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_i1 (gfc_array_i1 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_i1 (gfc_array_i1 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index f23890ef740dccb3f98a6f457a26e856ffffe2cd..cefa13f202782eb4a6eb5bc6e1901ad62b650997 100644 (file)
@@ -51,10 +51,6 @@ product_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_i16 (gfc_array_i16 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 762e5486ac6b404aea04dba335f813f26f0d9138..b135023b261510d8cee8e295f493778a248fa4b5 100644 (file)
@@ -51,10 +51,6 @@ product_i2 (gfc_array_i2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_i2 (gfc_array_i2 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_i2 (gfc_array_i2 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index ecf047029d5c3d2e693eb284e05ae855827db63b..78a513bfbc8057c4fec38757ebce136e290d51fe 100644 (file)
@@ -51,10 +51,6 @@ product_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_i4 (gfc_array_i4 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index a9530ec6907706499ddeedb8a45d5fe8a31fc915..044c50663615cd49eaf9a59a565c4a7239b2a7ec 100644 (file)
@@ -51,10 +51,6 @@ product_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_i8 (gfc_array_i8 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 613ed18e9e40926dbc0e0401b5cd8c77e57b8026..067890ebfa768ffe1fbdc64610f7703a30d31ade 100644 (file)
@@ -51,10 +51,6 @@ product_r10 (gfc_array_r10 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_r10 (gfc_array_r10 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_r10 (gfc_array_r10 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 9befd51edc4b326e85b9a5fd2365bc37940f1231..2641379f02f72219e01bb4b8ee9002331e486405 100644 (file)
@@ -51,10 +51,6 @@ product_r16 (gfc_array_r16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_r16 (gfc_array_r16 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_r16 (gfc_array_r16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 5e356ee8bfca03916a314a68ffdd7c14518c6a17..6f104b2ebbaa076df9ddc1d1d09d4071fb26ee76 100644 (file)
@@ -51,10 +51,6 @@ product_r4 (gfc_array_r4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_r4 (gfc_array_r4 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_r4 (gfc_array_r4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 4e98cfa113ba5b6342276a10f5882860ff90c949..d70f88c41e9c2cae7de6efc9b400e2039797c90d 100644 (file)
@@ -51,10 +51,6 @@ product_r8 (gfc_array_r8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ product_r8 (gfc_array_r8 * const restrict retarray,
          *dest = 1;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result *= *src;
              }
@@ -222,9 +220,6 @@ mproduct_r8 (gfc_array_r8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 6923594e01fcb0d474076370452f27c49b89f74c..31d804973766c21a25bcd4e9de3942288662a497 100644 (file)
@@ -51,10 +51,6 @@ sum_c10 (gfc_array_c10 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_c10 (gfc_array_c10 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_c10 (gfc_array_c10 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 4ed50d04dd816a3a6d25dca43928251f8e155f2e..f9d5c1ec3fe0c8f3e27ff907166fb4010a977cd7 100644 (file)
@@ -51,10 +51,6 @@ sum_c16 (gfc_array_c16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_c16 (gfc_array_c16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_c16 (gfc_array_c16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 9d5516a3b4a8d2e26cf8cabf91d2699c22b346a6..66872ddbc04b61813624c011f2ac25b2a2287962 100644 (file)
@@ -51,10 +51,6 @@ sum_c4 (gfc_array_c4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_c4 (gfc_array_c4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_c4 (gfc_array_c4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 84684cbcd2e209fc7ff5d4a713488b0a723622b3..9d0e57fdf27baba7d829bb45323a0557e99d3b73 100644 (file)
@@ -51,10 +51,6 @@ sum_c8 (gfc_array_c8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_c8 (gfc_array_c8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_c8 (gfc_array_c8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index f4407028de57898a79cab8c10649ad8795ab1179..7fe696bc1876fe01a46356550df03d2b9db36d21 100644 (file)
@@ -51,10 +51,6 @@ sum_i1 (gfc_array_i1 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_i1 (gfc_array_i1 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_i1 (gfc_array_i1 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 570f8f2c4410ab0eff647c78e43923816e2ee105..f1840d996bce98ac7410d40186d60a78570e86b7 100644 (file)
@@ -51,10 +51,6 @@ sum_i16 (gfc_array_i16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_i16 (gfc_array_i16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_i16 (gfc_array_i16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index ea70d50888672398e2b50172f2c3133de733c5ee..f8e453b68fee8fa041de075aeae2d5c628b633dc 100644 (file)
@@ -51,10 +51,6 @@ sum_i2 (gfc_array_i2 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_i2 (gfc_array_i2 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_i2 (gfc_array_i2 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 4915ec9feb44868393759a7ce7519d1f6fdece63..e8dae17c81b66f13f652affa48287f6b8453cfb5 100644 (file)
@@ -51,10 +51,6 @@ sum_i4 (gfc_array_i4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_i4 (gfc_array_i4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_i4 (gfc_array_i4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 53f6ec24fd4896bec671597caee14614cf7ecc16..0abbaf8262289512b330cd3a052dd10fb998f1df 100644 (file)
@@ -51,10 +51,6 @@ sum_i8 (gfc_array_i8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_i8 (gfc_array_i8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_i8 (gfc_array_i8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 9552ed84cc8858abd7d67df1e549984cf529e9b4..012909bcaba5ad9f15c15c32d2023f9bdd92dd22 100644 (file)
@@ -51,10 +51,6 @@ sum_r10 (gfc_array_r10 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_r10 (gfc_array_r10 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_r10 (gfc_array_r10 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 6c8320691bfebc08b12dccc0ae4914c25d58a5c3..23420b88737312c8499bc2245a95017ff7265fa6 100644 (file)
@@ -51,10 +51,6 @@ sum_r16 (gfc_array_r16 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_r16 (gfc_array_r16 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_r16 (gfc_array_r16 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 1595336bf309cd39335084406663695a15855508..09d8f05bf7480630ee075b9612e2579368b2851e 100644 (file)
@@ -51,10 +51,6 @@ sum_r4 (gfc_array_r4 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_r4 (gfc_array_r4 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_r4 (gfc_array_r4 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 7c8a186ce761bc81e9e4769b0e65591be1d084fb..0f45648b9a8308f793220bedc082d9c30ce16639 100644 (file)
@@ -51,10 +51,6 @@ sum_r8 (gfc_array_r8 * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -154,8 +150,10 @@ sum_r8 (gfc_array_r8 * const restrict retarray,
          *dest = 0;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 
   result += *src;
              }
@@ -222,9 +220,6 @@ msum_r8 (gfc_array_r8 * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 9711925ed9943df27a1d789de94ed7d2d8c14687..494d0626aac1364ec1caf304757f0278e290214e 100644 (file)
@@ -30,10 +30,6 @@ name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
   index_type rank;
   index_type n;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
-
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -139,9 +135,6 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
   index_type n;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
index e6365ccc3ef4316858e69a36942b975d783ecf81..db063bf655e1bd19e69a2d4e307c1d02f3f9c0fb 100644 (file)
@@ -21,7 +21,6 @@ name`'rtype_qual`_'atype_code (rtype * const restrict retarray,
   index_type rank;
   index_type n;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
@@ -66,8 +65,6 @@ name`'rtype_qual`_'atype_code (rtype * const restrict retarray,
 define(START_FOREACH_BLOCK,
 `  while (base)
     {
-      do
-       {
          /* Implementation start.  */
 ')dnl
 define(FINISH_FOREACH_FUNCTION,
@@ -126,7 +123,6 @@ void
   index_type n;
   int mask_kind;
 
-  assert(back == 0);
   rank = GFC_DESCRIPTOR_RANK (array);
   if (rank <= 0)
     runtime_error ("Rank of array needs to be > 0");
index 9b4d96ab62246498dc7f26a6016c0cb383f24377..a5767f58885fb82d3b5d7cce500a07ad6d73fd80 100644 (file)
@@ -54,10 +54,6 @@ void
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -226,9 +222,6 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 8df072da033fc3272a596380e772ce660d815389..27bad4ece92d056ee18b52e88915d488a1615521 100644 (file)
@@ -41,10 +41,6 @@ name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
   index_type dim;
   int continue_loop;
 
-#ifdef HAVE_BACK_ARG
-  assert(back == 0);
-#endif
-
   /* Make dim zero based to avoid confusion.  */
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
   dim = (*pdim) - 1;
@@ -144,8 +140,10 @@ define(START_ARRAY_BLOCK,
          *dest = '$1`;
        else
          {
+#if ! defined HAVE_BACK_ARG
            for (n = 0; n < len; n++, src += delta)
              {
+#endif
 ')dnl
 define(FINISH_ARRAY_FUNCTION,
 `            }
@@ -212,9 +210,6 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
   index_type mdelta;
   int mask_kind;
 
-#ifdef HAVE_BACK_ARG
-  assert (back == 0);
-#endif
   dim = (*pdim) - 1;
   rank = GFC_DESCRIPTOR_RANK (array) - 1;
 
index 98d898f86a7ea72d99d0ad55ecce534378634ebb..ad19885ff90875ea6f4e57de777cf332edbcc12f 100644 (file)
@@ -43,8 +43,6 @@ FOREACH_FUNCTION(
     maxval = atype_min;
 #endif',
 `#if defined('atype_nan`)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -63,16 +61,29 @@ FOREACH_FUNCTION(
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base > maxval)
-           {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }')
-
+        if (back)
+         do
+            {
+             if (unlikely (*base >= maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }
+            base += sstride[0];
+          }
+         while (++count[0] != extent[0]);
+       else
+         do
+          {
+            if (unlikely (*base > maxval))
+              {
+                maxval = *base;
+                for (n = 0; n < rank; n++)
+                  dest[n * dstride] = count[n] + 1;
+              }')
 MASKED_FOREACH_FUNCTION(
 `  atype_name maxval;
    int fast = 0;
@@ -82,9 +93,7 @@ MASKED_FOREACH_FUNCTION(
 #else
     maxval = atype_min;
 #endif',
-`      }
-      while (0);
-      if (unlikely (!fast))
+`      if (unlikely (!fast))
        {
          do
            {
@@ -111,14 +120,28 @@ MASKED_FOREACH_FUNCTION(
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base > maxval)
+      else
+        if (back)
+         do
            {
-             maxval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }')
+             if (*mbase && *base >= maxval)
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+             base += sstride[0];
+           }
+         while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (*mbase && unlikely (*base > maxval))
+               {
+                 maxval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }')
 
 SCALAR_FOREACH_FUNCTION(`0')
 #endif
index 3c30a666feb3fe57fa62bddfb3452d383df6bf9f..b20233534f8fc52f07ec224c84317dcacf904ce2 100644 (file)
@@ -38,9 +38,10 @@ include(iforeach-s.m4)dnl
 
 FOREACH_FUNCTION(
 `  const atype_name *maxval;
-   maxval = base;'
+   maxval = NULL;'
 ,
-`  if (compare_fcn (base, maxval, len) > 0)
+`    if (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0 :
+                                  compare_fcn (base, maxval, len) > 0))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
@@ -52,7 +53,9 @@ MASKED_FOREACH_FUNCTION(
 
   maxval = NULL;'
 ,
-`  if (*mbase && (maxval == NULL || compare_fcn (base, maxval, len) > 0))
+`  if (*mbase &&
+        (maxval == NULL || (back ? compare_fcn (base, maxval, len) >= 0:
+                                  compare_fcn (base, maxval, len) > 0)))
     {
       maxval = base;
       for (n = 0; n < rank; n++)
index 324a699c0bb9d6b83907c1508ba4f0e92f850697..811f7fdb80d94eb52511e1ae79a7adf7fe79ce77 100644 (file)
@@ -42,6 +42,8 @@ ARRAY_FUNCTION(0,
 #endif
        result = 1;',
 `#if defined ('atype_nan`)
+            for (n = 0; n < len; n++, src += delta)
+              {
                if (*src >= maxval)
                  {
                    maxval = *src;
@@ -49,10 +51,12 @@ ARRAY_FUNCTION(0,
                    break;
                  }
              }
+#else
+           n = 0;
+#endif
            for (; n < len; n++, src += delta)
              {
-#endif
-               if (*src > maxval)
+               if (back ? *src >= maxval : *src > maxval)
                  {
                    maxval = *src;
                    result = (rtype_name)n + 1;
@@ -88,13 +92,23 @@ MASKED_ARRAY_FUNCTION(0,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src > maxval)
-                 {
-                   maxval = *src;
-                   result = (rtype_name)n + 1;
-                 }')
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src >= maxval))
+                   {
+                     maxval = *src;
+                     result = (rtype_name)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src > maxval))
+                   {
+                     maxval = *src;
+                     result = (rtype_name)n + 1;
+                   }')
 
 SCALAR_ARRAY_FUNCTION(0)
 
index 23da4abf068980aa96433f1ae6743f55c4845ad6..8b9333983705bd52be0584f15010d6b0389e4ede 100644 (file)
@@ -34,9 +34,10 @@ include(ifunction-s.m4)dnl
 
 ARRAY_FUNCTION(0,
 `      const atype_name *maxval;
-       maxval = base;
-       result = 1;',
-`              if (compare_fcn (src, maxval, string_len) > 0)
+       maxval = NULL;
+       result = 0;',
+`              if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                             compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (rtype_name)n + 1;
@@ -55,7 +56,8 @@ MASKED_ARRAY_FUNCTION(0,
            }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, maxval, string_len) > 0)
+               if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
+                                    compare_fcn (src, maxval, string_len) > 0))
                  {
                    maxval = src;
                    result = (rtype_name)n + 1;
index 5138f696ec373426712048960abe5a29b1f5a90a..b30e257bfc34471a1de443a9382737d7f9dc4cde 100644 (file)
@@ -54,7 +54,6 @@ export_proto('name`'rtype_qual`_'atype_code`);
   const 'atype_name` *maxval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -63,15 +62,16 @@ export_proto('name`'rtype_qual`_'atype_code`);
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  maxval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) > 0)
+      if (maxval == NULL || (back ? compare_fcn (src, maxval, len) >= 0 :
+                                   compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -96,7 +96,6 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -134,7 +133,8 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) > 0)
+      if (*mbase && (back ? compare_fcn (src, maxval, len) >= 0 :
+                          compare_fcn (src, maxval, len) > 0))
       {
         ret = i;
         maxval = src;
index 78c60d979eea1432e59e6742502e9a2f07b86ed4..44174cf03fdabe9f192d6c044bb80293ad9adf31 100644 (file)
@@ -43,8 +43,6 @@ FOREACH_FUNCTION(
     minval = atype_max;
 #endif',
 `#if defined('atype_nan`)
-       }
-      while (0);
       if (unlikely (!fast))
        {
          do
@@ -63,16 +61,29 @@ FOREACH_FUNCTION(
          if (likely (fast))
            continue;
        }
-      else do
-       {
+      else
 #endif
-         if (*base < minval)
+    if (back)
+      do
+       {
+         if (unlikely (*base <= minval))
            {
              minval = *base;
              for (n = 0; n < rank; n++)
                dest[n * dstride] = count[n] + 1;
+           }
+         base += sstride[0];
+       }
+      while (++count[0] != extent[0]);
+    else
+      do
+        {
+         if (unlikely (*base < minval))
+           {
+             minval = *base;
+             for (n = 0; n < rank; n++)
+               dest[n * dstride] = count[n] + 1;
            }')
-
 MASKED_FOREACH_FUNCTION(
 `  atype_name minval;
    int fast = 0;
@@ -82,9 +93,7 @@ MASKED_FOREACH_FUNCTION(
 #else
     minval = atype_max;
 #endif',
-`      }
-      while (0);
-      if (unlikely (!fast))
+`      if (unlikely (!fast))
        {
          do
            {
@@ -111,14 +120,27 @@ MASKED_FOREACH_FUNCTION(
          if (likely (fast))
            continue;
        }
-      else do
-       {
-         if (*mbase && *base < minval)
+        else
+        if (back)
+         do
            {
-             minval = *base;
-             for (n = 0; n < rank; n++)
-               dest[n * dstride] = count[n] + 1;
-           }')
-
+             if (unlikely (*mbase && (*base <= minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }
+               base += sstride[0];
+           }
+           while (++count[0] != extent[0]);
+       else
+         do
+           {
+             if (unlikely (*mbase && (*base < minval)))
+               {
+                 minval = *base;
+                 for (n = 0; n < rank; n++)
+                   dest[n * dstride] = count[n] + 1;
+               }')
 SCALAR_FOREACH_FUNCTION(`0')
 #endif
index c4b9f461ac8871297f0eee464b1c7c9b274ed0bf..65d11ef62a1eb66c873c3e85d86d28c26b400f74 100644 (file)
@@ -38,9 +38,10 @@ include(iforeach-s.m4)dnl
 
 FOREACH_FUNCTION(
 `  const atype_name *minval;
-   minval = base;'
+   minval = NULL;'
 ,
-`  if (compare_fcn (base, minval, len) < 0)
+`    if (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                          compare_fcn (base, minval, len) < 0))
     {
       minval = base;
       for (n = 0; n < rank; n++)
@@ -52,7 +53,9 @@ MASKED_FOREACH_FUNCTION(
 
   minval = NULL;'
 ,
-`  if (*mbase && (minval == NULL || compare_fcn (base, minval, len) < 0))
+`  if (*mbase &&
+      (minval == NULL || (back ? compare_fcn (base, minval, len) <= 0 :
+                                        compare_fcn (base, minval, len) < 0)))
     {
       minval = base;
       for (n = 0; n < rank; n++)
index ebf52f09d5f9bc9f49101694baa312043400f019..a83156eaa5386400e13d1a63a9d0aa5bd28ab208 100644 (file)
@@ -42,6 +42,8 @@ ARRAY_FUNCTION(0,
 #endif
        result = 1;',
 `#if defined ('atype_nan`)
+          for (n = 0; n < len; n++, src += delta)
+            {
                if (*src <= minval)
                  {
                    minval = *src;
@@ -49,14 +51,26 @@ ARRAY_FUNCTION(0,
                    break;
                  }
              }
-           for (; n < len; n++, src += delta)
-             {
+#else
+           n = 0;
 #endif
-               if (*src < minval)
-                 {
-                   minval = *src;
-                   result = (rtype_name)n + 1;
-                 }')
+           if (back)
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (rtype_name)n + 1;
+                   }
+               }
+           else
+             for (; n < len; n++, src += delta)
+               {
+                 if (unlikely (*src < minval))
+                   {
+                     minval = *src;
+                     result = (rtype_name) n + 1;
+                   }')
 
 MASKED_ARRAY_FUNCTION(0,
 `      atype_name minval;
@@ -88,13 +102,23 @@ MASKED_ARRAY_FUNCTION(0,
              result = result2;
            else
 #endif
-           for (; n < len; n++, src += delta, msrc += mdelta)
-             {
-               if (*msrc && *src < minval)
+           if (back)
+             for (; n < len; n++, src += delta, msrc += mdelta)
+               {
+                 if (*msrc && unlikely (*src <= minval))
+                   {
+                     minval = *src;
+                     result = (rtype_name)n + 1;
+                   }
+               }
+             else
+               for (; n < len; n++, src += delta, msrc += mdelta)
                  {
-                   minval = *src;
-                   result = (rtype_name)n + 1;
-                 }', `')
+                   if (*msrc && unlikely (*src < minval))
+                     {
+                       minval = *src;
+                       result = (rtype_name) n + 1;
+                     }')
 
 SCALAR_ARRAY_FUNCTION(0)
 
index 6e46631ab8b1955d917e89fcec6edec8a77a4238..e74e2781a500980f7d7eb19eb5c5fd59496a2589 100644 (file)
@@ -34,9 +34,10 @@ include(ifunction-s.m4)dnl
 
 ARRAY_FUNCTION(0,
 `      const atype_name *minval;
-       minval = base;
-       result = 1;',
-`              if (compare_fcn (src, minval, string_len) < 0)
+       minval = NULL;
+       result = 0;',
+`              if (minval == NULL || (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                             compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (rtype_name)n + 1;
@@ -55,7 +56,8 @@ MASKED_ARRAY_FUNCTION(0,
             }
            for (; n < len; n++, src += delta, msrc += mdelta)
              {
-               if (*msrc && compare_fcn (src, minval, string_len) < 0)
+               if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
+                                    compare_fcn (src, minval, string_len) < 0))
                  {
                    minval = src;
                    result = (rtype_name)n + 1;
index 2df71bb34b94940fb99bf6d0b1458c6658672ae9..0cdb2a550890946b8b2f22f94b9f01a6860796cb 100644 (file)
@@ -52,10 +52,9 @@ export_proto('name`'rtype_qual`_'atype_code`);
   index_type sstride;
   index_type extent;
   const 'atype_name` *src;
-  const 'atype_name` *maxval;
+  const 'atype_name` *minval;
   index_type i;
 
-  assert(back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -64,15 +63,16 @@ export_proto('name`'rtype_qual`_'atype_code`);
 
   ret = 1;
   src = array->base_addr;
-  maxval = src;
-  for (i=2; i<=extent; i++)
+  minval = NULL;
+  for (i=1; i<=extent; i++)
     {
-      src += sstride;
-      if (compare_fcn (src, maxval, len) < 0)
+      if (minval == NULL || (back ? compare_fcn (src, minval, len) <= 0 :
+                                   compare_fcn (src, minval, len) < 0))
       {
         ret = i;
-        maxval = src;
+        minval = src;
       }
+      src += sstride;
     }
   return ret;
 }
@@ -97,7 +97,6 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
   int mask_kind;
   index_type mstride;
 
-  assert (back == 0);
   extent = GFC_DESCRIPTOR_EXTENT(array,0);
   if (extent <= 0)
     return 0;
@@ -135,7 +134,9 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
 
   for (i=j+1; i<=extent; i++)
     {
-      if (*mbase && compare_fcn (src, maxval, len) < 0)
+
+      if (*mbase && (back ? compare_fcn (src, maxval, len) <= 0 :
+                           compare_fcn (src, maxval, len) < 0))
       {
         ret = i;
         maxval = src;