Home | History | Annotate | Line # | Download | only in m4
      1      1.1  mrg `/* Implementation of the MAXLOC intrinsic
      2  1.1.1.3  mrg    Copyright (C) 2017-2022 Free Software Foundation, Inc.
      3      1.1  mrg    Contributed by Thomas Koenig
      4      1.1  mrg 
      5      1.1  mrg This file is part of the GNU Fortran runtime library (libgfortran).
      6      1.1  mrg 
      7      1.1  mrg Libgfortran is free software; you can redistribute it and/or
      8      1.1  mrg modify it under the terms of the GNU General Public
      9      1.1  mrg License as published by the Free Software Foundation; either
     10      1.1  mrg version 3 of the License, or (at your option) any later version.
     11      1.1  mrg 
     12      1.1  mrg Libgfortran is distributed in the hope that it will be useful,
     13      1.1  mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
     14      1.1  mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15      1.1  mrg GNU General Public License for more details.
     16      1.1  mrg 
     17      1.1  mrg Under Section 7 of GPL version 3, you are granted additional
     18      1.1  mrg permissions described in the GCC Runtime Library Exception, version
     19      1.1  mrg 3.1, as published by the Free Software Foundation.
     20      1.1  mrg 
     21      1.1  mrg You should have received a copy of the GNU General Public License and
     22      1.1  mrg a copy of the GCC Runtime Library Exception along with this program;
     23      1.1  mrg see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     24      1.1  mrg <http://www.gnu.org/licenses/>.  */
     25      1.1  mrg 
     26      1.1  mrg #include "libgfortran.h"'
     27      1.1  mrg 
     28      1.1  mrg include(iparm.m4)dnl
     29      1.1  mrg include(ifunction-s.m4)dnl
     30      1.1  mrg 
     31      1.1  mrg `#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)'
     32      1.1  mrg 
     33      1.1  mrg #define HAVE_BACK_ARG 1
     34      1.1  mrg 
     35      1.1  mrg ARRAY_FUNCTION(0,
     36      1.1  mrg `	const atype_name *maxval;
     37      1.1  mrg 	maxval = NULL;
     38      1.1  mrg 	result = 0;',
     39      1.1  mrg `		if (maxval == NULL || (back ? compare_fcn (src, maxval, string_len) >= 0 :
     40      1.1  mrg 		   	      	      	      compare_fcn (src, maxval, string_len) > 0))
     41      1.1  mrg 		  {
     42      1.1  mrg 		    maxval = src;
     43      1.1  mrg 		    result = (rtype_name)n + 1;
     44      1.1  mrg 		  }', `')
     45      1.1  mrg 
     46      1.1  mrg MASKED_ARRAY_FUNCTION(0,
     47      1.1  mrg `	const atype_name *maxval;
     48      1.1  mrg 	maxval = base;
     49      1.1  mrg 	result = 0;',
     50      1.1  mrg `		if (*msrc)
     51      1.1  mrg 		      {
     52      1.1  mrg 			maxval = src;
     53      1.1  mrg 			result = (rtype_name)n + 1;
     54      1.1  mrg 			break;
     55      1.1  mrg 		      }
     56      1.1  mrg 	    }
     57      1.1  mrg 	    for (; n < len; n++, src += delta, msrc += mdelta)
     58      1.1  mrg 	      {
     59      1.1  mrg 		if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
     60      1.1  mrg 		   	     	     compare_fcn (src, maxval, string_len) > 0))
     61      1.1  mrg 		  {
     62      1.1  mrg 		    maxval = src;
     63      1.1  mrg 		    result = (rtype_name)n + 1;
     64      1.1  mrg 		  }
     65      1.1  mrg 	      ')
     66      1.1  mrg 
     67      1.1  mrg SCALAR_ARRAY_FUNCTION(0)
     68      1.1  mrg 
     69      1.1  mrg #endif
     70